// 导入所需的包和类 package com.yj.web; import com.google.gson.Gson; // 用于将Java对象转换为JSON字符串 import com.yj.bean.Book; // 书籍实体类 import com.yj.bean.Cart; // 购物车实体类 import com.yj.bean.CartItem; // 购物车商品项实体类 import com.yj.service.BookService; // 书籍服务接口 import com.yj.service.impl.BookServiceImpl; // 书籍服务接口的实现类 import com.yj.utils.WebUtils; // 工具类,用于处理Web请求中的常见操作 import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.HashMap; import java.util.Map; // 定义一个Servlet类,用于处理与购物车相关的请求 public class CartServlet extends BaseServlet { // 创建一个书籍服务实例,用于访问书籍数据 private BookService bookService = new BookServiceImpl(); // 处理通过AJAX方式添加商品到购物车的请求 protected void ajaxAddItem(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 从请求中获取书籍ID,并转换为整数类型,默认为0 int id = WebUtils.parseInt(req.getParameter("id"), 0); // 根据书籍ID查询书籍信息 Book book = bookService.queryBookById(id); // 创建一个购物车商品项实例,数量为1,单价和总价均为书籍价格 CartItem cartItem = new CartItem(book.getId(), book.getName(), 1, book.getPrice(), book.getPrice()); // 从会话中获取购物车对象,如果不存在则创建一个新的购物车对象 Cart cart = (Cart) req.getSession().getAttribute("cart"); if (cart == null) { cart = new Cart(); req.getSession().setAttribute("cart", cart); } // 将商品项添加到购物车中 cart.addItem(cartItem); // 在会话中保存最后添加的商品名称(可能用于显示或提示) req.getSession().setAttribute("lastName", cartItem.getName()); // 准备返回给客户端的数据,包括购物车总数量和最后一个商品的名称 Map resultMap = new HashMap(); resultMap.put("totalCount", cart.getTotalCount()); resultMap.put("lastName", cartItem.getName()); // 使用Gson将Map对象转换为JSON字符串 Gson gson = new Gson(); String resultMapJsonString = gson.toJson(resultMap); // 将JSON字符串写入响应中 resp.getWriter().write(resultMapJsonString); } // 处理添加商品到购物车的请求(非AJAX方式) protected void addItem(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 以下代码与ajaxAddItem方法中的代码大致相同,只是最后返回的是页面重定向 int id = WebUtils.parseInt(req.getParameter("id"), 0); Book book = bookService.queryBookById(id); CartItem cartItem = new CartItem(book.getId(), book.getName(), 1, book.getPrice(), book.getPrice()); Cart cart = (Cart) req.getSession().getAttribute("cart"); if (cart == null) { cart = new Cart(); req.getSession().setAttribute("cart", cart); } cart.addItem(cartItem); req.getSession().setAttribute("lastName", cartItem.getName()); // 重定向到请求来源页面(通常是通过Referer头部获取的) resp.sendRedirect(req.getHeader("Referer")); } // 处理删除购物车中商品项的请求 protected void deleteItem(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 从请求中获取要删除的商品项ID int id = WebUtils.parseInt(req.getParameter("id"), 0); // 从会话中获取购物车对象 Cart cart = (Cart) req.getSession().getAttribute("cart"); // 如果购物车对象存在,则删除指定ID的商品项 if (cart != null) { cart.deleteItem(id); } // 重定向到请求来源页面 resp.sendRedirect(req.getHeader("Referer")); } // 处理清空购物车中所有商品项的请求 protected void clearItem(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 从会话中移除购物车对象,从而清空购物车 req.getSession().removeAttribute("cart"); // 重定向到请求来源页面 resp.sendRedirect(req.getHeader("Referer")); } // 处理修改购物车中商品项数量的请求 protected void updateCount(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 从请求中获取要修改的商品项ID和新的数量 int id = WebUtils.parseInt(req.getParameter("id"), 0); int count = WebUtils.parseInt(req.getParameter("count"), 1); // 从会话中获取购物车对象 Cart cart = (Cart) req.getSession().getAttribute("cart"); // 如果购物车对象存在,则修改指定ID的商品项数量 if (cart != null) { cart.updateCount(id, count); } // 重定向到请求来源页面 resp.sendRedirect(req.getHeader("Referer")); } }