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

项目需求:

基于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 block
		e.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");
}
@Override
	protected 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 {

	@Override
	public 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);
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent se) {
		// TODO Auto-generated method stub
		
	}

}

  • 10
    点赞
  • 136
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做一道光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值