购物车
Posted 司机刹一脚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了购物车相关的知识,希望对你有一定的参考价值。
一个购物车有两个实体:
一个是购物项,一个是购物车
购物车里面有购物项的集合,因为一个购物车应该包括若干购物项
购物项包括:商品,数量,总价
class CartItem { //商品 private Product product; //数量 private Integer count; //总价 private Double subtotal; public Product getProduct() { return product; } public void setProduct(Product product) { this.product = product; } public Integer getCount() { return count; } public void setCount(Integer count) { this.count = count; } //每个购物项的总价通过数量和单价算出 public Double getSubtotal() { return count * product.getShop_price(); } }
购物车应该包括:总价和购物项的集合
购物项的集合用map集合:id作为key,购物项作为value
此外,购物车还提供将购物项添加到购物车 的方法,和从购物车移除购物项的方法,清空购物车的方法
class Cart { //总计 private Double total = 0d; //购物的集合 //商品id作为map的key,购物项作为map的value Map<String,CartItem> map = new LinkedHashMap<>(); public Double getTotal() { return total; } public void setTotal(Double total) { this.total = total; } public Map<String, CartItem> getMap() { return map; } public void setMap(Map<String, CartItem> map) { this.map = map; } //清空购物车的方法 public void clearCart() { //清空map集合中的数据 map.clear(); //设置总价为0 total = 0d; } //从购物车中移除其中某个购物项 public void removeCartItem(String pid){ //删除对应id的购物项 CartItem cartItem = map.remove(pid); //修改总计的价格 total -= cartItem.getSubtotal(); } //将购物项添加到购物车的方法 public void addCart(CartItem cartItem) { //首先判断在原来的购物车中是否包含这个购物项 //获得这个购物项的pid String pid = cartItem.getProduct().getPid(); if(map.containsKey(pid)) { //购物车中有这个购物项 //获得原有的购物项 CartItem cartItem1 = map.get(pid); //在原有的数量上添加 cartItem1.setCount(cartItem1.getCount()+cartItem.getCount()); }else { //购物车中没有这个购物项 map.put(pid,cartItem); } } }
写完了购物车的实体类之后就是购物车的servlet
在这个servlet中提供添加到购物车,清空购物车,和删除其中一个购物项的方法
//首先是添加到购物车的方法 //因为向上抽取了一个baseServlet,所有后面的servlet全部继承baseServlet,然后直接写完成逻辑的方法 public String addCart(HttpServletRequest request,HttpServletResponse response){ //在这里省略service层和dao层 //首先接收jsp中传过来的pid String pid = request.getParameter("pid"); //获取表单中传递过来的数量 Integer count = Integer.parseInt(request.getParameter("count")); //把数据封装到CartItem中 //调用service层获取对应id的product ProductService ps = new ProductServiceImpl(); Product product = ps.findById(pid); //创建CartItem对象,开始封装数据 CartItem cartItem = new CartItem(); //封装商品数量 cartItem .setCount(count); //封装商品 cartItem.setProduct(product); //从session域对象中拿购物车 Cart cart = (Cart)request.getSession.getAttribute("cart"); //判断有没有购物车存在 if(cart == null) { //如果没有购物车就创建购物车 cart = new Cart(); //然后保存到session域中 request.getSession.setAttribute("cart",cart); } //如果从session域中拿到了cart //调用cart的将购物项保存到购物车的方法 cart.addCart(cartItem); //重定向 response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp"); return null; }
//一个清空购物车的方法 public String clearCart(HttpServletRequest request,HttpServletResponse response) { //获得购物车对象 Cart cart = (Cart)request.getSession.getAttribute("cart"); if(cart == null) { //如果没有购物车就创建购物车 cart = new Cart(); //然后保存到session域中 request.getSession.setAttribute("cart",cart); } //调用购物车的清空购物车的方法 cart.clearCart(); //重定向 response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp"); return null; }
//删除购物车中的一个购物项 public String removeCart(HttpServletRequest request,HttpServletResponse response) { //获得购物车对象 Cart cart = (Cart)request.getSession.getAttribute("cart"); if(cart == null) { //如果没有购物车就创建购物车 cart = new Cart(); //然后保存到session域中 request.getSession.setAttribute("cart",cart); } //获得删除传递过来的pid String pid = request.getParameter("pid"); cart.removeCartItem(pid); //重定向 response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp"); }
以上是关于购物车的主要内容,如果未能解决你的问题,请参考以下文章