D15 Sping Boot 入门 Sping框架--Java Web之书城项目 购物车模块
Posted 菜鸟的博客笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D15 Sping Boot 入门 Sping框架--Java Web之书城项目 购物车模块相关的知识,希望对你有一定的参考价值。
需求分析
购物车模块(Session方法)
Ⅰ、购物车模型创建
在com.gychen.pojo里创建CartItem商品项对象和Cart购物车对象
1 package com.gychen.pojo; 2 3 import java.math.BigDecimal; 4 5 /** 6 * 购物车商品项 7 */ 8 public class CartItem { 9 10 private Integer id; 11 private String name; 12 private Integer count; 13 private BigDecimal price; 14 private BigDecimal totalPrice; 15 16 public Integer getId() { 17 return id; 18 } 19 20 public void setId(Integer id) { 21 this.id = id; 22 } 23 24 public String getName() { 25 return name; 26 } 27 28 public void setName(String name) { 29 this.name = name; 30 } 31 32 public Integer getCount() { 33 return count; 34 } 35 36 public void setCount(Integer count) { 37 this.count = count; 38 } 39 40 public BigDecimal getPrice() { 41 return price; 42 } 43 44 public void setPrice(BigDecimal price) { 45 this.price = price; 46 } 47 48 public BigDecimal getTotalPrice() { 49 return totalPrice; 50 } 51 52 public void setTotalPrice(BigDecimal totalPrice) { 53 this.totalPrice = totalPrice; 54 } 55 56 57 /** 58 * 商品项信息 59 * @param id 商品id 60 * @param name 商品名称 61 * @param count 商品数量 62 * @param price 商品单价 63 * @param totalPrice 商品总价 64 */ 65 public CartItem(Integer id, String name, Integer count, BigDecimal price, BigDecimal totalPrice) { 66 this.id = id; 67 this.name = name; 68 this.count = count; 69 this.price = price; 70 this.totalPrice = totalPrice; 71 } 72 73 74 public CartItem() { 75 } 76 77 @Override 78 public String toString() { 79 return "CartItem{" + 80 "id=" + id + 81 ", name=\'" + name + \'\\\'\' + 82 ", count=" + count + 83 ", price=" + price + 84 ", totalPrice=" + totalPrice + 85 \'}\'; 86 } 87 } 88 89 CartItem.java
1 package com.gychen.pojo; 2 3 import java.math.BigDecimal; 4 import java.util.ArrayList; 5 import java.util.List; 6 7 /** 8 * 购物车对象 9 */ 10 public class Cart { 11 12 private Integer totalCount; 13 private BigDecimal totalPrice; 14 private List<CartItem> items = new ArrayList<CartItem>(); 15 16 17 public Integer getTotalCount() { 18 return totalCount; 19 } 20 21 public void setTotalCount(Integer totalCount) { 22 this.totalCount = totalCount; 23 } 24 25 public BigDecimal getTotalPrice() { 26 return totalPrice; 27 } 28 29 public void setTotalPrice(BigDecimal totalPrice) { 30 this.totalPrice = totalPrice; 31 } 32 33 public List<CartItem> getItems() { 34 return items; 35 } 36 37 public void setItems(List<CartItem> items) { 38 this.items = items; 39 } 40 41 42 public Cart(Integer totalCount, BigDecimal totalPrice, List<CartItem> items) { 43 this.totalCount = totalCount; 44 this.totalPrice = totalPrice; 45 this.items = items; 46 } 47 48 public Cart() { 49 } 50 51 52 @Override 53 public String toString() { 54 return "Cart{" + 55 "totalCount=" + totalCount + 56 ", totalPrice=" + totalPrice + 57 ", items=" + items + 58 \'}\'; 59 } 60 } 61 62 Cart.java
在Cart对象中添加需要的方法
1 package com.gychen.pojo; 2 3 import java.math.BigDecimal; 4 import java.util.LinkedHashMap; 5 import java.util.Map; 6 7 /** 8 * 购物车对象 9 */ 10 public class Cart { 11 12 // private Integer totalCount; 13 // private BigDecimal totalPrice; 14 /** 15 * key是商品编号 16 * value是商品信息 17 */ 18 private Map<Integer,CartItem> items = new LinkedHashMap<Integer, CartItem>(); 19 20 21 /** 22 * 添加商品项 23 * @param cartItem 商品项对象 24 */ 25 public void addItem(CartItem cartItem){ 26 27 //先查看购物车中是否已经添加过此商品 28 //1、如果已添加,则数量+1 29 //2、如果未添加,直接方到集合中即可 30 CartItem item = items.get(cartItem.getId()); 31 if (item == null){ 32 //之前没有添加过此商品 33 items.put(cartItem.getId(),cartItem); 34 }else { 35 36 //已经添加过的情况 数量+1,总价更新 37 item.setCount(item.getCount() + 1); //数量累加 38 item.setTotalPrice(item.getPrice().multiply(new BigDecimal(item.getCount()))); //更新总金额 39 } 40 41 } 42 43 44 45 /** 46 * 删除商品项 47 * @param id 商品项id 48 */ 49 public void deleteItem(Integer id){ 50 51 items.remove(id); 52 } 53 54 55 /** 56 * 清空购物车 57 */ 58 public void clear(){ 59 60 items.clear(); 61 } 62 63 64 /** 65 * 修改商品数量 66 * @param id 商品项id 67 * @param count 商品数量 68 */ 69 public void uppdateCount(Integer id, Integer count){ 70 71 //先查看购物车是否有此商品,如果有修改数量,更新总金额 72 73 CartItem cartItem = items.get(id); 74 if (cartItem != null){ 75 cartItem.setCount(count); //修改商品数量 76 cartItem.setTotalPrice(cartItem.getPrice().multiply(new BigDecimal(cartItem.getCount()))); //更新总金额 77 } 78 } 79 80 81 82 83 84 private Integer getTotalCount() { 85 Integer totalCount = 0; 86 //法一:遍历Map集合中的每个键值对 87 for (Map.Entry<Integer,CartItem>entry : items.entrySet()){ 88 totalCount += entry.getValue().getCount(); 89 } 90 // //法二: 91 // for (CartItem value : items.values()) { 92 // totalCount += value.getCount(); 93 // } 94 return totalCount; 95 } 96 97 //实际上并不需要 98 // public void setTotalCount(Integer totalCount) { 99 // this.totalCount = totalCount; 100 // } 101 102 private BigDecimal getTotalPrice() { 103 BigDecimal totalPrice = new BigDecimal(0); 104 for (Map.Entry<Integer,CartItem>entry : items.entrySet()){ 105 totalPrice = totalPrice.add(entry.getValue().getTotalPrice()); 106 } 107 return totalPrice; 108 } 109 110 // public void setTotalPrice(BigDecimal totalPrice) { 111 // this.totalPrice = totalPrice; 112 // } 113 114 public Map<Integer,CartItem> getItems() { 115 return items; 116 } 117 118 public void setItems(Map<Integer,CartItem> items) { 119 this.items = items; 120 } 121 122 123 124 @Override 125 public String toString() { 126 return "Cart{" + 127 "totalCount=" + getTotalCount() + 128 ", totalPrice=" + getTotalPrice() + 129 ", items=" + items + 130 \'}\'; 131 } 132 } 133 134 Cart.java
添加CartTest测试
1 package com.gychen.test; 2 3 import com.gychen.pojo.Cart; 4 import com.gychen.pojo.CartItem; 5 import org.junit.Test; 6 7 import java.math.BigDecimal; 8 9 import static org.junit.Assert.*; 10 11 public class CartTest { 12 13 14 @Test 15 public void addItem() { 16 Cart cart = new Cart(); 17 cart.addItem(new CartItem(1,"java从入门到精通",1,new BigDecimal(200),new BigDecimal(200))); 18 cart.addItem(new CartItem(2,"python从入门到精通",1,new BigDecimal(100),new BigDecimal(100))); 19 cart.addItem(new CartItem(1,"java从入门到精通",1,new BigDecimal(200),new BigDecimal(200))); 20 System.out.println(cart); 21 } 22 23 @Test 24 public void deleteItem() { 25 Cart cart = new Cart(); 26 cart.addItem(new CartItem(1,"java从入门到精通",1,new BigDecimal(300),new BigDecimal(300))); 27 cart.addItem(new CartItem(2,"python从入门到精通",1,new BigDecimal(100),new BigDecimal(100))); 28 cart.addItem(new CartItem(1,"java从入门到精通",1,new BigDecimal(300),new BigDecimal(300))); 29 30 cart.deleteItem(1); 31 32 System.out.println(cart); 33 } 34 35 @Test 36 public void clear() { 37 38 Cart cart = new Cart(); 39 cart.addItem(new CartItem(1,"java从入门到精通",1,new BigDecimal(400),new BigDecimal(400))); 40 cart.addItem(new CartItem(2,"python从入门到精通",1,new BigDecimal(200),new BigDecimal(200))); 41 cart.addItem(new CartItem(1,"java从入门到精通",1,new BigDecimal(400),new BigDecimal(400))); 42 43 cart.clear(); 44 45 System.out.println(cart); 46 } 47 48 @Test 49 public void uppdateCount() { 50 51 Cart cart = new Cart(); 52 cart.addItem(new CartItem(1,"Spring从入门到精通",1,new BigDecimal(400),new BigDecimal(400))); 53 cart.addItem(new CartItem(2,"python从入门到精通",1,new BigDecimal(200),new BigDecimal(200))); 54 cart.addItem(new CartItem(1,"Spring从入门到精通",1,new BigDecimal(400),new BigDecimal(400))); 55 56 cart.uppdateCount(2,4); 57 cart.uppdateCount(1,1); 58 System.out.println(cart); 59 } 60 }
Ⅱ、加入购物车功能的实现
1 //1、获取请求的参数 2 //2、调用BookService.queryBookById(id):Book得到图书的信息 3 //3、把图书信息转化为CartItem商品项 4 //4、调用Cart.addItem(cartItem);添加商品项 5 //4、重定向回列表页
在com.gychen.web中新建CartServlet的addItem方法
1 private BookService bookService = new BookServiceImpl(); 2 /** 3 * 添加购物车 4 * @param req 请求 5 * @param resp 响应 6 */ 7 protected void addItem(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 8 9 //1、获取请求的参数 10 //2、调用BookService.queryBookById(id):Book得到图书的信息 11 //3、把图书信息转化为CartItem商品项 12 //4、调用Cart.addItem(cartItem);添加商品项 13 //5、重定向回列表页 14 15 //1、获取请求的参数 16 int id = WebUtils.parseInt(req.getParameter("id"),0); 17 18 //2、调用BookService.queryBookById(id):Book得到图书的信息 19 20 Book book = bookService.querryBookById(id); 21 22 //3、把图书信息转化为CartItem商品项 23 CartItem cartItem = new CartItem(book.getId(),book.getName(),1,book.getPrice(),book.getPrice()); 24 25 //4、调用Cart.addItem(cartItem);添加商品项 26 Cart cart = (Cart) req.getSession().getAttribute("cart"); 27 if (cart == null){ 28 29 cart = new Cart(); 30 req.getSession().setAttribute("cart",cart); 31 } 32 33 cart.addItem(cartItem); 34 35 //最后一个添加的商品名称 36 req.getSession().setAttribute("lastName",cartItem.getName()); 37 //5、重定向回列表页 38 //获取浏览器访问时的地址再重定向回去 39 resp.sendRedirect(req.getHeader("Referer")); 40 }
1 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 2 <%-- 3 Created by IntelliJ IDEA. 4 User: 99622 5 Date: 2020/3/30 6 Time: 20:18 7 To change this template use File | Settings | File Templates. 8 --%> 9 <%@ page 10 contentType="text/html;charset=UTF-8" 11 language="java" 12 errorPage="/error500.jsp" 13 autoFlush="true" 14 buffer="8kb" 15 %> 16 <!-- 17 errorPage表示错误后以上是关于D15 Sping Boot 入门 Sping框架--Java Web之书城项目 购物车模块的主要内容,如果未能解决你的问题,请参考以下文章
D08 Sping Boot 入门 Sping框架--Java Web之JSP
D16 Sping Boot 入门 Sping框架--Java Web之书城项目 dingda模块
D16 Sping Boot 入门 Sping框架--Java Web之书城项目 dingda模块
D17 Sping Boot 入门 Sping框架--Java Web之Filter过滤器