跳转到购物车的页面,显示你要购买的东西
跳转到相应的servlt进行处理并把ID号带进去
listbook.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>显示所有商品</title> </head> <body style="text-align:center"> <h2>小书店</h2> <table border="1" width="80%"> <tr> <td>编号</td> <td>书名</td> <td>作者</td> <td>价格</td> <td>描述</td> <td>操作</td> </tr> <c:forEach var="book" items="${books}"> <tr> <td>${book.id}</td> <td>${book.name}</td> <td>${book.author}</td> <td>${book.price}</td> <td>${book.desscription}</td> <td> <a href="${pageContext.request.contextPath}/buy.do?id=${book.id}">购买</a> </td> </tr> </c:forEach> </table> </body> </html>
编写BuyServlet.java
1. 获得要买的书
BuyServlet.java
package www.hbsi.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import www.hbsi.domain.Book; import www.hbsi.service.BookService; import www.hbsi.service.BookServiceImpl; public class BuyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1.获得所要购买的书 //点击购物车,呆着ID跳转到servley,获取ID号 String id = request.getParameter("id"); //找到这本书,servlet调用相应的服务类寻找 BookService service = new BookServiceImpl(); Book book = service.findById(id); // 2.得到购物车 // 3.把书放进去 // 4.显示界面 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
编写findById的方法
- BookService .java
- BookServlceImpl.java
- BookDao.java
package www.hbsi.dao; import java.util.List; import www.hbsi.domain.Book; public interface BookDao { //查询所有书籍 public List<Book> getAll(); //根据ID查找书籍 public Book findById(String id); }
- BookDaoImpl.java
package www.hbsi.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import www.hbsi.util.DBConn; import www.hbsi.domain.Book; public class BookDaoImpl implements BookDao { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; Book book; public Book findById(String id) { try { conn = DBConn.getConnection(); String sql = "select id,name,author,price,desscription from book where id=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, id); rs = pstmt.executeQuery(); //Book b = null; if(rs.next()){ book = new Book(); book.setId(rs.getString("id")); book.setName(rs.getString("name")); book.setAuthor(rs.getString("author")); book.setPrice(rs.getDouble("price")); book.setDesscription(rs.getString("desscription")); return book; } return null; } catch (Exception e) { throw new RuntimeException(e); } finally { DBConn.close(rs, pstmt, conn); } } public List<Book> getAll() { try { conn = DBConn.getConnection(); String sql = "select id,name,author,price,desscription from book"; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); List<Book> list = new ArrayList<Book>(); while(rs.next()){ book = new Book(); book.setId(rs.getString("id")); book.setName(rs.getString("name")); book.setAuthor(rs.getString("author")); book.setPrice(rs.getDouble("price")); book.setDesscription(rs.getString("desscription")); list.add(book); } return list; } catch (Exception e) { throw new RuntimeException(e); } finally { DBConn.close(rs, pstmt, conn); } } }
- 测试
2. 得到购物车
用集合来做
一个实例,生成一个类,通过session得到购物车
3. 向购物车添加
创建购物车,domain包下
购物车相当于一个容器
取Map集合好,如果对集合进行查询,用map
不用查询用list
Cart.java
package www.hbsi.domain; import java.util.LinkedHashMap; import java.util.Map; public class Cart { //有序的用LinkedHashMap //同一本书买多次,会出现重复的书,String是ID,Book是实体,会出现重复的书 //private Map<String,Book> map = new LinkedHashMap<String,Book>(); //为了避免出现重复的书,不用Book用CartItem private Map<String,CartItem> map = new LinkedHashMap<String,CartItem>(); }
新建一个购物项CartItem.java类

package www.hbsi.domain; //用于代表购买的商品(书),包括书的数量。(购物项) public class CartItem { //书 private Book book; //数量 private int quantity; //对此类书的一个价格计算,小计 private double price; public Book getBook() { return book; } public void setBook(Book book) { this.book = book; } public int getQuantity() { return quantity; } public void setQuantity(int quantity) { this.quantity = quantity; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } }
Cart.java
package www.hbsi.domain; import java.util.LinkedHashMap; import java.util.Map; public class Cart { //有序的用LinkedHashMap //同一本书买多次,会出现重复的书,String是ID,Book是实体,会出现重复的书 //private Map<String,Book> map = new LinkedHashMap<String,Book>(); //为了避免出现重复的书,不用Book用CartItem private Map<String,CartItem> map = new LinkedHashMap<String,CartItem>(); //所有价格总计 private double price; public Map<String, CartItem> getMap() { return map; } public void setMap(Map<String, CartItem> map) { this.map = map; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } //提供一个add方法 public void add(Book book){ // 放到购物车中是放入某一个购物项里,如果存在+1,不存在新建购物项 //找到购物项 CartItem item = map.get(book.getId()); if(item != null){ //购物项里的数量+1 item.setQuantity(item.getQuantity()+1); }else{ //创建item item = new CartItem(); //添加书 item.setBook(book); //设计数量 item.setQuantity(1); //产生新的购物项放到map集合 map.put(book.getId(),item); } } }
计算价格
1.CartItem里小计
2. Cart总计
4. 向购物车中添加购物项
package www.hbsi.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import www.hbsi.domain.Book; import www.hbsi.domain.Cart; import www.hbsi.service.BookService; import www.hbsi.service.BookServiceImpl; public class BuyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1.获得所要购买的书 //点击购物车,呆着ID跳转到servley,获取ID号 String id = request.getParameter("id"); //找到这本书,servlet调用相应的服务类寻找 BookService service = new BookServiceImpl(); Book book = service.findById(id); // 2.得到购物车 //有了购物车把他放到一个session里,返回一个购物车类型的对象 Cart cart = (Cart) request.getSession().getAttribute("cart"); //还没有购物车 if(cart == null){ cart = new Cart(); request.getSession().setAttribute("cart", cart); } // 3.把书放进去 //有了购物车类,增加一个add方法,用于往购物车里添加 cart.add(book); // 4.显示界面 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
转发转到现实页面:
新建listcart.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>购物车显示页面</title> </head> <body style="text-align:center"> <h2>您购买了如下商品</h2> <table border="1" width="80%"> <tr> <td>编号</td> <td>书名</td> <td>单价</td> <td>数量</td> <td>小计</td> <td>操作</td> </tr> <c:forEach var="me" items="${cart.map}"> <tr> <td>${me.key}</td> <td>${me.value.book.name}</td> <td>${me.value.book.price}</td> <td>${me.value.quantity}</td> <td>${me.value.price}</td> <td> <a href="">删除</a> </td> </tr> </c:forEach> </table> </body> </html>
测试:
在下面页面基础上
点击刷新
自动增加
所以不能用转发,要用重定向
新建一个过度器用于重定向
新建
LsitCartServlet.java
LsitCartServlet.java package www.hbsi.web.ui; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ListCartServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
