项目需求:

基于MVC模式制作一个购物程序,让学生可以在网页上订购教材。该系统由3个界面组成,运行系统,出现显示所有书本的界面。在这个界面中,标题为“欢迎选购图书”;界面上显示了所有的图书和价格,在每种图书后面有一个“购买”链接。单击“购买”链接,能够显示购买界面。单击图书后面的“购买”链接显示的界面,其中数量是手工输入的。在该界面中输入购买数量,提交,能够将该图书存入购物车。在存入之后可以显示购物车中的所有内容。在每种图书后面有一个“删除”链接,单击该链接,能够将相应内容从购物车中删除。另外,单击“继续买书”链接能够重新到达显示所有书本的页面。

1.首先在index.jsp界面设置,这样进入项目时,只输入项目名后便可以直接进入项目,省略了输入项目后再选择项目名下的子目录。

<jsp:forward page="InitServlet"></jsp:forward>

如下图所示,这样做的好处是可以固定进入项目的先后顺序。

2.index.jsp界面首先跳转到InitServlet.java界面。InitServlet.java界面实例化BookDao类中的对象,通过实例化的对象调用getAllBook()方法得到数据库中的全部数据。

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 com.mysql.fabric.Response;import dao.BookDao;
@WebServlet("/InitServlet")
public class InitServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {BookDao bookDao=new BookDao();HashMap allBook=null;try {allBook=bookDao.getAllBook();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}req.getSession().setAttribute("allBook", allBook);resp.sendRedirect("showAllBook.jsp");
}
}

3.BookDao.java类连接数据库,对数据库中的数据进行全部查找并返回查询结果,其他类就可以通过调用该类的getAllBook()方法获取全部的查询结果。

package dao;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;import vo.Book;public class BookDao {private Connection conn=null;private PreparedStatement ps;private String sql;private ResultSet rs;private Book book = null;private HashMap hashMap;public Connection initConnection() throws Exception{Class.forName("com.mysql.jdbc.Driver");conn=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/access?useUnicode=true&characterEncoding=utf-8","root","123456");return conn;
}public HashMap getAllBook() throws Exception{hashMap=new HashMap();initConnection();sql="select * from T_book";ps=(PreparedStatement) conn.prepareStatement(sql);rs=ps.executeQuery();while(rs.next()){book=new Book();book.setBookNo(rs.getString("bookNo"));book.setBookName(rs.getString("bookName"));book.setBookPrice(rs.getFloat("bookPrice"));hashMap.put(book.getBookNo(), book);}closeConnection();return hashMap;
}public void closeConnection() throws SQLException{conn.close();
}}

4.BookDao类中的实例化的book对象来源于,实体类Book,该类中的属性,与数据库中的属性一一对应,代码如下

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;
}
@Override
public String toString() {return "Book [bookNo=" + bookNo + ", bookName=" + bookName + ", bookPrice=" + bookPrice + ", bookNumber="+ bookNumber + "]";
}}

4.1数据库中的内容如下

5.现在回到主线,InitServlet.java界面重定向跳转到ShowAllBook.jsp界面。

<%@ page language="java" import="java.util.*" import="vo.Book" pageEncoding="UTF-8"%><html><head><title>My JSP 'showAllBook.jsp' starting page</title></head><body>欢迎选购图书<br><%HashMap allBook=(HashMap)session.getAttribute("allBook");%><table border="1"><tr bgcolor="pink"><td>书本名称</td><td>书本价格</td><td>购买</td></tr><%Set set = allBook.keySet();Iterator iterator=set.iterator();while(iterator.hasNext()){String bookNo=(String)iterator.next();Book book=(Book)allBook.get(bookNo); %><tr bgcolor="yellow"><td><%=book.getBookName()%></td><td><%=book.getBookPrice() %></td><td><a href="buyForm.jsp?bookNo=<%=book.getBookNo() %>">购买</a></td></tr><%}%></table><a href="showCart.jsp">查看购物车</a></body>
</html>

6..当点击购买连接时,跳转到buyForm.jsp,代码如下

<%@ page language="java" import="java.util.*" import="vo.Book" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>My JSP 'buyForm.jsp' starting page</title></head><body><%String bookNo=request.getParameter("bookNo");HashMap allBook=(HashMap)session.getAttribute("allBook");Book book=(Book)allBook.get(bookNo);
//  System.out.println("buyForm.jsp测试是够从HashMap中取到了一个对象的数据"+book);//测试是够从HashMap中取到了一个对象的数据session.setAttribute("buyBook", book);%>欢迎购买:<%=book.getBookName() %><form action="AddServlet" method="post">书本价格:<%=book.getBookPrice() %><br>数量:<input type="text" name="bookNumber"><input type="submit" value="购买" ></form></body>
</html>

