jsp实现购物车功能总结

原文:

https://www.cnblogs.com/wang-meng/p/5854773.html

今天来写一下关于购物车的东西, 这里首先抛出四个问题:

1)用户没登陆用户名和密码,添加商品, 关闭浏览器再打开后 不登录用户名和密码

问:购物车商品还在吗?

2)用户登陆了用户名密码,添加商品,关闭浏览器再打开后 不登录用户名和密码

问:购物车商品还在吗?

3)用户登陆了用户名密码,添加商品, 关闭浏览器,然后再打开,登陆用户名和密码

问:购物车商品还在吗?

4)用户登陆了用户名密码,添加商品, 关闭浏览器 外地老家打开浏览器 登陆用户名和密码

问:购物车商品还在吗?

上面四个问题都是以京东为模板, 那么大家猜猜结果是什么呢?

1)在

2)不在了

3)在

4)在

如果你能够猜到答案, 那么说明你真的很棒, 那么关于这四点是怎么实现的呢? (如果有不认可的小伙伴可以用京东实验一下)

下面我们就来讲解下购物车的原理,最后再来说下具体的code实现.

1)用户没有登录, 添加商品, 此时的商品是被添加到了浏览器的Cookie中, 所以当再次访问时(不登录),商品仍然在Cookie中, 所以购物车中的商品还是存在的.

2)用户登录了,添加商品, 此时会将Cookie中和用户选择的商品都添加到购物车中, 然后删除Cookie中的商品. 所以当用户再次访问(不登录),此时Cookie中的购物车商品已经被删除了, 所以此时购物车中的商品不在了.

3)用户登录, 添加商品,此时商品被添加到数据库做了持久化存储, 再次打开登录用户名和密码, 该用户选择的商品肯定还是存在的, 所以购物车中的商品还是存在的.

4)理由3)

这里再说下 没登录 保存商品到Cookie的优点以及保存到Session和数据库的对比:

1:Cookie: 优点: 保存用户浏览器(不用浪费我们公司的服务器) 缺点:Cookie禁用,不提供保存

2:Session:(Redis : 浪费大量服务器内存:实现、禁用Cookie) 速度很快

3:数据库(Mysql、Redis、SOlr) 能持久化的就数据库 速度太慢

那么我今天要讲的就是:

  • 用户没登陆:购物车添加到Cookie中
  • 用户登陆: 保存购物车到Redis中 (不用数据库)

整体的思路图解:

jsp实现购物车功能总结

接下来就是代码实例来实现 购物车的功能了:

首先我们看下购物车和购物项两个JavaBean的设计:

购物车: buyerCart.java

jsp实现购物车功能总结

jsp实现购物车功能总结

jsp实现购物车功能总结

这里使用了@JsonIgonre注解是因为下面需要将BuyerCart 转换成Json格式, 而这几个字段只有get 方法, 所以不能转换, 需要使用忽略Json.

下面是购物项: buyerItem.java

jsp实现购物车功能总结

jsp实现购物车功能总结

1、将商品加入购物车中

jsp实现购物车功能总结

jsp实现购物车功能总结

这里传入的参数是skuId(库存表的主键, 库存表保存的商品id,颜色,尺码,库存等信息), 购买数量amount.

接着我们来看Controller是如何来处理的:

jsp实现购物车功能总结

jsp实现购物车功能总结

jsp实现购物车功能总结

这里设计一个知识点: 将对象转换成json字符串/json字符串转成对象

我们在这里先写一个小的Demo来演示json和对象之间的互转, 这里使用到了springmvc中的ObjectMapper类.

jsp实现购物车功能总结

执行结果:

jsp实现购物车功能总结

这里我们使用了Include.NON_NULL, 如果TestTb 中属性为null 的就不给转换成Json, 从对象–>Json字符串 用的是 objectMapper.writeValue(). 从Json字符串–>对象使用的是objectMapper.readValue().

回归上面我们项目中的代码, 只有未登录 添加商品时才会将此商品添加到Cookie中.

