Java基础99 把商品加入购物车中及删除操作(Servlet技术,简单演示,只是把购物车添加到session中,不是以数据库的形式存储)
1、建立购物车实体类
Cart 类 //实体类
1 package com.shore.entity; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 /** 7 * @author DSHORE/2019-5-16 8 * 9 */ 10 public class Cart { 11 //Map集合中,可能有很多本书 12 private Map<String, CartItem> items = new HashMap<String, CartItem>();//key:购物项对应的书的id value:购物项 13 private int num;//购物车中,书籍的数量 14 private float price;//总价,付款时的金额 15 16 public Map<String, CartItem> getItems() { 17 return items; 18 } 19 20 public int getNum() { 21 num = 0; 22 for(Map.Entry<String, CartItem> me:items.entrySet()){ 23 num += me.getValue().getNum(); 24 } 25 return num; 26 } 27 /*public void setNum(int num) {//不能设置书籍的数量 28 this.num = num; 29 }*/ 30 public float getPrice() { 31 price = 0; 32 for(Map.Entry<String, CartItem> me:items.entrySet()){ 33 price += me.getValue().getPrice(); 34 } 35 return price; 36 } 37 /*public void setPrice(float price) {//不能设置价格 38 this.price = price; 39 }*/ 40 41 //把商品加入购物车 42 public void addCart(Book book) {//同一本书,可购买了多本 43 if(items.containsKey(book.getId())){ 44 //有这本书的id(当同一本书,我购买两本或更多本时,保持其他字段的属性不变,只增加数量) 45 CartItem item = items.get(book.getId()); 46 item.setNum(item.getNum() + 1);//其他不改变,只增加数量 47 }else{ 48 //没有这本书的id 49 CartItem item = new CartItem(); 50 item.setBook(book); 51 item.setNum(1); 52 items.put(book.getId(), item); 53 } 54 } 55 56 //删除购物车中的商品(同一种商品,有多个时,则是减少该商品的数量) 57 public void deleteCartByBook(String bookId) { 58 CartItem item = items.get(bookId); 59 if (item.getNum() > 1) {//购物车中,同一商品,购买了多件,则每删除一次,该商品的数量就减一次(价格自动减少) 60 item.setNum(item.getNum() - 1);//其他不改变,只减少数量 61 }else { 62 items.remove(bookId); 63 } 64 } 65 }
CartItem 类 //购物项类
1 package com.shore.entity; 2 3 /** 4 * @author DSHORE/2019-5-16 5 * 6 */ 7 public class CartItem {//购物项 8 private Book book; 9 private int num; 10 private float price; 11 12 public Book getBook() { 13 return book; 14 } 15 public void setBook(Book book) { 16 this.book = book; 17 } 18 public int getNum() { 19 return num; 20 } 21 public void setNum(int num) { 22 this.num = num; 23 } 24 public float getPrice() { 25 return num*book.getPrice();//计算出同一本书的总价(或同一类书) 26 } 27 /*public void setPrice(float price) {//不能设置价格 28 this.price = price; 29 }*/ 30 }
2、建立Servlet类
ClientServlet 类
1 package com.shore.web.controller.client; 2 3 import java.io.IOException; 4 import java.util.List; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 import javax.servlet.http.HttpSession; 11 12 import com.shore.entity.Book; 13 import com.shore.entity.Cart; 14 import com.shore.entity.CartItem; 15 import com.shore.service.BookService; 16 import com.shore.service.impl.BookServiceImpl; 17 18 /** 19 * @author DSHORE/2019-5-12 20 * 21 */ 22 public class ClientServlet extends HttpServlet { 23 private static final long serialVersionUID = 1L;//序列化 24 BookService bService = new BookServiceImpl(); 25 26 public void doGet(HttpServletRequest request, HttpServletResponse response) 27 throws ServletException, IOException { 28 String operation = request.getParameter("operation"); 29 if ("addCartByBook".equals(operation)){ 30 addCartByBook(request,response); 31 }else if("deleteCartByBook".equals(operation)){ 32 deleteCartByBook(request,response); 33 } 34 } 35 36 //删除购物车中的商品(同一种商品,有多个时,则是减少该商品的数量) 37 private void deleteCartByBook(HttpServletRequest request, 38 HttpServletResponse response) throws ServletException, IOException { 39 //获取数的id 40 String bookId = request.getParameter("bookId"); 41 //从HttpSession中取出购物车 42 HttpSession session = request.getSession(); 43 Cart cart = (Cart)session.getAttribute("cart"); 44 cart.deleteCartByBook(bookId); //直接调用 实体类Cart中的deleteCartByBook()方法 45 /*//提示删除商品成功 46 request.setAttribute("message","<script type='text/javascript'>alert('删除商品成功')</script>");*/ 47 request.getRequestDispatcher("/client/showCart.jsp").forward(request, response); 48 } 49 50 //购买书籍(把要购买的商品加入购物车) 51 private void addCartByBook(HttpServletRequest request, 52 HttpServletResponse response) throws ServletException, IOException { 53 //获取数的id 54 String bookId = request.getParameter("bookId"); 55 //获取要购买的书 56 Book book = bService.findBookById(bookId); 57 //从HttpSession中取出购物车 58 HttpSession session = request.getSession(); 59 Cart cart = (Cart)session.getAttribute("cart"); 60 //没有:创建购物车,并放入到HttpSession中(购物车的car) 61 if(cart == null){ 62 cart = new Cart(); 63 session.setAttribute("cart",cart); 64 } 65 //有:把书放到购物车中 66 cart.addCart(book);//直接调用 实体类Cart中的addCart()方法 67 //提示加入购物车成功 68 request.setAttribute("message","<script type='text/javascript'>alert('加入购物车成功,请前去付款!')</script>"); 69 request.getRequestDispatcher("/index.jsp").forward(request, response); 70 } 71 72 public void doPost(HttpServletRequest request, HttpServletResponse response) 73 throws ServletException, IOException { 74 doGet(request, response); 75 } 76 }
3、前端页面
showCart.jsp 购物车的页面(简单测试,页面随意搞搞的,还看得过去吧)
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@include file="/client/header.jsp"%> 3 <style> 4 table tr th{ border:1px solid #C1C1C1; font-size: 16px;} 5 table,table tr td { border:1px solid #C1C1C1; } 6 table { width: 71%; min-height: 25px; line-height: 25px; border-collapse: collapse; padding:2px; margin:auto;text-align: center;} 7 </style> 8 9 <h2 style="text-align: center;font-size: 20px">您购买的商品如下</h2> 10 <c:if test="${empty sessionScope.cart.items}"> 11 <!-- 如果购物车为空(没商品),则显示这张图片,提示“购物车空空如也” --> 12 <img height="432" width="720" src="${pageContext.request.contextPath}/images/0.jpg"/> 13 </c:if> 14 <c:if test="${!empty sessionScope.cart.items}"> 15 <table> 16 <tr> 17 <th>书名</th> 18 <th>作者</th> 19 <th>单价</th> 20 <th>数量</th> 21 <th>小计</th> 22 <th>操作</th> 23 </tr> 24 <c:forEach items="${sessionScope.cart.items}" var="me"> 25 <tr> 26 <td>${me.value.book.name}</td> 27 <td>${me.value.book.author}</td> 28 <td>${me.value.book.price}</td> 29 <td>${me.value.num}</td> 30 <td>${me.value.price}</td> 31 <td> 32 <a href="${pageContext.request.contextPath}/ClientServlet?operation=deleteCartByBook&bookId=${me.value.book.id}">删除</a> 33 </td> 34 </tr> 35 </c:forEach> 36 <tr> 37 <td colspan="6" align="right"> 38 总数量:${sessionScope.cart.num} 39 应付款总金额:${sessionScope.cart.price} 40 <a href="${pageContext.request.contextPath}/ClientServlet?operation=genOrders" style="text-decoration: none;font-weight: bold;">付款购买</a> 41 42 </td> 43 </tr> 44 </table> 45 </c:if> 46 ${message}
效果图:
把购物车中的商品购买支付、生成订单(Servlet技术,简单演示)
原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:https://www.cnblogs.com/dshore123/p/10765588.html 欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!) |