1.新建Cart、CartItem类


import java.util.HashMap;
public class Cart {
	private HashMap<String,CartItem> cartItems=new HashMap<String,CartItem>();
	  
	private double total;//总计
	public HashMap<String, CartItem> getCartItems() {
		return cartItems;
	}
	public void setCartItems(HashMap<String, CartItem> cartItems) {
		this.cartItems = cartItems;
	}

	public double getTotal() {
		return total;
	}

	public void setTotal(double total) {
		this.total = total;
	}
}





public class CartItem {

	  private Product product;//商品
	  
	  private int buyNum;//个数
	  
	  private double subTotal;//小计

	public Product getProduct() {
		return product;
	}

	public void setProduct(Product product) {
		this.product = product;
	}

	public int getBuyNum() {
		return buyNum;
	}

	public void setBuyNum(int buyNum) {
		this.buyNum = buyNum;
	}

	public double getSubTotal() {
		return subTotal;
	}

	public void setSubTotal(double subTotal) {
		this.subTotal = subTotal;
	}
	     
}



2.ProductServlet类,处理购物车功能

public void addProductToCard(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		   //获取商品编号
		   String pid= request.getParameter("pid");
		   //购买数量
		   int buyNum=Integer.parseInt(request.getParameter("buyNum"));
		   Product product= productService.findProductByPid(pid);
		   HttpSession session=request.getSession();
		   Cart cart= (Cart) session.getAttribute("cart");
		   if(cart==null){
			   cart=new Cart();
		   }
		   CartItem cartItem=new CartItem();
		   cartItem.setBuyNum(buyNum);
		   cartItem.setProduct(product);
		   //计算小计
		   double subTotal=product.getShop_price()*buyNum;
		   cartItem.setSubTotal(subTotal);
		   
		   HashMap<String,CartItem> cartItems= cart.getCartItems();
		   double newSubTotal=0;
		   if(cartItems.containsKey(pid)){
			   CartItem item= cartItems.get(pid);
			   //修改数量
			   int oldBuyNum= item.getBuyNum();
			   oldBuyNum=oldBuyNum+buyNum;
			   item.setBuyNum(oldBuyNum);
			   //修改小计
			   double oldSubTotal= item.getSubTotal();
			   newSubTotal=buyNum*product.getShop_price();
			   oldSubTotal=oldSubTotal+newSubTotal;
			   item.setSubTotal(oldSubTotal);
		   }else{
			   cartItems.put(pid, cartItem); 
			   newSubTotal=buyNum*product.getShop_price();
		   }
		   
		   //计算 总计
		   double total=cart.getTotal()+newSubTotal;
		   cart.setTotal(total);
		   cart.setCartItems(cartItems);
		   session.setAttribute("cart", cart);
		   request.getRequestDispatcher("cart.jsp").forward(request, response);
}


3.ProductServlet类,删除购物车商品 


//删除指定的商品
	public void deleteCartByPid(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException{
		  //获取商品编号
		   String pid= request.getParameter("pid");
		   HttpSession session= request.getSession();
		   Cart cart= (Cart) session.getAttribute("cart");
		   if(cart !=null){
			  HashMap<String,CartItem> cartItems= cart.getCartItems();
			  //修改总价
			  CartItem cartItem=cartItems.get(pid);
			  cart.setTotal(cart.getTotal()-cartItem.getSubTotal());
			  cartItems.remove(pid);
			  cart.setCartItems(cartItems);
		   }
		   
		   session.setAttribute("cart",cart);
		   request.getRequestDispatcher("cart.jsp").forward(request, response);
}



4.ProductServlet类,清空购物车商品


public void clearCart(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException{
		HttpSession session= request.getSession();
		if(session.getAttribute("cart")!=null){
			session.removeAttribute("cart");
		}
		request.getRequestDispatcher("cart.jsp").forward(request, response);
	}