您的位置:首页 > 运维架构 > 网站架构

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

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

两个bean

购物车beanpackage 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}获取 

以下有图可表示购物车的思路关系
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: