一、向购物车中添加商品
1.1.创建AddCartServlet
public class AddCartServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
@SuppressWarnings("unchecked")
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1.得到商品id
String id = request.getParameter("id");
// 2.调用service层方法,根据id查找商品
ProductService service = new ProductService();
try {
Product p = service.findProductById(id);
//3.将商品添加到购物车
//3.1获得session对象
HttpSession session = request.getSession();
//3.2从session中获取购物车对象
Map<Product, Integer> cart = (Map<Product, Integer>)session.getAttribute("cart");
//3.3如果购物车为null,说明没有商品存储在购物车中,创建出购物车
if (cart == null) {
cart = new HashMap<Product, Integer>();
}
//3.4向购物车中添加商品
Integer count = cart.put(p, 1);//returns: the previous value associated with key, or null if there was no mapping for key.
//3.5如果商品数量不为空,则商品数量+1,否则添加新的商品信息
if (count != null) {
cart.put(p, count + 1);
}
session.setAttribute("cart", cart);
response.sendRedirect(request.getContextPath() + "/client/cart.jsp");
return;
} catch (FindProductByIdException e) {
e.printStackTrace();
}
}
}
1.2.编写购物车页面cart.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="p" uri="http://www.itcast.cn/tag"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>电子书城</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/client/css/main.css" type="text/css" />
<script>
//当商品数量发生变化时触发该方法
function changeProductNum(count, totalCount, id) {
count = parseInt(count);
totalCount = parseInt(totalCount);
//如果数量为0,判断是否要删除商品
if (count == 0) {
var flag = window.confirm("确认删除商品吗?");
if (!flag) {
count = 1;
}
}
if (count > totalCount) {
alert("已达到商品最大购买量");
count = totalCount;
}
location.href = "${pageContext.request.contextPath}/changeCart?id="
+ id + "&count=" + count;
}
//删除购物车中的商品
function cart_del() {
var msg = "您确定要删除该商品吗?";
if (confirm(msg)==true){
return true;
}else{
return false;
}
}
</script>
</head>
<body class="main">
<p:user/>
<jsp:include page="head.jsp" />
<jsp:include page="menu_search.jsp" />
<div id="divpagecontent">
<table width="100%" border="0" cellspacing="0">
<tr>
<td>
<div style="text-align:right; margin:5px 10px 5px 0px">
<a href="${pageContext.request.contextPath }/index.jsp">首页</a>
> 购物车
</div>
<table cellspacing="0" class="infocontent">
<tr>
<td>
<img src="${pageContext.request.contextPath}/client/ad/page_ad.jpg" width="900" height="89" />
<table width="100%" border="0" cellspacing="0">
<tr>
<td>
<img src="${pageContext.request.contextPath}/client/images/buy1.gif" width="635" height="38" />
</td>
</tr>
<tr>
<td>
<table cellspacing="1" class="carttable">
<tr>
<td width="10%">序号</td>
<td width="30%">商品名称</td>
<td width="10%">价格</td>
<td width="20%"> 数量</td>
<td width="10%">库存</td>
<td width="10%">小计</td>
<td width="10%">取消</td>
</tr>
</table>
<!-- 循环输出商品信息 -->
<c:set var="total" value="0" />
<c:forEach items="${cart}" var="entry" varStatus="vs">
<table width="100%" border="0" cellspacing="0">
<tr>
<td width="10%">${vs.count}</td>
<td width="30%">${entry.key.name }</td>
<td width="10%">${entry.key.price }</td>
<td width="20%">
<!-- 减少商品数量 -->
<input type="button" value='-' style="width:20px"
onclick="changeProductNum('${entry.value-1}','${entry.key.pnum}','${entry.key.id}')">
<!-- 商品数量显示 -->
<input name="text" type="text" value="${entry.value}" style="width:40px;text-align:center" />
<!-- 增加商品数量 -->
<input type="button" value='+' style="width:20px"
onclick="changeProductNum('${entry.value+1}','${entry.key.pnum}','${entry.key.id}')">
</td>
<td width="10%">${entry.key.pnum}</td>
<td width="10%">${entry.key.price*entry.value}</td>
<td width="10%">
<!-- 删除商品 -->
<a href="${pageContext.request.contextPath}/changeCart?id=${entry.key.id}&count=0"
style="color:#FF0000; font-weight:bold" onclick="javascript:return cart_del()">X</a>
</td>
</tr>
</table>
<c:set value="${total+entry.key.price*entry.value}" var="total" />
</c:forEach>
<table cellspacing="1" class="carttable">
<tr>
<td style="text-align:right; padding-right:40px;">
<font style="color:#FF6600; font-weight:bold">合计: ${total}元</font>
</td>
</tr>
</table>
<div style="text-align:right; margin-top:10px">
<!--继续购物 -->
<a href="${pageContext.request.contextPath}/showProductByPage">
<img src="images/gwc_jx.gif" border="0" />
</a>
<!--结账 -->
<a href="${pageContext.request.contextPath}/client/order.jsp">
<img src="${pageContext.request.contextPath}/client/images/gwc_buy.gif" border="0" />
</a>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<jsp:include page="foot.jsp" />
</body>
</html>
二、删除购物车中指定商品
创建ChangeCartServlet
/**
* 购物车内容变更
* @author admin
*
*/
public class ChangeCartServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1.得到商品id
String id = request.getParameter("id");
// 2.得到要修改的数量
int count = Integer.parseInt(request.getParameter("count"));
// 3.从session中获取购物车.
HttpSession session = request.getSession();
Map<Product, Integer> cart = (Map<Product, Integer>) session.getAttribute("cart");
Product p = new Product();
p.setId(id);
if (count != 0) {
cart.put(p, count);
} else {
cart.remove(p);
}
response.sendRedirect(request.getContextPath() + "/client/cart.jsp");
return;
}
}