跳转到购物车的页面,显示你要购买的东西
跳转到相应的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类
![](https://img-my.csdn.net/uploads/201211/21/1353500094_1252.png)
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);
}
}
![](https://img-my.csdn.net/uploads/201211/21/1353501557_3875.png)