jsp实现购物车功能总结

我们debug 可以看到:

jsp实现购物车功能总结

这里已经将对象购物车对象buyerCart转换成了Json格式.

将商品添加到购物车, 不管是登录还是未登录, 都要先取出Cookie中的购物车, 然后将当前选择的商品追加到购物车中.

然后登录的话 就把Cookie中的购物车清空, 并将购物车的内容添加到Redis中做持久化保存.

如果未登录, 将选择的商品追加到Cookie中.

将购物车追加到Redis中的代码:insertBuyerCartToRedis(这里面包含了判断添加的是否是同款)

jsp实现购物车功能总结

判断用户是否登录: String username =

sessionProviderService.getAttributterForUsername(RequestUtils.getCSessionId(request, response));

jsp实现购物车功能总结

jsp实现购物车功能总结

2、购物车展示页面

最后 重定向到购物车展示页: return “redirect:/shopping/toCart”; 这里进入结算页有两种方式:

1) 在商品详情页 点击加入购物车.

2) 直接点击购物车按钮 进入购物车结算页.

下面来看下结算页的代码:

jsp实现购物车功能总结

jsp实现购物车功能总结

这里 就是 购物车详情展示页面, 这里需要注意, 如果是同一件商品连续添加, 是需要合并的.

购物车详情展示页面就包括两大块, 1) 商品详情 2)总计(商品总额,运费)

其中1)商品详情又包括 商品尺码,商品颜色, 商品购买数量, 是否有货.

jsp实现购物车功能总结

取出Redis中的购物车: buyerCart = cartService.selectBuyerCartFromRedis(username);

jsp实现购物车功能总结

将购物车装满, 前面只是将skuId装进购物车, 这里还需要查出sku详情: List<BuyerItem> items = buyerCart.getItems();

buyerItem.setSku(cartService.selectSkuById(buyerItem.getSku().getId()));

jsp实现购物车功能总结

接着就返回”cart.jsp”, 这个就是购物车详情展示页面了.

3、去结算页面

到了这里就说明用户必须要 登录, 而且购物车中必须要有商品.

所以这里我么你需要利用springmvc的过滤功能, 用户点击结算的时候必须要先登录, 如果没有登录的话就提示用户需要登录.

jsp实现购物车功能总结

jsp实现购物车功能总结

取出 所指定的购物车, 因为我们结算之前在购物车详情页面会勾选 我们 需要购买的商品, 所以这里是根据所勾选的商品去结算的.

BuyerCart buyerCart = cartService.selectBuyerCartFromRedisBySkuIds(skuIds, username);

从购物车中取出指定商品:

jsp实现购物车功能总结

1) 当我们购买的商品只要有一件是无货的状态, 那么刷新购物车详情页面, 回显无货的商品状态.

2)当购物车中午商品时, 刷新当前页面.

购物车就这么多东西, 可能有讲解不到或者错误的地方, 欢迎大家指出来.如果对你有帮助的话也请点个赞支持一下,谢谢~

本文【jsp实现购物车功能总结】由作者: 自旋锁 提供,本站不拥有所有权,只提供储存服务,如有侵权,联系删除!
本文链接:https://www.cuoshuo.com/blog/4485.html

(0)
上一篇 2023-03-13 09:03:34
下一篇 2023-03-14 08:30:08

