java web 做购物车的大概思路,和实现步奏是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java web 做购物车的大概思路,和实现步奏是啥?相关的知识,希望对你有一定的参考价值。
购物车管理模块主要功能有如下几个部分:(1)创建购物车 当客户登录后,系统会给客户创建一个购物车放入服务器的Session会话中。使客户在整个会话中都拥有一个相同的购物车。这里主要运用了Http协议中的会话机制,将购物车保存在客户的会话中,这样在整个客户游览不同页面商品的过程中,都会使用同一个购物车对象。 具体执行步骤:(1)从客户的请求对象中获取Session会话对象(2)从会话对象中获取购物车对象(3)判断是购物车对象是不是空的,如果是空是就创建一个 /* * 在监听到session被创建之后,就立即向session中添加一个购物车Car; */ public void sessionCreated(HttpSessionEvent arg0) HttpSession session = arg0.getSession(); Cart cart=new Cart(); session.setAttribute("cart", cart); /* * 从session中获得购物车 */ Cart cart = (Cart) session.getAttribute("cart"); if (cart == null) cart = new Cart(); (2)向购物车中添加一个商品项 客户在查看网页上的一个商品时,当向服务器发送一个“添加到购物车”的请求时,会执行这个功能。功能执行过程:(1)从客户请求对象中获取商品的ID(2)调用业务层的方法根据商品ID去数据查询商品的信息,返回商品对象(3)从商品对象中获取商品名,商品价格,来构建一个商品项对象(4)从Session会话中获取购物车对象(5)调用业务层的方法来根据购物车对象和商品项对象来执行添加操作(6)将些商品项对象放入到购物车中 部分实现代码: /* * 从数据库中把商品取到; */ ProductService productService = (ProductService) ServiceFactory.getInstance().getService(Globals.PRODUCT_SERVICE); Integer id = Integer.parseInt(request.getParameter("productid")); Product product = productService.getProductById(id); /* * 在向购物车中添加商品的时候会判断商品是否已经存在, * 已存在的就不让在加入了; */ if (cart.isExist(id)) message = "该商品已经存在!请<a onclick='javascript:history.go(-1)'>返回</a>!"; request.setAttribute("message", message); return mapping.findForward("error"); else /* * 向购物车添加一个商品; */ cart.addCart(product); session.setAttribute("cart", cart); return mapping.findForward("addcartsuccess"); 参考技术A 1。session 中创建购物车集合2。产品页面中添加向购物车追加内容的连接(向购物车集合中添加实体类)
3。把购物车集合保存到session中 参考技术B 最好是建个购物车的表来存放数据,这样就与session无关啦,简单些就商品Id+客户Id+商品的数量,当然也可以有商品价格和总金额之类的方便查看。 参考技术C 是用HashMap,存商品编号和商品数量,如果已经存在此商品,则数量叠加,然后用session保存。
cookie来实现购物车功能
一、大概思路
1、从cookie中取商品列表
2、判断要添加的商品是否存在cookie中。
3、如果已添加过,则把对应的商品取出来,把要添加的商品的数量加上去。
4、如果没有添加过,则把改商品添加到商品列表中。
5、再把商品列表序列化,加入cookie中。
二、代码实现
1、定义一个购物车商品的pojo
public class CartItem { private Long id; private String title; private Long price; private Integer num; private String image; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Long getPrice() { return price; } public void setPrice(Long price) { this.price = price; } public Integer getNum() { return num; } public void setNum(Integer num) { this.num = num; } public String getImage() { return image; } public void setImage(String image) { this.image = image; } }
2、定义一个购物车的接口和实现类
public interface CartService { TaotaoResult addCartService(HttpServletRequest request, HttpServletResponse response, Long itemId, Integer num); }
@Service public class CartServiceImpl implements CartService { @Autowired private ItemService itemService; @Value("${COOKIE_EXPIRE}") private Integer COOKIE_EXPIRE; @Override public TaotaoResult addCartService(HttpServletRequest request, HttpServletResponse response, Long itemId, Integer num) { // 1.从cookie中取商品列表 List<CartItem> list = getCartFromCookie(request); // 2.判断是否已经添加过购物车 boolean haveflag = false; for (CartItem c : list) { //3.如果添加过,把对应的商品取出来,数量加Num if(c.getId().longValue() == itemId) { c.setNum(c.getNum() + num); haveflag = true; break; } } // 4.如果没添加过,则把该商品添加进去。 if (!haveflag) { TbItem item = itemService.getItemById(itemId); CartItem cartItem = new CartItem(); cartItem.setNum(num); cartItem.setId(itemId); cartItem.setPrice(item.getPrice()); cartItem.setTitle(item.getTitle()); if (item.getImage() != null) { String image = item.getImage(); String[] strings = image.split(","); cartItem.setImage(strings[0]); } list.add(cartItem); } // 5.再把list返回到cookie中 CookieUtils.setCookie(request, response, "TT_CART", JsonUtils.objectToJson(list), COOKIE_EXPIRE);
return TaotaoResult.ok(); } private List<CartItem> getCartFromCookie(HttpServletRequest request) { try { String json = CookieUtils.getCookieValue(request, "TT_TOKEN", true); List<CartItem> list = JsonUtils.jsonToList(json, CartItem.class); if (list == null) { return new ArrayList<>(); }else { return list; } }catch (Exception e) { return new ArrayList<>(); } } }
3、controller来接收前端的请求,并响应到cart-success.jsp页面。
@Controller public class CartController { @Autowired private CartService cartService; @RequestMapping("/cart/add/{itemId}") public String addCart(@PathVariable Long itemId, Integer num, HttpServletRequest request, HttpServletResponse response) { TaotaoResult result = cartService.addCartService(request, response, itemId, num); return "cart-success"; } }
以上是关于java web 做购物车的大概思路,和实现步奏是啥?的主要内容,如果未能解决你的问题,请参考以下文章