7.点击购买按键时,把数据提交到AddServlet.java界面,该界面获取购买的物品并进行判断,(注意:这里所说的第一次和第二次是同一个对象,也就是购买同一个商品)第一次购买时,直接存入HashMap的books对象中,第二次购买时,先获取第一次添加对象,把第一次添加的数量加上第二次添加的数量,把相加结果重新传给该对象的数量属性,再把该对象添加到books集合中,代码如下

package servlet;import java.io.IOException;
import java.util.HashMap;import javax.jms.Session;
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 vo.Book;
@WebServlet("/AddServlet")
public class AddServlet extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");Book buyBook=(Book)req.getSession().getAttribute("buyBook");String bookNumber=req.getParameter("bookNumber");int bookIntNumber=Integer.parseInt(bookNumber);// System.out.println("测试bookIntNumber是否为空:"+bookIntNumber);HashMap books=(HashMap)req.getSession().getAttribute("books");
//  System.out.println("测试books是否为空:"+books);
//  System.out.println("测试bookNo的值:"+buyBook.getBookNo());if(!books.containsKey(buyBook.getBookNo())){buyBook.setBookNumber(bookIntNumber);//System.out.println("AddServlet测试是否取到了名称为buyBook的session对象"+buyBook);//测试是否取到了名称为buyBook的session对象books.put(buyBook.getBookNo(), buyBook);}else {Book book=(Book)books.get(buyBook.getBookNo());//System.out.println("测试book对象的数量:"+book.getBookNumber());int bookIntNumber1=book.getBookNumber()+bookIntNumber;buyBook.setBookNumber(bookIntNumber1);books.put(buyBook.getBookNo(), buyBook);}//总钱数增加Float money=(Float)req.getSession().getAttribute("money");System.out.println("测试money:"+money);System.out.println("测试(Float)buyBook.getBookPrice():"+(Float)buyBook.getBookPrice());System.out.println("测试bookIntNumber:"+bookIntNumber);money=money+(Float)buyBook.getBookPrice()*bookIntNumber;System.out.println("AddServlet测试计算是否正确"+money);//测试计算是否正确req.getSession().setAttribute("money", money);resp.sendRedirect("showCart.jsp");
}
}

8.AddServlet.java重定向到showCart.jsp界面,代码如下

<%@ page language="java" import="java.util.*" import="vo.Book" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>  <title>My JSP 'showCart.jsp' starting page</title></head><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();System.out.println("在showCart.jsp页面测试keySet()会变成什么值:"+set);//测试keySet()会变成什么值Iterator iterator=set.iterator();while(iterator.hasNext()){String bookNo=(String)iterator.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>

9.点击继续购买,跳回showAllBook.jsp界面,继续选择购买JAVA书,当然也可以购买其他书,当前主要展示重复购买JAVA书本,是否运行正确。

10.当点击删除时,跳转到RemoveServlet.java界面,对当前这条数据全部删除。总金额自动变化。代码如下

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 vo.Book;
@WebServlet("/RemoveServlet")
public class RemoveServlet extends HttpServlet{//测试一下dopost()是否可以接收a标签传过来的数值
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");String bookNo=req.getParameter("bookNo");HashMap books=(HashMap)req.getSession().getAttribute("books");Book book=(Book)books.get(bookNo);System.out.print("测试删除时,获取过来的删除数是:"+book.getBookNumber());Float money=(Float)req.getSession().getAttribute("money");money=money-book.getBookPrice()*book.getBookNumber();req.getSession().setAttribute("money", money);books.remove(bookNo);resp.sendRedirect("showCart.jsp");
}
@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
}

全部删除,金额为0

11.设置session监听器,会在项目开始时自动运行,创建session。

