MVC模式+DAO+MySQL+jsp+servlet 简单的购物车案例
题外话
购物车案例需求核心系统组成
Javaweb项目框架基本思想
核心代码DaoBookDao
listenerSessionListener
servletAddServletInitServletRemoveServlet
voBook
.jspbuyForm.jspshowAllBook.jspshowCart.jsp
targetpom.xml
WEB-INFweb.xml
lib运行
简单的购物车案例)
题外话
项目支持的教材 :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"%>
<%
String bookno = request.getParameter("bookno");
HashMap allbook = (HashMap)session.getAttribute("allbook");
Book book = (Book)allbook.get(bookno);
%>
欢迎购买:<%=book.getBookname()%>
showAllBook.jsp
显示所有图书:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@page import="vo.Book"%>
欢迎选购图书
书本名称 | 书本价格 | 购买 |
<%=book.getBookname()%> | <%=book.getBookprice()%> | 购买 |
showCart.jsp
显示购物车中所有内容:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@page import="vo.Book"%>
书本名称 | 书本价格 | 数量 | 删除 |
<%=book.getBookname()%> | <%=book.getBookprice()%> | <%=book.getBooknumber()%> | 删除 |
现金总额:<%=session.getAttribute("money")%>
target
pom.xml
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">
WEB-INF
web.xml
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">
lib
需要的lib包请在Tomcat下的lib包里复制,没有的去网上下载。
运行
注 URL:http://localhost:8080/InitServlet
(用户首先访问的是InitServlet)
相关阅读
发表评论