购书系统——Java Web编程实训

案例需求分析

分三个界面:

  1. 选择图书界面:

    • 界面显示所有图书的名称、价格
    • 点击每本书后面的“购买”可以进行购买,跳转到购买页面
    • 界面下册可以点击“查看购物车”跳转到购物车界面
  2. 购买页面:

    • 显示购买的该图书名称、价格
    • 可以输入选择购买的数量
    • 点击购买按钮后将图书存入购物车
    • 购买完成后跳转到购物车界面
  3. 购物车界面

    • 显示购买的图书的名称、单价、数量
    • 可以点击“删除”按钮对该购买的图书进行删除
    • 显示现在购书的全部金额
    • 点击“继续购书”可以返回到选择图书界面进行选书购书

系统分析

在这里插入图片描述

视图:

  1. 显示所有图书的界面
    • showAllBook.jsp
  2. 买书界面
    • buyForm.jsp
  3. 显示购物车界面
    • showCart.jsp

模型:

  1. 查询所有图书

    • InitServlet.java

      • SessionListener.java:作为监听器,初始化和记录购买信息

      • BookDao.java:实现查询图书功能

      • Book.java:封装对图书信息的操作

  2. 买书

    • AddServlet.java
  3. 从购物车中删除图书

    • RemoveServlet.java

在界面中实现选择跳转的目的页面

设计数据结构

书籍的信息来自库,而且信息属性多,所以选择集合类数据结构存储。

如果用List<Object>来存储,在对图书进行操作时会需要获得图书的No,比较麻烦。

所以可以考虑用HashMap<bookno, Object>的形式进行存储,方便查找和修改。

[HashMap简介](Java HashMap | 菜鸟教程 (runoob.com))

在这里插入图片描述

项目结构如上

开发阶段

创建项目:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里需要说明一下,有的朋友没有web.xml可能是因为项目没设置为Java EE
在这里插入图片描述

我这里使用的是Mysql,所以要加一下connector包(各位根据自己的数据库来进行不同的操作)

在这里插入图片描述

数据库操作

建表
CREATE TABLE T_BOOK(
    BOOKNO varchar(40),
    BOOKNAME varchar(40),
    BOOKPRICE float
)
添加数据
INSERT INTO T_book  VALUES ('1','Java', 39.0);
INSERT INTO T_book  VALUES ('2','算法与数据结构', 35.0);

编写Book.java & BookDao.java

Book.java如下:
package vo;

public class Book {
    private String bookno;
    private String bookname;
    private float bookprice;
    private int booknumber;
    public String getBookno(){
        return bookno;
    }
    public String getBookname(){
        return bookname;
    }
    public  float getBookprice(){
        return bookprice;
    }
    public int getBooknumber(){
        return booknumber;
    }
    public void setBookno(String bookno){
        this.bookno = bookno;
    }
    public void setBookname(String bookname){
        this.bookname = bookname;
    }
    public void setBookprice(float bookprice){
        this.bookprice = bookprice;
    }
    public void setBooknumber(int booknumber){
        this.booknumber = booknumber;
    }
}
BookDao.java

这里注意根据自己的数据库,进行修改相应的数据库操作

package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.HashMap;
import vo.Book;

public class BookDao {
    private Connection conn = null;
    public void initConnection() throws Exception{
        Class.forName("com.mysql.jdbc.Driver");  //加载驱动
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql","root","Lfy666666");
    }
    public void closeConnection() throws Exception{
        conn.close();
    }
    
    
    public HashMap getAllBook() throws Exception{
        HashMap hm = new HashMap();
        this.initConnection();
        Statement stat = conn.createStatement();
        String sql = "SELECT BOOKNO, BOOKNAME, BOOKPRICE FROM T_BOOK";
        ResultSet rs = stat.executeQuery(sql);
        int num = 0;
        while(rs.next()){
            System.out.println("num="+ num++);
            Book book = new Book();
            book = new Book();
            book.setBookno(rs.getString("bookno"));
            book.setBookname(rs.getString("bookname"));
            book.setBookprice(rs.getFloat("bookprice"));
            hm.put(book.getBookno(), book);
        }
        this.closeConnection();
        return hm;
    }
}

