商城项目中购物车是如何实现的
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了商城项目中购物车是如何实现的相关的知识,希望对你有一定的参考价值。
购物车实现cookie+redis
一、未登录状态下添加商品到购物车
1、在不登陆的情况下也可以添加购物车。把购物车信息写入cookie。
优点:
1、不占用服务端存储空间
2、用户体验好。
3、代码实现简单。
缺点:
1、cookie中保存的容量有限。最大4k
2、把购物车信息保存在cookie中,更换设备购物车信息不能同步
实现思路:
(1) 从cookie中获取商品列表信息(单独提出来写成个通用的方法)
(2) 遍历购物车列表,判断需要添加的商品在购物车列表是否存在
(3) 商品存在的话,那么取出该商品原来的数量+添加的数量作为该商品现在的数量
(4) 如果商品不存在,那么调用服务,根据传来的商品id查询商品数量,设置商品的数量为页面传来的数量,取商品的第一张图片(购物车列表只展示一张图片)。
(5) 把修改后的购物车列表重新存入到cookie中
(6) 返回逻辑视图”cartSuccess”
2、展示购物车列表
单击“去购物车结算按钮”向服务端发送请求,服务端应该返回逻辑视图”cart”
请求地址:8090/cart/cart.html
返回逻辑视图:”cart”也就是购物车列表页面
3、登录状态下购物车列表页面修改商品数量
购物车列表页面单击”+”,”-”会向服务端发送ajax请求。
页面需要根据调整的数量重新显示商品总计(已经实现了也就是输入框的值*价格)和小计(用js,待实现)
服务端要求修改cookie中对应商品的数量
4、未登录状态下删除购物车商品
(1)从cookie中获取购物车列表 (2)遍历,查找到要删除的商品 (3)将该商品从购物车列表移除 (4)更新后的购物车列表重新写入cookie (5)重定向到购物车列表页面
二、登录状态下购物车功能的实现
功能分析: 1、购物车数据保存的位置: 未登录状态下,把购物车数据保存到cookie中。 登录状态下,需要把购物车数据保存到服务端。需要永久保存,可以保存到数据 库中。可以把购物车数据保存到redis中。 2、redis使用的数据类型 a) 使用hash数据类型 b) Hash的key应该是用户id。Hash中的field是商品id,value可以是把商品信息转换成json 3、添加购物车 登录状态下直接把商品数据保存到redis中。 未登录状态保存到cookie中。 4、如何判断是否登录? a) 从cookie中取token b) 取不到未登录 c) 取到token,到redis中查询token是否过期。 d) 如果过期,未登录状态 e) 没过期登录状态。
实现:
1、登录拦截器 几乎在购物车所有功能执行 都要判断用户是否登录。利用aop思想,应该编写个拦截器,来判断用户是否登录。登录的话用户信息需要存在request域中 (1) 从cookie中取token (2) 判断token是否存在 (3) 不存在,说明用于未登录,放行 (4) 如果token存在,调用服务,根据token从redis中取用户信息 (5) 取不到用户信息,说明已经过期,放行 (6) 取到了用户信息,说明用户已经登录,用户信息存到request中 (7) 放行
2、登录状态下,商品添加功能实现
向redis中添加购物车
比未登录多一个登录判断而已
3、登录状态下,商品列表展示 分析: (1)从cookie中取购物车列表 (2)判断用户是否登录 (3)用户已经登录的话,则调用服务层,合并cookie中的列表和redis中的列表。存入到redis中。 (4)同时删除cookie中的购物车列表 (5)根据用户id,调用服务查询redis中所有的商品,返回购物车列表。 (6)未登录状态还是跟前面一样 (7)将列表绑定到参数,返回购物车列表页面
4、登录状态下修改购物车商品数量 分析 单击”+”,”-”修改商品的数量的时候,要求redis中该商品的数量发生改变 (1) 根据用户id,商品id从redis中取出对应的商品 (2) 设置商品的数量 (3) 该商品更新到redis中
5、登录状态下,删除购物车商品 分析 单击删除的时候,删除redis中该商品。重定向到列表页面 (1) 直接用jedisClient的del的方法根据用户id跟商品id 商品 (2) 返回成功
以上是关于商城项目中购物车是如何实现的的主要内容,如果未能解决你的问题,请参考以下文章
Java(SpringBoot)网上音乐商城项目(数据库+源码+论文《精品毕设》)实现了客户端音乐商品的浏览音乐分类查看音乐订单管理加入购物车以及后台管理员对用户商品信息订单管理