圖書管理系統
- 一、系統介紹
- 二、系統展示
- 三、代碼實現
- 1.前端
- book.jsp
- cart.jsp
- detail.jsp
- doCart.jsp
- doCartFail.jsp
- doInfo.jsp
- doregister.jsp
- dosearchPassword.jsp
- fail.jsp
- info.jsp
- login.jsp
- logout.jsp
- register.jsp
- search.jsp
- searchPassword.jsp
- 2.後端
- Book
- Card
- User
- BookDao
- CardDao
- UserDao
- BookService
- CardService
- UserService
- BookServiceImpl
- CardServiceImpl
- UserServiceImpl
- BaseDao
- 3.所用到的包
- 四、數據庫
- 五、感悟
一、系統介紹
軟件環境
Operating System:Windows10
IDEA:2018.2
Java:jdk1.8
Mysql:8.0.13
Tomcat:7.0.85
該圖書管理系統實現了用戶註冊與登錄功能,實現了實現了圖書列表展示,購物車簡單的功能。後臺表只有三張,一張是user表,存儲的是用戶的信息,一張是book表,存儲的是圖書的信息,另外一張是card表,用來存儲某個用戶對應的購物車的信息。
下面是整個整個工程的截圖
二、系統展示
1.登錄界面
2.註冊界面
3.圖書列表界面
4.圖書詳情界面
5.購物車界面
三、代碼實現
1.前端
book.jsp
<%--
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/24
Time: 10:50
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ page import="java.util.List" %>
<%@ page import="com.sjsq.po.Book" %>
<%@ page import="com.sjsq.service.impl.BookServiceImpl" %>
<%@ page import="com.sjsq.po.User" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查看圖書</title>
<style type="text/css">
h1{
text-align: center;
}
#before{
text-align: center;
}
#head{
background: #eeeeee;height: 80px;
}
#headLink{
font-size: 20px;
}
#headWelLink{
font-size: 20px;
}
</style>
</head>
<body>
<%--頭部信息--%>
<%
User user =(User)session.getAttribute("user");
if(user == null){
response.sendRedirect("login.jsp");
}else {
%>
<div id="head">
<table width="100%">
<td id="headWelLink">歡迎您:<%=user.getName()%></td>
<td align="right" id="headLink">
<a href="cart.jsp">我的購物車</a>
<a href="logout.jsp">安全退出</a>
</td>
</table>
</div>
<%
}
%>
<%--圖書信息--%>
<%
Book book = new Book();
BookServiceImpl service = new BookServiceImpl();
List<Book> list = service.select(book);
%>
<h1>圖書列表</h1>
<div id="before">
<a href="javascript: window.history.go(-1)">返回上一級</a>
</div>
<table align="center" cellpadding="10" cellspacing="10">
<tr bgcolor="green">
<td>編號</td>
<td>書名</td>
<td>價格</td>
<td>作者</td>
<td>封皮</td>
<td>出版社</td>
</tr>
<%
String bg = null;
for (int i = 0;i<list.size();i++){
Book b =list.get(i);
if(i%2 == 0){
bg = "pink";
}else{
bg = "yellow";
}
%>
<tr bgcolor="<%=bg%>">
<td><%=b.getBookid()%></td>
<td><a href="doInfo.jsp?bookid=<%=b.getBookid()%>"><%=b.getBookname()%></a></td>
<td><%=b.getPrice() %></td>
<td><%=b.getAuthor() %></td>
<td><%=b.getPicture() %></td>
<td><%=b.getPublish() %></td>
</tr>
<%
}
%>
</table>
</body>
</html>
cart.jsp
<%--
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/31
Time: 10:45
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.sjsq.po.User" %>
<%@ page import="com.sjsq.po.Card" %>
<%@ page import="com.sjsq.service.CardService" %>
<%@ page import="com.sjsq.service.impl.CardServiceImpl" %>
<%@ page import="java.util.List" %>
<%@ page import="com.sjsq.dao.BookDao" %>
<%@ page import="com.sjsq.dao.impl.BookDaoImpl" %>
<html>
<head>
<title>購物車信息</title>
<style type="text/css">
h1{
text-align: center;
}
#before{
text-align: center;
}
#head{
background: #eeeeee;height: 80px;
}
#headLink{
font-size: 20px;
}
#headWelLink{
font-size: 20px;
}
</style>
</head>
<body>
<%--頭部信息--%>
<%
User user =(User)session.getAttribute("user");
if(user == null){
response.sendRedirect("login.jsp");
}else {
%>
<div id="head">
<table width="100%">
<td id="headWelLink">歡迎您:<%=user.getName()%></td>
<td align="right" id="headLink">
<a href="cart.jsp">我的購物車</a>
<a href="logout.jsp">安全退出</a>
</td>
</table>
</div>
<%
}
%>
<%--圖書信息--%>
<%
CardService service = new CardServiceImpl();
List<Card> list = service.getCard(user.getId());
BookDao dao = new BookDaoImpl();
Double totalPrice = 0D;
Double bookPrice = 0D;
%>
<h1>購物車圖書</h1>
<div id="before">
<a href="javascript: window.history.go(-1)">返回上一級</a>
</div>
<table align="center" cellpadding="10" cellspacing="10">
<tr bgcolor="green">
<td>姓名</td>
<td>圖書序號</td>
<td>書名</td>
<td>數量</td>
<td>價格小計</td>
</tr>
<%
for (int i = 0;i<list.size();i++){
Card card = list.get(i);
String bookName = dao.getBook(card.getBookid()).getBookname();
bookPrice = dao.getBook(card.getBookid()).getPrice()*card.getBooknum();
totalPrice = bookPrice + totalPrice;
%>
<tr bgcolor="#ffdead">
<td><%=card.getUsername() %></td>
<td><%=card.getBookid() %></td>
<td><%=bookName %></td>
<td><%=card.getBooknum() %></td>
<td><%=bookPrice%></td>
</tr>
<%
}
%>
<tr>
<td colspan="4" align="right" bgcolor="#6495ed">價格總計</td>
<td bgcolor="#6495ed"><%=totalPrice %></td>
</tr>
</table>
<div style="text-align:center;font-size:20px;margin-top:20px;">
<a href="book.jsp">繼續購買圖書</a>
<a href="login.jsp">登陸頁面</a>
</div>
</body>
</html>
detail.jsp
<%--
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/24
Time: 10:51
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ page import="com.sjsq.po.Book" %>
<%@ page import="com.sjsq.po.User" %>
<%
// 獲取絕對路徑路徑 ,開發項目一定要使用絕對路徑,不然肯定出錯
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":"
+ request.getServerPort() + path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath %>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>圖書詳情</title>
<style type="text/css">
h1{
text-align: center;
}
a{
text-align:center;font-size: 24px;text-decoration: none;
}
a:hover{
text-decoration: underline;font-size: 20px;
}
#before{
text-align: center;
}
#head{
background: #eeeeee;height: 80px;
}
#headLink{
font-size: 20px;
}
#headWelLink{
font-size: 20px;
}
</style>
</head>
<body>
<%--頭部信息--%>
<%
User user =(User)session.getAttribute("user");
if(user == null){
response.sendRedirect("login.jsp");
}else {
%>
<div id="head">
<table width="100%">
<td id="headWelLink">歡迎您:<%=user.getName()%></td>
<td align="right" id="headLink">
<a href="cart.jsp">我的購物車</a>
<a href="logout.jsp">安全退出</a>
</td>
</table>
</div>
<%
}
%>
<h1>圖書詳情</h1>
<div id="before">
<a href="javascript: window.history.go(-1)">返回上一級</a>
</div>
<%
Book book = (Book)session.getAttribute("book");
%>
<table align="center" cellpadding="20" cellspacing="20">
<tr style="font-size: 20px">
<td>圖書編號</td>
<td>圖書名稱</td>
<td>圖書價格</td>
<td>圖書作者</td>
<td>圖書封皮</td>
<td>圖書出版社</td>
</tr>
<tr>
<td><%=book.getBookid()%></td>
<td><%=book.getBookname()%></td>
<td><%=book.getPrice()%></td>
<td><%=book.getAuthor()%></td>
<td><%=book.getPicture()%></td>
<td><%=book.getPublish()%></td>
</tr>
<tr>
<td colspan="3"></td>
<td></td>
<td colspan="2"></td>
</tr>
</table>
<div style="text-align:center;font-size: 36px;">
<a href="doCart.jsp">添加到購物車</a>
<a href="book.jsp">圖書列表</a>
</div>
</body>
</html>
doCart.jsp
<%--
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/31
Time: 10:40
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ page import="com.sjsq.po.Book" %>
<%@ page import="com.sjsq.po.User" %>
<%@ page import="com.sjsq.service.CardService" %>
<%@ page import="com.sjsq.service.impl.CardServiceImpl" %>
<html>
<head>
<title>處理購物車</title>
</head>
<body>
<%-- 處理購物車 --%>
<%
// 獲取用戶的信息
User user =(User)session.getAttribute("user");
// 獲取書籍的信息
Book book = (Book)session.getAttribute("book");
// 定義購物車服務
CardService service = new CardServiceImpl();
// 獲取圖書數量且加1
Integer booknum = service.getBookNum(book) + 1;
// 執行添加購物車操作
boolean flag = service.addCard(user,book,booknum);
if(flag){
// 添加成功返回到購物車頁面
response.sendRedirect("cart.jsp");
}else{
//
response.sendRedirect("doCartFail.jsp");
}
%>
</body>
</html>
doCartFail.jsp
<%--
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/31
Time: 11:45
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>添加失敗</title>
<style type="text/css">
h1{
text-align: center;
}
h4{
text-align: center;color: red;
}
body{
background-color: antiquewhite;
}
div{
text-align: center;
}
</style>
</head>
<body>
<h1>添加購物車失敗</h1>
<hr>
<h4>請重新添加</h4>
<div>
<a href="javascript: window.history.go(-1)">返回上一級</a>
</div>
</body>
</html>
doInfo.jsp
<%--
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/24
Time: 10:51
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ page import="com.sjsq.po.Book" %>
<%@ page import="com.sjsq.service.BookService" %>
<%@ page import="com.sjsq.service.impl.BookServiceImpl" %>
<%
// 獲取絕對路徑路徑 ,開發項目一定要使用絕對路徑,不然肯定出錯
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":"
+ request.getServerPort() + path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath %>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>書籍信息</title>
</head>
<body>
<%
Book book = new Book();
String sid = request.getParameter("bookid");
Integer id = Integer.parseInt(sid);
BookService service = new BookServiceImpl();
book.setBookid(id);
Book bookCur = service.getBook(book);
// 控制檯打印出類的信息(日誌的前身)
System.out.print("doInfo.jsp的信息-->");
System.out.println(bookCur);
session.setAttribute("book", bookCur);
response.sendRedirect("detail.jsp");
%>
</body>
</html>
doregister.jsp
<%--
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/21
Time: 23:45
To change this template use File | Settings | File Templates.
--%>
<%@page import="com.sjsq.dao.impl.UserDaoImpl"%>
<%@page import="com.sjsq.dao.UserDao"%>
<%@page import="com.sjsq.po.User"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>處理註冊</title>
</head>
<body>
<%
// 設置獲取註冊時的編碼爲UTF-8
request.setCharacterEncoding("UTF-8");
User user=new User();
//獲取register.jsp頁面提交的賬號和密碼
String name=request.getParameter("name");
String password=request.getParameter("password");
String email=request.getParameter("email");
String phone=request.getParameter("phone");
//獲取register.jsp頁面提交的賬號和密碼設置到實體類User中
user.setName(name);
user.setPassword(password);
user.setEmail(email);
user.setPhone(phone);
//引入數據交互層
UserDao dao=new UserDaoImpl();
boolean flag=dao.register(user);
if(flag){
response.sendRedirect("login.jsp");
}else{
response.sendRedirect("register.jsp");
}
%>
</body>
</html>
dosearchPassword.jsp
<%--
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/22
Time: 23:23
To change this template use File | Settings | File Templates.
--%>
<%@page import="java.util.List"%>
<%@page import="com.sjsq.service.impl.UserServiceImpl"%>
<%@page import="com.sjsq.po.User"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%
// 獲取絕對路徑路徑 ,開發項目一定要使用絕對路徑,不然肯定出錯
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":"
+ request.getServerPort() + path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath %>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>處理找回密碼</title>
</head>
<body>
<%
User user=new User();
//獲取searchPassword.jsp頁面提交的賬號和密碼
String name=request.getParameter("name");
user.setName(name);
UserServiceImpl service=new UserServiceImpl();
List<User> list=service.selectUser(user);
request.setAttribute("list", list);
for(User u:list){
request.setAttribute("user", u);
out.print(u);
}
if(user!=null){
//response.sendRedirect("search.jsp");//不傳輸數據的轉發
request.getRequestDispatcher("search.jsp").forward(request, response);
}
%>
</body>
</html>
fail.jsp
<%--
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/26
Time: 23:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登錄失敗</title>
<style type="text/css">
h1{
text-align: center;
}
h4{
text-align: center;color: red;
}
body{
background-color: antiquewhite;
}
div{
text-align: center;
}
</style>
</head>
<body>
<h1>現存圖書列表</h1>
<hr>
<h4>登錄失敗</h4>
<div>
<a href="login.jsp">返回登錄</a>
</div>
</body>
</html>
info.jsp
<%--
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/26
Time: 22:56
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ page import="com.sjsq.po.User"%>
<%@ page import="com.sjsq.dao.UserDao"%>
<%@ page import="com.sjsq.dao.impl.UserDaoImpl"%>
<%@ page import="com.sjsq.service.UserService" %>
<%@ page import="com.sjsq.service.impl.UserServiceImpl" %>
<%@ page import="java.util.List" %>
<%
// 獲取絕對路徑路徑 ,開發項目一定要使用絕對路徑,不然肯定出錯
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":"
+ request.getServerPort() + path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath %>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用戶登錄</title>
<style type="text/css">
h1{
text-align: center;
}
h4{
text-align: center;color: red;
}
body{
background-color: antiquewhite;
}
</style>
</head>
<body>
<h1>現存圖書列表</h1>
<hr>
<h4>---裝飾中---</h4>
<%
// 設置接收的編碼爲UTF-8
request.setCharacterEncoding("utf-8");
User user = new User();
UserDao dao = new UserDaoImpl();
String name = request.getParameter("name");
String password=request.getParameter("password");
user.setName(name);
user.setPassword(password);
User us=dao.login(user);
// 把數據庫裏面的User獲取出來
UserService service = new UserServiceImpl();
List<User> list = service.selectUser(user);
for(int i=0;i<list.size();i++){
user = list.get(i);
}
System.out.println("顯示用戶信息:");
System.out.println(user);
session.setAttribute("user",user);
if(us != null){
response.sendRedirect("book.jsp");
}else{
response.sendRedirect("fail.jsp");
}
%>
</body>
</html>
login.jsp
<%--
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/19
Time: 22:44
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%
// 獲取絕對路徑路徑 ,開發項目一定要使用絕對路徑,不然肯定出錯
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":"
+ request.getServerPort() + path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath %>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用戶登錄</title>
<style type="text/css">
h1{
text-align: center;
}
h4{
text-align: center;color: red;
}
body{
background-color: antiquewhite;
}
a{
text-decoration: none;font-size: 20px;color: black;
}
a:hover{
text-decoration: underline;font-size: 24px;color: red;
}
</style>
</head>
<body>
<form action="info.jsp" method="post">
<h1>用戶登錄</h1>
<h4>---正在美化中---</h4>
<hr/>
<table align="center">
<tr>
<td>賬號:</td>
<td><input type="text" name="name" id="name" placeholder="請輸入您的賬號" autofocus="autofocus"></td>
</tr>
<tr>
<td>密碼:</td>
<td><input type="password" name="password" id="password" placeholder="請輸入您的密碼"></td>
<td><a href="searchPassword.jsp">找回密碼</a></td>
</tr>
<tr>
<td colspan="1">
</td>
<td>
<input type="submit" value="登錄"/>
<input type="reset" value="重置"/>
<a href="register.jsp" target="_blank">註冊</a>
</td>
</tr>
</table>
</form>
</body>
</html>
logout.jsp
<%--
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/25
Time: 21:51
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>退出登錄</title>
</head>
<body>
<%
session.invalidate();
response.sendRedirect("login.jsp");
%>
</body>
</html>
register.jsp
<%--
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/21
Time: 23:14
To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用戶註冊</title>
<style type="text/css">
h1{
text-align: center;
}
h4{
text-align: center;color: red;
}
body{
background-color: antiquewhite;
}
div{
text-align: center;
}
</style>
</head>
<body>
<h1>用戶註冊</h1>
<h4>---裝飾中---</h4>
<hr/>
<form action="doregister.jsp" method="post" name="registerForm">
<div>
<tr>
<label>您的賬號:</label>
<input type="text" name="name" id="name" placeholder="請輸入用戶名" autofocus="autofocus">
</tr>
</div>
<div>
<tr>
<label>您的密碼:</label></td>
<input type="password" name="password" id="password" placeholder="請輸入密碼">
</tr>
</div>
<div>
<tr>
</tr>
<label>確認密碼:</label>
<input type="password" name="relpassword" id="relpassword" placeholder="請確認密碼">
</div>
<div>
<tr>
<label>電話號碼:</label>
<input type="text" name="phone" id="phone" placeholder="請輸入電話號碼">
</tr>
</div>
<div>
<tr>
<label>電子郵件:</label>
<input type="text" name="email" id="email" placeholder="請輸入電子郵件">
</tr>
</div>
<div>
<tr>
<button type="submit" onclick="return checkForm()">註冊</button>
<button type="reset">重置</button>
<a href="login.jsp" target="_blank">登錄</a>
</tr>
</div>
</form>
<script type="text/javascript">
function checkForm() {
var name = registerForm.name.value;
var pwd = registerForm.password.value;
var repwd = registerForm.relpassword.value;
//alert(name + pwd + repwd);
if (name == "" || name == null) {
alert("請輸入用戶名");
registerForm.name.focus();
return false;
} else if (pwd == "" || pwd == null) {
alert("請輸入密碼");
registerForm.password.focus();
return false;
} else if (repwd == "" || repwd == null) {
alert("請輸入確認密碼");
registerForm.relpassword.focus();
return false;
} else if (pwd != repwd) {
alert("兩次密碼輸入不一致,請重新輸入!");
registerForm.relpassword.focus();
return false;
}
alert('註冊成功!');
return true;
}
</script>
</body>
</html>
search.jsp
<%--
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/22
Time: 23:28
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%
// 獲取絕對路徑路徑 ,開發項目一定要使用絕對路徑,不然肯定出錯
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":"
+ request.getServerPort() + path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath %>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>彈出信息</title>
<script type="text/javascript">
alert("您的密碼是:${user.password}");
</script>
<style type="text/css">
h1{
text-align: center;
}
div{
text-align: center;
}
</style>
</head>
<body>
<h1>您的密碼是:${user.password}</h1>
<div>
<a href="javascript: window.history.go(-1)">返回上一級</a>
</div>
</body>
</html>
searchPassword.jsp
<%--
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/22
Time: 23:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%
// 獲取絕對路徑路徑 ,開發項目一定要使用絕對路徑,不然肯定出錯
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":"
+ request.getServerPort() + path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath %>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>找回密碼</title>
<style type="text/css">
h1{
text-align: center;
}
div{
text-align: center;
}
body{
background-color:antiquewhite;
}
</style>
</head>
<body>
<h1>找回密碼</h1>
<div>
<a href="javascript: window.history.go(-1)">返回上一級</a>
</div>
<form action="dosearchPassword.jsp" method="post">
<table align="center">
<tr>
<td>請輸入賬號:</td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td colspan="1"></td>
<td>
<input type="submit" value="提交">
<input type="reset" value="重置">
</td>
</tr>
</table>
</form>
</body>
</html>
2.後端
Book
package com.sjsq.po;
import java.io.Serializable;
/**
* @author shuijianshiqing
* @date 2020/5/19 22:40
*/
public class Book implements Serializable {
private static final long serialVersionUID = 1L;
private Integer bookid;
private String bookname;
private Double price;
private String author;
private String picture;
private String publish;
public static long getSerialVersionUID() {
return serialVersionUID;
}
public Integer getBookid() {
return bookid;
}
public void setBookid(Integer bookid) {
this.bookid = bookid;
}
public String getBookname() {
return bookname;
}
public void setBookname(String bookname) {
this.bookname = bookname;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPicture() {
return picture;
}
public void setPicture(String picture) {
this.picture = picture;
}
public String getPublish() {
return publish;
}
public void setPublish(String publish) {
this.publish = publish;
}
@Override
public String toString() {
return "Book{" +
"bookid=" + bookid +
", bookname='" + bookname + '\'' +
", price=" + price +
", author='" + author + '\'' +
", picture='" + picture + '\'' +
", publish='" + publish + '\'' +
'}';
}
}
Card
package com.sjsq.po;
/**
* @author shuijianshiqing
* @date 2020/5/29 19:34
*/
public class Card {
// 主鍵
private Integer id;
// 用戶Id
private Integer userid;
// 用戶名
private String username;
// 書名
private Integer bookid;
// 書本的數量
private int booknum;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUserid() {
return userid;
}
public void setUserid(Integer userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getBookid() {
return bookid;
}
public void setBookid(Integer bookid) {
this.bookid = bookid;
}
public int getBooknum() {
return booknum;
}
public void setBooknum(int booknum) {
this.booknum = booknum;
}
@Override
public String toString() {
return "Card{" +
"id=" + id +
", userid=" + userid +
", username='" + username + '\'' +
", bookid=" + bookid +
", booknum=" + booknum +
'}';
}
}
User
package com.sjsq.po;
import java.io.Serializable;
/**
* @author shuijianshiqing
* @date 2020/5/19 22:19
* 用戶的實體類
*/
public class User implements Serializable {
// 增加序列號,作用是反序列化的時候不會報錯,切能進行IO的持久化
public static final long serialVersionUID = 1L;
private Integer id;
private String name;
private String password;
private String email;
private String phone;
public static long getSerialVersionUID() {
return serialVersionUID;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
", email='" + email + '\'' +
", phone='" + phone + '\'' +
'}';
}
}
BookDao
package com.sjsq.dao;
import com.sjsq.po.Book;
import java.util.List;
/**
* @author shuijianshiqing
* @date 2020/5/20 23:13
* 圖書信息接口
*/
public interface BookDao {
/**
* 查詢圖書信息
* @param sql
* @param arr
* @return
*/
public List<Book> select(String sql,Object[] arr);
/**
* 根據圖書編號進行查詢
* @param id
* @return
*/
public Book getBook(Integer id);
}
CardDao
package com.sjsq.dao;
import com.sjsq.po.Book;
import com.sjsq.po.Card;
import com.sjsq.po.User;
import java.util.List;
/**
* @author shuijianshiqing
* @date 2020/5/29 19:42
*/
public interface CardDao {
/**
* 通過用戶Id獲取用戶的購物車
* @param id
* @return
*/
public List<Card> getCard(Integer id);
/**
* 添加用戶信息和圖書信息到用戶的購物車
* @param user
* @param book
* @param booknum
* @return
*/
public boolean addCard(User user, Book book,Integer booknum);
/**
* 使用Book來獲取booknum
* @param book
* @return
*/
public Integer getBookNum(Book book);
}
UserDao
package com.sjsq.dao;
import com.sjsq.po.User;
import java.util.List;
/**
* @author shuijianshiqing
* @date 2020/5/20 22:10
* 創建一個接口用於聲明用戶登錄註冊的方法
*/
public interface UserDao {
/**
* 用戶登錄
* @param user
* @return
*/
public User login(User user);
/**
* 用戶註冊
* @param user
* @return
*/
public boolean register(User user);
/**
* 查詢用戶信息
* @param sql
* @param arr
* @return
*/
public List<User> selectUser(String sql,Object arr[]);
}
BookService
package com.sjsq.service;
import com.sjsq.po.Book;
import java.util.List;
/**
* @author shuijianshiqing
* @date 2020/5/20 23:37
* Book的Service層
*/
public interface BookService {
/**
* 查詢圖書信息
* @param book
* @return
*/
public List<Book> select(Book book);
/**
* 根據編號來查詢
* @param book
* @return
*/
public Book getBook(Book book);
}
CardService
package com.sjsq.service;
import com.sjsq.po.Book;
import com.sjsq.po.Card;
import com.sjsq.po.User;
import java.util.List;
/**
* @author shuijianshiqing
* @date 2020/5/29 23:00
*/
public interface CardService {
/**
* 獲取用戶的購物車
* @param id
* @return
*/
public List<Card> getCard(Integer id);
/**
* 添加用戶信息和圖書信息到用戶的購物車
* @param user
* @param book
* @param booknum
* @return
*/
public boolean addCard(User user, Book book, Integer booknum);
/**
* 根據Book獲取booknum
* @param book
* @return
*/
public Integer getBookNum(Book book);
}
UserService
package com.sjsq.service;
import com.sjsq.po.User;
import java.util.List;
/**
* @author shuijianshiqing
* @date 2020/5/20 22:54
* Service層
*/
public interface UserService {
/**
* 用戶查詢的信息
* @param user
* @return
*/
public List<User> selectUser(User user);
}
BookServiceImpl
package com.sjsq.service.impl;
import com.sjsq.dao.BookDao;
import com.sjsq.dao.impl.BookDaoImpl;
import com.sjsq.po.Book;
import com.sjsq.service.BookService;
import java.util.ArrayList;
import java.util.List;
/**
* @author shuijianshiqing
* @date 2020/5/20 23:42
* Book的Service實現層
*/
public class BookServiceImpl implements BookService {
private BookDao dao = new BookDaoImpl();
/**
* 查詢所有圖書信息
* @param book
* @return
*/
@Override
public List<Book> select(Book book) {
StringBuffer sql = new StringBuffer("select * from book where 1 = 1 ");
List<Object> list = new ArrayList<Object>();
if(book != null){
// 根據bookid來查找對應的書籍
if(book.getBookid() != null && book.getBookid() != 0){
sql.append(" and bookid = ?");
list.add(book.getBookid());
}
}
return dao.select(sql.toString(),list.toArray());
}
/**
* 根據圖書編號查詢信息
* @param book
* @return
*/
@Override
public Book getBook(Book book) {
if(book.getBookid() != null && book.getBookid() != 0){
return dao.getBook(book.getBookid());
}
return null;
}
}
CardServiceImpl
package com.sjsq.service.impl;
import com.sjsq.dao.CardDao;
import com.sjsq.dao.impl.CardDaoImpl;
import com.sjsq.po.Book;
import com.sjsq.po.Card;
import com.sjsq.po.User;
import com.sjsq.service.CardService;
import java.util.List;
/**
* @author shuijianshiqing
* @date 2020/5/29 23:01
*/
public class CardServiceImpl implements CardService {
private CardDao dao = new CardDaoImpl();
@Override
public List<Card> getCard(Integer id) {
if(id != null){
return dao.getCard(id);
}
return null;
}
/**
* 添加信息到購物車
* @param user
* @param book
* @param booknum
* @return
*/
@Override
public boolean addCard(User user, Book book, Integer booknum) {
return dao.addCard(user,book,booknum);
}
/**
* 根據Book查詢booknum
* @param book
* @return
*/
@Override
public Integer getBookNum(Book book) {
if(dao.getBookNum(book) == null){
return 0;
}
return dao.getBookNum(book);
}
}
UserServiceImpl
package com.sjsq.service.impl;
import com.sjsq.dao.UserDao;
import com.sjsq.dao.impl.UserDaoImpl;
import com.sjsq.po.User;
import com.sjsq.service.UserService;
import java.util.ArrayList;
import java.util.List;
/**
* @author shuijianshiqing
* @date 2020/5/20 22:56
*/
public class UserServiceImpl implements UserService {
// 定義dao對象
private UserDao dao = new UserDaoImpl();
/**
* 查詢用戶信息
* @param user
* @return
*/
@Override
public List<User> selectUser(User user) {
StringBuffer sql = new StringBuffer("select * from user where 1 = 1 ");
List<Object> list = new ArrayList<Object>();
if(user != null){
// 按照姓名查詢
if(user.getName() != null && !user.getName().equals("")){
sql.append(" and name = ?");
list.add(user.getName());
}
// 按照email查詢
if(user.getEmail() != null && !user.getEmail().equals("")){
sql.append(" and email = ?");
list.add(user.getEmail());
}
}
// 交給dao層處理邏輯
return dao.selectUser(sql.toString(),list.toArray());
}
}
BaseDao
package com.sjsq.utils;
import java.sql.*;
/**
* @author shuijianshiqing
* @date 2020/5/19 23:08
* 數據交互層dao層
*/
public class BaseDao {
private static String driver = "com.mysql.cj.jdbc.Driver";
private static String url = "jdbc:mysql://localhost/book_management?serverTimezone=UTC";
private static String user = "root";
private static String password = "admin";
/**
* 連接數據庫的方法
* @return
* @throws ClassNotFoundException
* @throws SQLException
*/
public static Connection getConnection() throws ClassNotFoundException, SQLException {
// 加載數據庫驅動
Class.forName(driver);
Connection con = DriverManager.getConnection(url,user,password);
return con;
}
/**
* 關閉數據庫的方法
* @param con
* @param ps
* @param rs
*/
public static void close(Connection con, PreparedStatement ps, ResultSet rs){
// 關閉資源,避免出現異常
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ps != null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con != null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 設置增刪改的方法
* @param sql
* @param arr
* @return
*/
public static boolean addUpdateDelete(String sql,Object[] arr){
Connection con = null;
PreparedStatement ps = null;
try {
// 第一步:連接數據庫
con = BaseDao.getConnection();
// 第二步:預編譯
ps = con.prepareStatement(sql);
// 第三步:設置值
if(arr != null && arr.length !=0){
for (int i = 0; i < arr.length; i++) {
ps.setObject(i+1,arr[i]);
}
}
int count = ps.executeUpdate();
if(count > 0){
return true;
}else{
return false;
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] args){
try {
BaseDao.getConnection();
System.out.println("---測試數據庫鏈接成功---");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3.所用到的包
jquery-3.4.1.min.js
mysql-connector-java-8.0.15.jar
四、數據庫
SQL
/*
Navicat Premium Data Transfer
Source Server : MySQL
Source Server Type : MySQL
Source Server Version : 80013
Source Host : localhost:3306
Source Schema : book_management
Target Server Type : MySQL
Target Server Version : 80013
File Encoding : 65001
Date: 01/06/2020 21:45:17
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for book
-- ----------------------------
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book` (
`bookid` int(11) NOT NULL AUTO_INCREMENT,
`bookname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`price` decimal(10, 2) NULL DEFAULT NULL,
`author` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`picture` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`publish` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
PRIMARY KEY (`bookid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of book
-- ----------------------------
INSERT INTO `book` VALUES (1, '水滸傳', 23.00, '施耐庵', NULL, '人民文學出版社');
INSERT INTO `book` VALUES (2, '西遊記', 25.00, '吳承恩', NULL, '人民文學出版社');
INSERT INTO `book` VALUES (3, '紅樓夢', 35.00, '曹雪芹', NULL, '人民文學出版社');
INSERT INTO `book` VALUES (4, '三國演義', 28.00, '羅貫中', NULL, '人民文學出版社');
-- ----------------------------
-- Table structure for card
-- ----------------------------
DROP TABLE IF EXISTS `card`;
CREATE TABLE `card` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`bookid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`booknum` int(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of card
-- ----------------------------
INSERT INTO `card` VALUES (11, '1', '2001', '1', 2);
INSERT INTO `card` VALUES (12, '1', '2001', '3', 1);
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`password` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`email` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 54 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '2001', '111111', '[email protected]', '31321');
INSERT INTO `user` VALUES (53, '張三', '1', '', '');
SET FOREIGN_KEY_CHECKS = 1;
五、感悟
手寫日誌太麻煩,所以後來出現了Log4j,Jsp中Java代碼和Html混在一起,太不方便了,所以後來有了Servlet和各種框架,所以這也就是框架的意義。簡單的事情重複做,做到一定的熟練度,把它抽象出來,形成公用的方法,就有了框架。還要數據連接,JDBC裏面有很多重複性代碼,後續就有了Mybatis等等。
備註:關於如何搭建項目之前文章裏面已經寫過
IDEA創建Web項目詳細說明
感謝:別先生的博客,是參照他的博客實現的。
別先生的博客地址
雞湯:牛奶會有的,麪包會有的,技術都是千錘百煉出來的。