编写监听器SessionListener.java

SessionListener.java代码如下:
package listener;

import java.util.HashMap;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class SessionListener implements HttpSessionListener{
    public void sessionCreated(HttpSessionEvent event){
        HttpSession session = event.getSession();
        HashMap books = new HashMap();
        session.setAttribute("books", books);
        session.setAttribute("money", 0F);
    }
    public void sessionDestroyed(HttpSessionEvent arg0){
        
    }
    
}

对于SessionListener.java的配置:

在web的WEB-INF下的web.xml中:

添加以下代码:

<listener>
        <listener-class>listener.SessionListener</listener-class>
    </listener>

编写InitServlet.java & showAllBook.java

InitServlet.java代码如下:

这里注意跳转的页面,我这里是/WebApplication3/showAllBook.jsp,各位根据自己文件的位置进行跳转

package servlet;

import java.io.IOException;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dao.BookDao;

public class InitServlet extends HttpServlet{
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException{
        BookDao bdao = new BookDao();
        HashMap allbook = new HashMap();
        try{
            allbook = bdao.getAllBook();
        } catch(Exception e){
            e.printStackTrace();
        }
        request.getSession().setAttribute("allbook", allbook);
        response.sendRedirect("/WebApplication3/showAllBook.jsp");
    }
}

同样的,在web.xml中配置InitServlet.java

<servlet>
        <servlet-name>InitServlet</servlet-name>
        <servlet-class>servlet.InitServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>InitServlet</servlet-name>
        <url-pattern>/InitServlet</url-pattern>
    </servlet-mapping>
showAllBook.jsp代码如下:
<%@page contentType="text/html" pageEncoding="gb2312"%>
<%@page import="java.util.*"%>
<%@page import="vo.Book"%>
<%@page import="servlet.InitServlet"%>
<!DOCTYPE html>
<html>
    <body>
        欢迎选购图书<br>
        <%
//            InitServlet init_serv = new InitServlet();
//            init_serv.doGet(request, response);
            HashMap allbook = (HashMap) session.getAttribute("allbook");
//            for(Map.Entry<Integer, Integer> entry : map.entrySet())
        %>
        <table border="1">
            <tr bgcolor ="pink">
                <td>书本名称</td>
                <td>书本价格</td>
                <td>购买</td>
            </tr>
            <%
                Set set = allbook.keySet();
                Iterator ite = set.iterator();
                while (ite.hasNext()) {
                    String bookno = (String) ite.next();
                    Book book = (Book) allbook.get(bookno);
            %>
            <tr bgcolor ="yellow">
                <td><%=book.getBookname()%></td>
                <td><%=book.getBookprice()%></td>
                <td><a href="buyForm.jsp?bookno=<%=bookno%>">购买</a></td>
            </tr>
            <%}%>
        </table><!-- comment -->
        <a href="showCart.jsp">查看购物车</a>
    </body>
</html>

预览:

这个时候,在浏览器输入:http://localhost:8080/WebApplication4/InitServlet

这时候就会出现我们的选书界面:

在这里插入图片描述

编写buyForm.jsp 和 AddServlet.java

buyFrom.jsp:

这里的form提交后会转到AddServlet,为什么不是WebApplication3/servlet/AddServlet?

[看这里](Servlet返回“ HTTP状态404请求的资源(/ Servlet)不可用_eclipse请求的资源不可用404怎么办_沙漠一只雕得儿得儿的博客-CSDN博客)

