Java Web 网络商城案例演示十三(抽取购物车模块,实现购物车功能)
发布日期:2021-06-29 15:01:22 浏览次数:2 分类:技术文章

本文共 7394 字,大约阅读时间需要 24 分钟。

Java Web 网络商城案例演示十三(抽取购物车模块)

一、抽取购物车模型

在这里插入图片描述

在这里插入图片描述
购物项:(图片路径,商品名称,商品价格,这类商品购买的数量,这类商品的总价小计)

class Cartitem{
private Product product;//携带图片的路径,商品的名称,以及商品的价格 private int num;//当前类别的商品的数量 priavte double subTotal;// 小计,当前这类商品的总共的价格 经过计算获取到}

购物车(个数不确定的购物项):

class Cart{
//List list = new ArrayList(); 个数不确定的购物项 //Map map = new HashMap(); 个数不确定的购物项 double total;//总计 积分 可以经过计算获取到 //方法:清空购物车 //方法:移除购物车上的购物项 //方法:添加商品到购物车 }

红色小框抽取为一类事务,购物项(类别)

抽取商品项的类

package cn.itzheng.store.domain;public class CartItem {
private Product product;// 目的就是携带购物项3种参数的(图片的路径,商品的名称,商品的价格) private int num;// 当前类别商品数量 private double subTotal;// 小计 //小计是经过计算可以获取到的 public Product getProduct() {
return product; } public void setProduct(Product product) {
this.product = product; } public int getNum() {
return num; } public void setNum(int num) {
this.num = num; } public double getSubTotal() {
return product.getShop_price() * num; } public void setSubTotal(double subTotal) {
this.subTotal = subTotal; } public CartItem() {
// TODO Auto-generated constructor stub } public CartItem(Product product, int num, double subTotal) {
super(); this.product = product; this.num = num; this.subTotal = subTotal; } @Override public String toString() {
return "CartItem [product=" + product + ", num=" + num + ", subTotal=" + subTotal + "]"; }}

抽取购物车Cart

Cart (map类型)

package cn.itzheng.store.domain;//2个属性3个方法public class Cart {
// 总计/积分 private double total = 0; // 个数不确定的购物项 键商品的pid《=====》cartItem Map
map = new HashMap
(); // 添加购物项到购物车 // 当用户点击加入购物车按钮,可以将当前要购买的商品和商品的id和商品的数量发送到服务端,服务端根据商品的id查询到商品的信息 // 有了商品的信息Product对象,有了要购买商品的数量,当前的购物项也就可以获取到了 public void addCartItemToCar(CartItem cartItem) {
// 获取到从前端购物车传入的cartIte对象当中的的Product对象当中Pid对象 String pid = cartItem.getProduct().getPid(); // 将当前购物项加入购物车之前,判断之前是否买过这类商品 // 如果没有买过 list.add(); // 如果买过:获取到原先的数量,获取到本次的数量,相加之后设置到原先购物项上 if (map.containsKey(pid)) {
// 查看当前map集合当中有没有和传递进来的pid相同的key // 获取到原先的购物项 CartItem oldItem = map.get(pid); oldItem.setNum(oldItem.getNum() + cartItem.getNum()); } else {
// 如果没有对应的key对应pid的话说明之前没有商品 map.put(pid, cartItem);// 将该商品放入到map对象集合当中 } } // 移除购物项 public void removeCartItem(String pid) {
map.remove(pid); } // 用户点击移除购物项的链接的时候,可以将当前的的购物类别的商品的id发送到服务端 // 清空购物车 public void clearCart() {
map.clear(); } // 总计是可以经过计算获取到 public double getTotal() {
//向让总计清零 total=0; // 获取到Map集合中所有的购物项 Collection
values = map.values(); // 遍历所有的购物项,将购物项上的小计相加 for (CartItem cartItem : values) {
total += cartItem.getSubTotal(); } return total;// 返回的是所有价格的总和 } public void setTotal(double total) {
this.total = total; } public Map
getMap() {
return map; } public void setMap(Map
map) {
this.map = map; }}

Cart (list类型)

