IDEA+Java+JSP+Mysql+Tomcat實現Web圖書管理系統

一、系統介紹

軟件環境
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項目詳細說明
感謝:別先生的博客,是參照他的博客實現的。
別先生的博客地址

雞湯:牛奶會有的,麪包會有的,技術都是千錘百煉出來的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章