<%@page contentType="text/html" pageEncoding="gb2312"%>
<%@page import="java.util.*"%>
<%@page import="vo.Book"%>
<!DOCTYPE html>
<html>
    <body>
        <%
            String bookno = request.getParameter("bookno");
            HashMap allbook = (HashMap) session.getAttribute("allbook");
            Book book = (Book) allbook.get(bookno);
        %>
        欢迎购买:<%=book.getBookname()%>
        <form action ="AddServlet" method="post">
            书本价格:<%=book.getBookprice()%><br><!-- comment -->
            <input name="bookno" type="hidden" value="<%=book.getBookno()%>">
            <input name = "bookname" type = "hidden"
                   value="<%=book.getBookname()%>">
            <input name="bookprice" type="hidden"
                   value="<%=book.getBookprice()%>"><!-- comment -->
            数量:
            <input name="booknumber" type="text"><!-- comment -->
            <input type ="submit" value="购买">
        </form>
    </body>
</html>
AddServlet.java:

同理这里注意自己跳转的页面

package servlet;

import java.io.IOException;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import vo.Book;

public class AddServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("gb2312");
        HttpSession session = request.getSession();
        HashMap books = (HashMap)session.getAttribute("books");
        
        String bookno = request.getParameter("bookno");
        String bookname = request.getParameter("bookname");
        String strBookprice = request.getParameter("bookprice");
        String strBooknumber = request.getParameter("booknumber");
        
        Book book = new Book();
        book.setBookno(bookno);
        book.setBookname(bookname);
        float bookprice = Float.parseFloat(strBookprice);
        book.setBookprice(bookprice);
        int booknumber = Integer.parseInt(strBooknumber);
        book.setBooknumber(booknumber);
        books.put(bookno, book);
        
        float money = (Float)session.getAttribute("money");
        money = money + bookprice*booknumber;
        session.setAttribute("money", money);
        response.sendRedirect("/WebApplication3/showCart.jsp");
    }
}

同样的,配置注册AddServlet

<servlet>
        <servlet-name>AddServlet</servlet-name>
        <servlet-class>servlet.AddServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>AddServlet</servlet-name>
        <url-pattern>/AddServlet</url-pattern>
    </servlet-mapping>
预览

这时候就可以购买图书了,界面如下:

在这里插入图片描述

编写showCart.jsp和RemoveServlet.java

showCart.jsp

同理更改路径名称

<%@page contentType="text/html" pageEncoding="gb2312"%>
<%@page import="java.util.*"%>
<%@page import="vo.Book"%>
<!DOCTYPE html>
<html>
    <body>
        <table border="1">
            <tr bgcolor="pink">
                <td>书本名称</td>
                <td>书本价格</td>
                <td>数量</td>
                <td>删除</td>
            </tr>
            <%
                HashMap books = (HashMap) session.getAttribute("books");
                if (books == null) {
                    System.out.println(1111);
                } else {
                    System.out.println(2222);
                }
                Set set = books.keySet();
                Iterator ite = set.iterator();
                while (ite.hasNext()) {
                    String bookno = (String) ite.next();
                    Book book = (Book) books.get(bookno);
            %>
            <tr bgcolor="yellow">
                <td><%=book.getBookname()%></td>
                <td><%=book.getBookprice()%></td>
                <td><%=book.getBooknumber()%></td>
                <td><a href="/WebApplication3/RemoveServlet?bookno=<%=book.getBookno()%>">删
                        除</a></td>
            </tr>
            <% }%>
        </table>
        现金总额:<%=session.getAttribute("money")%><hr>
        <a href="showAllBook.jsp">继续买书</a>
    </body>
</html>

RemoveServlet.java

同理更改路径名称

package servlet;

import java.io.IOException;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import vo.Book;

public class RemoveServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("gb2312");
        String bookno = request.getParameter("bookno");
        
        HttpSession session = request.getSession();
        HashMap books = (HashMap) session.getAttribute("books");
        Book book = (Book) books.get(bookno);
        
        float money = (Float) session.getAttribute("money");
        money = money - book.getBooknumber() * book.getBookprice();
        session.setAttribute("money", money);
        
        books.remove(bookno);
        response.sendRedirect("/WebApplication3/showCart.jsp");
    }
}

配置注册RemoveServlet