package listener;import java.util.ArrayList;
import java.util.HashMap;import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class SessionListener implements HttpSessionListener {@Overridepublic void sessionCreated(HttpSessionEvent se) {HttpSession session=se.getSession();HashMap books=new HashMap();ArrayList list=new ArrayList();System.out.println("测试list初始化的值:"+list);System.out.println("测试books初始化时的值:"+books);session.setAttribute("books", books);session.setAttribute("money", 0F);}@Overridepublic void sessionDestroyed(HttpSessionEvent se) {// TODO Auto-generated method stub}}

javaweb简单的图书购买系统,超详细教程相关推荐

  1. 基于javaweb的网上图书商城系统(java+ssm+jsp+mysql+redis+jwt+shiro+rabbitmq+easyui)

    基于javaweb的网上图书商城系统(java+ssm+jsp+mysql+redis+jwt+shiro+rabbitmq+easyui) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥ ...

  2. 一键重装系统win10超详细教程

    ** 一键重装系统win10超详细教程--云骑士装机大师 ** win 10系统自推出以来大受用户追捧,不止启动速度飞快,界面简洁美观,还能兼容大量游戏,优点众多.许多朋友想要为电脑重装一个win 1 ...

  3. Linux系统双网卡聚合超详细教程

    Linux系统双网卡聚合超详细教程 将多个物理网卡聚合在一起,从而实现冗错和提高吞吐量 网络组不同于旧版中bonding技术,提供更好的性能和扩展性 网络组由内核驱动和teamd守护进程实现. 主要分 ...

  4. 网上图书购买系统项目

    项目需求分析概况 现如今传统的实体书店顾客要买书都是亲自到书店来,非常不方便.而且随着书店销售图书种类和数量的增加以及顾客的增长,尤其是大量顾客到书店选购图书,使得书店场地不足,工作人员也很忙碌.而且 ...

  5. VM15pro安装MacOS10.15.1系统(超详细,可用)

    前段时间去开发了款app需要用到打包,Android打包就不说了那个不涉及到环境,但是ipa打包就烦了,还要在mac的环境中去打包,废话不多说,开始办正事. 首先要有一个VMpro15 我这里是这个. ...

  6. 项目:网上图书购买系统

    网上图书购买系统 系统用例设计 本系统用例分为顾客,管理员两大类.其中顾客分为普通顾客和会员顾客:管理员分为系统管理员.商品管理员.订单管理员等. 顾客(会员)在登陆系统后,可以对个人信息进行管理,可 ...

  7. 网上图书购买系统(建模)

    项目:网上图书购买系统 活动建模: 顾客购物活动:顾客只有在登陆系统后才可以进行各种活动,在登录验证通过后,可以查看图书信息,选择图书,查看和管理购物车,确认购买后就可以提交订单了. 订单管理员处理订 ...

  8. javaweb JAVA JSP图书销售系统JSP网上书店商城JSP购物系统JSP网上书店JSP图书在线销售系统JSP图书商城jsp二手图书销售系统

    javaweb JAVA JSP图书销售系统JSP网上书店商城JSP购物系统JSP网上书店JSP图书在线销售系统JSP图书商城jsp二手图书销售系统 开发语言:Java 开发工具:Myeclispe ...

  9. [基础]PHP Web数据库访问编写简单示例——图书售卖系统示例[2/2]

    PHP Web服务端脚本编写示例--图书售卖系统示例[1/2] PHP Web数据库访问编写简单示例--图书售卖系统示例[2/2] (2020年1月29日11:32:15更新文章排版,内容未修改) 南 ...

最新文章

  1. matlab--常微分方程的数值解(ODE-s)
  2. 安卓开发 底部导航图标切换时动画效果_安卓10系统终于来了,流畅度堪比苹果?...
  3. `CXXABI_1.3.8' not found (required by /usr/lib/x86_64-linux-gnu/libicuuc.so.55)
  4. Selenium with Python 001 - 安装篇
  5. save(),saveOrUpdate(),merge()的区别
  6. DML DDL DCL区别
  7. 64bit 用户空间内核空间
  8. mysql的第一次作业_数据库原理第一次作业-答案
  9. 世界最强大的UltraLAB便携图形工作站介绍
  10. 树莓派cm4安装ax200驱动-wifi6
  11. 走进CIM,开启智慧城市的全生命周期管理
  12. Zabbix 主被动模式解析
  13. 一杯清茶nbsp;几许相思
  14. oracle小数不显示“0”问题的解决方法
  15. Android耳机线控-播放/暂停/上一曲/下一曲
  16. Windows10独立显卡+核心显卡的三屏扩展输出
  17. 一步一步教你如何利用虚拟机软件安装ubuntu
  18. 艾永亮超级产品:写给企业家自己看的产品规划方法论
  19. 【102】汉典诗词-汉典系列的古诗词检索平台
  20. 【算法百题之十八】18年网易面试题,小易买水果

热门文章

  1. java宠物小精灵_简单的Java宠物小精灵战斗模拟器
  2. 基于android的2048游戏设计,基于Android平台的2048游戏设计与开发.docx
  3. CarSim软件介绍(二)——车辆模型(制动转向系统)
  4. 新版的QQ找不到邮箱入口
  5. 4款良心电脑软件,功能强大,值得收藏
  6. 招行票付通对接总体流程(商业票据)
  7. 金现代实习,关于电力站口厂站计量点的部分知识
  8. Matplotlib python 学习笔记2
  9. PD协议芯片,快充协议芯片RK837
  10. java键盘mac_java – 使用Nimbus LAF的Mac键盘快捷键