组件技术--设计--简单的购物车案例


简单的购物车案例)

题外话

项目支持的教材 :Java web程序设计(第3版)微课视频版 主编郭克华老师······
教材的实训部分有好几个应用,这里主要是将私信很多提到的教材中讲到的【购物系统】这一实训核心代码进行整合。 展示结果也属于简单的购物车(复杂一点的购物车后续讲解,先把基本的增删查改了解清楚,美化展示的jsp界面也就不是什么问题)

购物车案例需求

本项目基于MVC模式制作的一个购物程序(简易),可以供用户在网页上订购教材。需要用到数据库,过滤器,监听器。

核心

1.将数据库查询的代码写在DAO内,然后用jsp调用DAO。DAO通过查询得到相应的结果,返回给用户。
2.将VO(value object)配合DAO来使用,在DAO中可以每查询到一条记录就将其封装为ursert对象,该对象属于VO。最后将所有实例化的VO 存放在集合内返回。这样就可以实现层次分开,降低耦合度。

:数据库需要MySQL来检查图书信息以及后续选购等的调用。
MySQL下载配置好后,可以直接在编辑器(我这里用的IDE,eclipse也可以)如下图建立并连接数据库进行编辑。当然也可以在MySQL里面建好架构,然后建表编辑数据也可以。

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

系统组成

本系统主要是3个页面组成:
1.运行系统,出现显示所有书本的界面。本界面中,标题是“欢迎选购图书”。界面上显示所有图书及价格,同时每种图书后面都有一个“购买”链接。
在这里插入图片描述

2.点击“购买”链接,会跳转到购买界面。(数量是手工输入)
在这里插入图片描述

3.输入购买数量并提交,能将所购买的书存入购物车。存入后跳转带显示购物车所有内容的界面。
在这里插入图片描述

Javaweb项目框架

在这里插入图片描述

基本思想

(1)基于MVC模式。思想步骤主要是:
用户在表单中输入,将表单提交给servlet,servlet验证输入,然后实例化Javabean。
Javabean查询数据库,查询结果暂存在Javabean中。
Servlet跳转到jsp,jsp使用Javabean,得到它里面的查询结果,并显示出来。
(2)本项目需要一个DAO来查询图书,一个VO来封装某一种图书信息。
购物车中的图书用集合来存储,这里使用HashMap来保存图书,可以进行比较方便地删除和访问。HashMap以key-value形式保存数据,这样可以将图书的key值设置成该图书的编号,在访问时候可以直接通过key值定位。
(3)设计一个listener监听器来使用户访问网站时购物车就可以进行初始化,也就是对session的内容进行初始化。
(4)用户先访问的是InitServlet,负责查询所有图书,然后跳转到showAllBook.jsp页面。若不先访问InitServlet,直接去访问showAllBook.jsp,会抛出异常。

核心代码

Dao

BookDao

负责查询图书,验证用户的合法身份:

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 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);
        while(rs.next()){
    
    
            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;
    }
    public void initConnection() throws Exception{
    
    
        Class.forName("com.mysql.cj.jdbc.Driver");
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/webdatabase?characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false", "root", "123456");
    }
    public void closeConnection() throws Exception{
    
    
        conn.close();
    }

}

listener

SessionListener

监听器,负责对session内容进行初始化:

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) {
    
    }
}

servlet

AddServlet

将购买的图书存入购物车,跳转到showCart.jsp页面:

package servlet;

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

@WebServlet("/AddServlet")

public class AddServlet extends HttpServlet {
    
    
	@Override
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
    
    
		// TODO Auto-generated method stub
		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("showCart.jsp");
	}

}

InitServlet

查询所有图书,然后跳转到showAllBook.jsp页面:

package servlet;

import java.io.IOException;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import Dao.BookDao;
import vo.Book;

@WebServlet("/InitServlet")

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

RemoveServlet

从购物车中删除某种图书,并跳转到showCart.jsp页面:

package servlet;

import java.io.IOException;
import java.util.HashMap;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import vo.Book;
@WebServlet("/RemoveServlet")

public class RemoveServlet extends HttpServlet {
    
    
	@Override
	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("showCart.jsp");
	}
}

vo

Book

VO类封装图书的信息:

package vo;

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

.jsp

buyForm.jsp

显示买书页面:

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@page import="vo.Book"%>
<html>
<head>
	<title>buyForm</title>
</head>
<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">
	<!-- 表单提交到AddServlet.java -->
	书本价格:<%=book.getBookprice()%><BR>
	<input name="bookno" type="hidden" value="<%=book.getBookno()%>">
	<input name="bookname" type="hidden" value="<%=book.getBookname()%>">
	<input name="bookprice" type="hidden" value="<%=book.getBookprice()%>">
	数量:
	<input name="booknumber" type="text">
	<input type="submit" value="购买">
</form>
</body>
</html>

showAllBook.jsp

显示所有图书:

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@page import="vo.Book"%>
<html>
<body>
欢迎选购图书<br>

<table border="1">
	<tr bgcolor="pink">
		<td>书本名称</td>
		<td>书本价格</td>
		<td>购买</td>
	</tr>
	<%
		HashMap allbook = (HashMap)session.getAttribute("allbook");

		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>
<a href="showCart.jsp">查看购物车</a>
</body>
</html>

showCart.jsp

显示购物车中所有内容:

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@page import="vo.Book"%>
<html>
<body>
<table border="1">
	<tr bgcolor="pink">
		<td>书本名称</td>
		<td>书本价格</td>
		<td>数量</td>
		<td>删除</td>
	</tr>
	<%
		HashMap books = (HashMap)session.getAttribute("books");
		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="RemoveServlet?bookno=<%=book.getBookno()%>">删除</a></td>
	</tr>
	<%
		}
	%>
</table>
现金总额:<%=session.getAttribute("money")%><HR>
<a href="showAllBook.jsp">继续买书</a>
</body>
</html>

target

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   https://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.companyname.bank</groupId>
    <artifactId>consumerBanking</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>consumerBanking</name>
    <url>https://maven.apache.org</url>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
        <!--JSTL表达式的依赖-->
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/taglibs/standard -->
        <!--standard标签库-->
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
    </dependencies>
</project>

WEB-INF

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">


    <display-name>Welcome to Tomcat</display-name>
    <description> Welcome to Tomcat </description>
    <!--在该位置添加关于一个信息 -->

    <listener>
        <listener-class>listener.SessionListener</listener-class>
    </listener>
    <servlet>
        <description>This is the description of my J2EE component</description>
        <display-name>This is the display name of my J2EE component</display-name>
        <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>
    <servlet>
        <description>This is the description of my J2EE component</description>
        <display-name>This is the display name of my J2EE component</display-name>
        <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>

    <servlet>
        <description>This is the description of my J2EE component</description>
        <display-name>This is the display name of my J2EE component</display-name>
        <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>



    <welcome-file-list>
        <welcome-file>buyForm.jsp</welcome-file>
    </welcome-file-list>
    <welcome-file-list>
        <welcome-file>showAllBook.jsp</welcome-file>
    </welcome-file-list>
    <welcome-file-list>
        <welcome-file>showCart.jsp</welcome-file>
    </welcome-file-list>
</web-app>

lib

需要的lib包请在Tomcat下的lib包里复制,没有的去网上下载。
在这里插入图片描述
在这里插入图片描述

运行

URL:http://localhost:8080/InitServlet

(用户首先访问的是InitServlet)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_55764157/article/details/127946947
今日推荐