商城类网站购物车的实现思路

购物车的思路原理如同去超市买东西,首先要有一个购物车,买过的东西都打包成袋子,一个袋子一个袋子都贴上标签,然后放进购物车中。

两个bean

购物车bean

package com.yinhe.bean;

import java.util.HashMap;

public class Cart {

	private HashMap<String,CartItem> cartItems=new HashMap<String,CartItem>();//如同是打包的小袋子。键值对MAP存的是一个键对应一个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;
	}
	
	
}
CartItem   bean也就是小袋子

package com.yinhe.bean;

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;
	}
	  
	  
	  
}

servlet中实现,前台点击购物车,传到下一个页面参数有,商品ID,数量

	public void addProductToCar(HttpServletRequest request,
			HttpServletResponse response) throws IOException{
		String pid = request.getParameter("pid");
		                     //根据pid查询出商品详细内容
		Product product = ps.findProductByPid(pid);
		//获取前台加入购物车的商品数量
		int buyNum = Integer.parseInt(request.getParameter("quantity"));
		//获取购物车
		Cart cart = (Cart) request.getSession().getAttribute("cart");
		//判空如果不判断 则会出现空指针异常
		if (cart == null){
			//新建cart对象 
			cart = new Cart();
		}
		//先判断是否已经购买过了
		if (cart.getCartItems().containsKey(pid)){
			CartItem cartItem = cart.getCartItems().get(pid);
			//修改数量
			cartItem.setBuyNum(cartItem.getBuyNum() + buyNum);
			//修改小计
			cartItem.setSubTotal(cartItem.getSubTotal() + product.getShop_price() * buyNum);
		}else{//购买商品不在购物车中
			//封装carItem对象
			CartItem cartItem = new CartItem();
			cartItem.setProduct(product);
			cartItem.setBuyNum(buyNum);
			cartItem.setSubTotal(cartItem.getProduct().getShop_price() * buyNum);
			cart.getCartItems().put(pid, cartItem);	
		}
		//修改购物车总价
		cart.setTotal(cart.getTotal() + product.getShop_price() * buyNum);
		request.getSession().setAttribute("cart", cart);
		System.out.println("总价:"+cart.getTotal()+","+"map对应的键值对个数"+cart.getCartItems().size());
		response.sendRedirect("/ShopStore/cart.jsp");
	}
前台显示的时候 用c:foreach循环遍历购物车中的商品

<c:forEach var="entry" items="${cart.cartItems}">
<c:set var="carItem" value="${entry.value}"></c:set>
其中${entry.value}该el表达式获取的是CartItem的对象MAP中 每个键中的CartItem对象  

例如 获取商品详细中的商品名字,商品详细的bean对象封装在MAp中,名为product    便可以在foreach中写入el表达式获取:{carItem.product.pname}

获取 个数的话  因为个数没有在product对象中,但是在CartItem的对象MAP中,此时便可以直接使用${carItem.buyNum}进行获取,

若要获取购物车cart中的内容,例如获取总价,因为servlet中已经计算好了总价,并把cart对象存入了session中,便可以直接使用${cart.total}获取 

以下有图可表示购物车的思路关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值