相关推荐

  • jsp注释方法_jsp调用Java中的一个方法

    前言:在CGI(通用网关接口)编程风行的日子,人们纷纷寻思简化并让其更加灵活的新方法和新技术,包括PHP、JSP、ASP。1997年SUN公司推出了servlet,1999年初,SUN公司推出了JSP,实际上在servlet基础上修改而成。JSP即Java服务器页面(Java Server Page),将HTML和JAVA代码使用某种方式结合起来,完成前后端…

    2023-03-09
    300
  • java服务器文件互传数据(jsp上传文件到服务器)

    对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件。这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文…

    2023-03-12
    300
  • 解析xml时,需要校验节点是否闭合

    XML的简介 定义 HTML:超文本标记语言 XML:eXtensible Markup Language 可扩展标记语言 version=”1.0″ 可扩展:所有的标签都是自定义的。 功能:数据存储 配置文件(最主要的使用场景) 数据传输(一般不使用xml做数据传输,而使用json代替) html与xml区别: html语法松散,x…

    2023-03-21
    000
  • 二级c语言程序设计用什么软件_二级C语言程序设计

    全国计算机等级考试二级C语言题库【历年真题+章节题库+模拟试题】 章节目录 第一部分 历年真题 全国计算机等级考试《二级C语言程序设计》真题及详解(一) 全国计算机等级考试《二级C语言程序设计》真题及详解(二) 全国计算机等级考试《二级C语言程序设计》真题及详解(三) 全国计算机等级考试《二级C语言程序设计》真题及详解(四) 全国计算机等级考试《二级C语言程…

    2023-03-11
    400
  • php文件用什么软件打开

    做技术的应该都知道,大部分文本类文件都可以用记事本打开,比如js文件、php文件、log文件、py文件、json文件、xml文件等等。但是你需要先“鼠标右键”,然后找到“打开方式”,才能找到“用记事本打开”,下面教大家直接把它给添加到右键中: 新建一个txt文件,复制下方的代码到其中,然后保存关闭。 Windows Registry Editor Versi…

    2023-03-14
    300
  • 嵌入式家电是什么意思

    现代家居美学讲究严谨,家电流行嵌入式风格,尤其是要严丝合缝才算做得好。其实最难做嵌入式安装的就是冰箱,安装上突出一块儿或者两侧留缝都不太好。如何选择一款合适的嵌入式冰箱正成为需求新的需求趋势。 正装修或打算装修的业主们不要急,TCL冰洗将在2月21日召开春季发布会将会发布超薄零嵌系列冰箱,据说能轻松做到无缝嵌入哦。 先来问大家一个问题:你认为的“嵌入式”冰箱…

    2023-03-20
    000
  • mysql安装教程环境配置_完整版MySQL安装配置

    简介:Mysql是最流行的关系型数据库管理系统,Mysql是一款优秀的web管理方面的 RDBMS(Relational Database Management System:关系数据库管理系统)应用工具。现在大多数软件系统使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念…

    2023-03-10
    600
  • mcafee企业版如何监控员工(360企业版能监控哪些东西)

    企业会想知道员工每天都使用了哪些应用程序,并且是否把时间都用在了工作上,那么如何监控员工电脑软件的使用情况? 您可以使用以下方法之一来监视计算机上的软件使用: Windows内置功能 计算机监控软件 1. WINDOWS内置功能 Windows中有一个内置功能,例如Windows日志。可以使用Windows事件查看器查看Windows日志。 优点: 显示访问…

    2023-03-13
    400
  • 平面设计经典实例教程

    构图是平面设计的必修课,怎样安排元素字体的大小、位置和关系?才能够突出主题,又显得生动有冲击力? 构图其实就是把所有元素有机地组织在一个画面里面,使之形成一个统一的整体。 对称构图就是把版面一分为二,可分为上下或者左右对称,画面给人平衡的感觉,结构平衡,相互对应,具有稳定、呼吸、相对的特点,可以使得画面显得安静、庄严。缺点是容易呆板、缺少变化。 主物体位于画…

    2023-03-17
    000
  • 数据库技术基础

    针对上期的SQL基本知识后,准备给大家介绍一下Mysql的数据库的基础操作 一、SQL语法规则 概念: SQL是一种结构化编程语言 基础SQL指令通常是以行为单位 SQL指令需要语句结束符,默认是英文分号: ; \g \G SQL指令类似自然语言 编写的SQL中如果用到了关键字或者保留字,需要使用反引号''来包裹,让系统忽略 示例: 1、…

    2023-03-09
    800

发表回复

登录后才能评论
返回顶部
错说博客上线啦!