<servlet>
        <servlet-name>RemoveServlet</servlet-name>
        <servlet-class>servlet.RemoveServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>RemoveServlet</servlet-name>
        <url-pattern>/RemoveServlet</url-pattern>
    </servlet-mapping>

至此,此项目就结束了

效果展示:

首先,我们可以点击Clean and Build清理原来的缓存

在这里插入图片描述

在浏览器输入:http://localhost:8080/WebApplication4/InitServlet

在这里插入图片描述

点击“Java”的购买后,输入数量2:

在这里插入图片描述

再点击“购买”会进入购物车界面:

在这里插入图片描述

点击“继续买书”,回到查看书籍和选购书界面

在这里插入图片描述

我们再买本“算法与数据结构”后,购物车界面如下:

在这里插入图片描述

点击Java后的“删除”后,效果如下:

在这里插入图片描述

附加题

  1. 直接访问showAllBook.jsp会报错——该问题已解决,因为在web.xml中已经配置注册了InitServlet,即使不以它为入口,也会执行

  2. 本项目只能对购物车内容进行删除,但一般情况要求修改(即:在“删除”后面在添加一列“修改”并实现该功能)

    • 首先创建一个jsp:update.jsp

      • 功能一:实现一个表单功能
      • 功能二:表单input框直接获取当前书本信息
      • 功能三:可以对input框内容进行修改
      • 功能四:“提交”与“取消”功能。提交后把input框内容(同时包括hidden类型的bookno)提交到updateServlet.java进行处理
    • 首先再创一个Servlet:updateServlet.java

      • 功能一:获取update.jsp提交的各个书本数据
      • 功能二:连接数据库,根据bookno对书籍进行定位
      • 功能三:使用executeQuery(sql)更改T_BOOK表内容
      • 功能四:更新成功后跳转到update.jsp同时实现刷新效果
  • 21
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该课程主要涉及到的技术有:  项目涉及的技术:  1、前端:jsp、css、javascript、jQuery(js框架)、bootstrap框架 2、后台:Spring MVC、Spring、Mybatis框架、javaMail进行邮件发送、jstl 、jstl自定义分页标签、代码生成器等 3、数据库:Mysql 4、服务器:Tomcat项目开发涉及的功能: 1、项目以及数据库搭建2、用户登录、退出3、用户注册、邮件发送、以及用户信息激活4、首页商品信息页面搭建以及查询功能实现5、查询商品明细6、加入商品至购物车、删除、更新、清除购物车商品信息7、确认订单信息8、订单页面搭建以及下订单功能实现9、查询我的购物车以及订单信息10、商品系统后台界面搭建11、代码机器人使用等等其他实战项目:java项目实战之电商系统全套(前台和后台)(java毕业设计ssm框架项目)https://edu.csdn.net/course/detail/25771 java项目之oa办公管理系统(java毕业设计)https://edu.csdn.net/course/detail/23008 java项目之hrm人事管理项目(java毕业设计)https://edu.csdn.net/course/detail/23007 JavaWeb项目实战之点餐系统前台https://edu.csdn.net/course/detail/20543 JavaWeb项目实战之点餐系统后台https://edu.csdn.net/course/detail/19572 JavaWeb项目实战之宿舍管理系统Java毕业设计含源码)https://edu.csdn.net/course/detail/26721 JavaWeb项目实战之点餐系统全套(前台和后台)https://edu.csdn.net/course/detail/20610 java项目实战之电子商城后台(java毕业设计SSM框架项目)https://edu.csdn.net/course/detail/25770 java美妆商城项目|在线购书系统java毕业设计项目ssm版)https://edu.csdn.net/course/detail/23989 系统学习课程:JavaSE基础全套视频(环境搭建 面向对象 正则表达式 IO流 多线程 编程 java10https://edu.csdn.net/course/detail/26941 Java Web从入门到电商项目实战挑战万元高薪(javaweb教程)https://edu.csdn.net/course/detail/25976其他素材版(毕业设计或课程设计)项目:点击老师头像进行相关课程学习

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值