一:购物车首先获取数据的实体类 这里用静态方法来代替数据库的操作简化业务逻辑。
public class BookUtil {
public static Map<String,Book> map=new HashMap<String,Book> ();
static{
map.put("1", new Book("1","JSP开发","一本好书",75));
map.put("2", new Book("2","Struts开发","一本好书",25));
map.put("3", new Book("3","Hibernate开发","一本好书",35));
map.put("4", new Book("4","Spring开发","一本好书",45));
map.put("5", new Book("5","JavaWeb开发","一本好书",65));
}
public static Map getAll(){
return map;
}
}
二:数据操作类 Dao层。
public class BookDao {
//1 得到所有的书籍
public Map getAll(){
return BookUtil.getAll();
}
//2 查找某本书
public Book findBook(String bookid){
Book book=(Book) BookUtil.getAll().get(bookid);
return book;
}
}
三:业务逻辑类 (列出书店里的所有图书的ListBookServlet)
public class ListBookServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
BookDao dao=new BookDao();
Map books= dao.getAll();
request.setAttribute("books", books);
request.getRequestDispatcher("/listBooks.jsp").forward(request, response);
}
}
四:下面就是完成购买的操作
一个是购物车cart,一个是购物项CartItem
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;
this.price=this.book.getPrice()*this.quantity;//价格及时更新
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
public class Cart {
private Map<String,CartItem> map=new HashMap<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() {
double totalprice=0;//变量必须初始化才能进行运算
Iterator it =map.keySet().iterator();
while(it.hasNext()){
String key=(String) it.next();
CartItem item=map.get(key);
totalprice += item.getPrice();
}
return totalprice;
}
public void setPrice(double price) {
this.price = price;
}
public void add(Book book){
CartItem item=map.get(book.getBookid());
if(item==null){
CartItem i=new CartItem();
i.setBook(book);
i.setQuantity(1);
map.put(book.getBookid(), i);
}else{
item.setQuantity(item.getQuantity()+1);
}
}
}
//显示功能的jsp,分别为listBooks.jsp负责显示书店的所有书的信息 另一个是显示购物车信息的items.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
< uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'items.jsp' starting page</title>
</head>
<body style="text-align:center">
购物车商品信息为:
<table border="1" width="50%" align="center">
<tr>
<td>名称</td> <td>单价</td> <td>数目</td> <td>小计</td>
</tr>
<c:forEach var="items" items="${cart.map}">
<tr>
<td>${items.value.book.name}</td><td>${items.value.book.price}</td>
<td>${items.value.quantity}</td><td>${items.value.price}</td>
</tr>
</c:forEach>
<tr>
<td colspan="2">合计</td>
<td colspan="2">${cart.price}</td>
</tr>
</table>
</body>
</html>
//listBook.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
< uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'listBooks.jsp' starting page</title>
</head>
<body style="text-align:center">
书店里的所有书籍有:
<table border="1" width="70%">
<tr>
<td>编号</td>
<td>书名</td>
<td>描述</td>
<td>书价</td>
<td>是否购买</td>
</tr>
<c:forEach items="${books}" var="entry">
<tr>
<td>${entry.key }</td>
<td>${entry.value.name }</td>
<td>${entry.value.desc}</td>
<td>${entry.value.price}</td>
<td><a href="/Day7/servlet/ByServlet?bookid=${entry.value.bookid}">购买</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
原创地址:http://hi.baidu.com/jlhaoran/item/e09ddff252d4a01ece9f321f