//2个属性3个方法public class Cart02 {
// 总计/积分 private double total; //个数不确定的购物项 private List
list = new ArrayList(); // 添加购物项到购物车 // 当用户点击加入购物车按钮,可以将当前要购买的商品和商品的id和商品的数量发送到服务端,服务端根据商品的id查询到商品的信息 // 有了商品的信息Product对象,有了要购买商品的数量,当前的购物项也就可以获取到了 public void addCartItemToCart(CartItem cartItem) {
// 将当前的购物项加入购物车之前,判断之前是否买过这一类商品 // 如果没有买过 list.add(cartItem);//将相应商品对应的类放入到集合当中 // 如果买过:获取到原先的数量,获取到本次的要购买的数量,相加之后再设置到原先的购物项上 // 设置变量,默认为false,没有购买过商品 boolean flag = false; //存储原先购物项 CartItem old = null; //遍历的是已经存在的商品的list集合 for (CartItem cartItem2 : list) {
// 遍历list集合当中的CartItem对象 //判断传入的CartItem的product当中pid和之前list当中CartItem的product当中的pid是否相同 if (cartItem2.getProduct().getPid().equals(cartItem.getProduct().getPid())) {
flag=true; //如果相等说明之前有这个旧商品赋值给对应的商品赋值给CartItem old old=cartItem2; } } //如果flag是false的话,说明没有与之前list集合当中对象的pid重复的就直接将传入进来的商品项传入到 if(flag == false) {
//之前没有这个商品 list.add(cartItem);//将新的商品添加到旧商品的list集合当中 }else {
//之前有这个商品 //获取到原先的数量和现在的数量 old.setNum(old.getNum()+cartItem.getNum());//获取到原先该商品的数量加上 } } // 移除购物项 // 用户点击移除购物项的链接的时候,可以将当前的的购物类别的商品的id发送到服务端 public void removeCartItem(String pid) {
// 遍历List,看每个CartItem上的product对象上的id是否和服务端获取到的pid相等,如果相等,删除当前的购物项 for (CartItem cartItem : list) {
if (cartItem.getProduct().getPid().equals(pid)) {
// 删除当前的cartItem // 直接调用list.remove(cartItem); 无法删除当前的cartItem,需要通过迭代器来删除当前的购物项 } } } // 清空购物车 public void clearCart() {
list.clear();// 将list集合当中的数据全部清空 }}

二、将商品添加到购物车

1、购物车内存分析

在这里插入图片描述
2、添加购物项到购物车的原理分析
在这里插入图片描述
3、步骤实现
1、准备工作
/jsp/product_list.jsp 修改链接

在这里插入图片描述

/jsp/product_info.jsp
创建一个from表单,设置from method,action的各自属性

在这里插入图片描述

设置隐藏域,通过隐藏域向服务器端传递商品的pid

在这里插入图片描述

通过js的方式提交表单(如果一个表单当中有多个按钮可以实现不同的按钮向不同的地方提交信息)
javascript:void(0)取消链接默认行为

在这里插入图片描述

加入购物车的功能

在这里插入图片描述

三、功能实现

1、添加商品到购物车

1、创建CartServlet

public class CartServlet extends BaseServlet {
// 添加购物项到购物车 public String addCartItemToCart(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 从session当中获取购物车 Cart cart = (Cart) request.getSession().getAttribute("cart"); if (cart == null) {
// 如果获取不到,创建购物车对象,放置到session当中 cart = new Cart(); request.getSession().setAttribute("cart", cart); } // 如果从session当中获取到cart,使用即可 // 获取到页面点击加入购物车按钮商品的id,数量 String pid = request.getParameter("pid");// 获取表单提交的pid int num = Integer.parseInt(request.getParameter("quantity"));// 获取表单提交的商品数量 // 通过商品id查询商品对象 ProductService productService = new ProductServiceImpl(); Product product = productService.findProductByPid(pid); // 获取到待购买的购物项 CartItem cartItem = new CartItem(); cartItem.setNum(num); cartItem.setProduct(product); //调用购物车上的方法 ,将查询到商品对象放入到购物车当中 cart.addCartItemToCar(cartItem); //重定向到购物车界面 response.sendRedirect("/store_v5/jsp/cart.jsp"); return null; }}

2、/jsp/cart.jsp 获取购物车上的商品信息

cart.cartItems获取对应方法返回的map集合的内容

//判断map集合当中是否有对应的值,现在是判断没有的话
//判断map有对应的值的情况

在这里插入图片描述

在这里插入图片描述
代码详情如下

<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
购物车
<%@ include file="/jsp/header.jsp"%>

开启剁手模式

订单详情
图片 商品 价格 数量 小计 操作
${ item.product.pname} ${ item.product.shop_price} ¥${ item.subTotal } 删除
登录后确认是否享有优惠   赠送积分:
${
cart.total }
  商品金额:
¥${
cart.total }元
我们的优势

知识拓展:

重定向/转发
区别是:
1、一次还是两次请求响应request域数据丢失
2、路径显示的问题
3、第二次访问的位置
4、

3、向服务端发送要删除对象的pid(删除功能)

2、删除商品

原理分析:

在这里插入图片描述
准备工作:
1、为购物车上的删除链接绑定了点击事件,点击事件

删除

在这里插入图片描述

在这里插入图片描述

2、CartServlet—>removeCartItem
获取待删除的商品
获取 到购物车
调用购物车删除购物项方法
重定向到/jsp/cart.jsp

3、清空购物车

1、原理分析:

在这里插入图片描述
2、步骤实现
1、准备工作:在清空购物车的链接上调用CartServlet当中的clearCart方法

清空购物车

在这里插入图片描述

// clearCart	public String clearCart(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 从session当中获取到购物车 Cart cart = (Cart) request.getSession().getAttribute("cart"); // 调用购物车上的情况购物车的方法 cart.clearCart();//清空session当中cart对象map集合的所有内容 // 重新定向到/jsp/cart.jsp response.sendRedirect("/store_v5/jsp/cart.jsp"); return null; }

获取到session当中的所有的cart对象当中方法清空map集合当中的所有内容

重定向到/jsp/cart.jsp页面
在这里插入图片描述

转载地址:https://code100.blog.csdn.net/article/details/105009156 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java Web 网络商城案例演示十二(查询类别下的商品信息)
下一篇:Java Web 网络商城案例演示十一(商品分页)

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月27日 14时05分23秒