商城类网站购物车的实现思路
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}获取
以下有图可表示购物车的思路关系
两个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}获取
以下有图可表示购物车的思路关系
相关文章推荐
- 商城网站--简易购物车实现
- javaScript商城实现购物车思路
- 购物车与商城订单的关系以及技术实现深入分析
- 实现基于LNMP的电子商务网站--小米商城
- 商城购物车的实现设计思想
- 使用session技术来实现网上商城购物车的功能
- 网站“防盗链”的几种实现思路
- Android仿硅谷商城实现购物车实例代码
- redis实现商城中的秒杀并发问题思路
- 【SSH网上商城项目实战17】购物车基本功能的实现
- js购物车实现思路及代码(个人感觉不错)
- 商城秒杀与抢购实现思路
- 使用JQuery 实现类似购物商城的购物车
- 如何实现像商城网站上的商业行业分类的效果
- 用JSP实现的商城购物车模块
- 【SSH网上商城项目实战17】购物车基本功能的实现
- 网上商城之购物车的3种实现方式
- 用JSP实现的商城购物车模块
- 商城购物车逻辑思路