技术标签: Cookie java cookie 购物车 ajax springmvc
在这里小小推荐下我的个人博客
csdn:雷园的csdn博客
个人博客:雷园的个人博客
简书:雷园的简书
导包:
import com.ambow.springboot.vo.CartVo;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
获取Cookie
/**
* 获取名为"cart"的cookie
*
* @param request
* @return cookie
*/
public Cookie getCookie(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
Cookie cart_cookie = null;
for (Cookie cookie : cookies) {
if ("cart".equals(cookie.getName())) { //获取购物车cookie
cart_cookie = cookie;
}
}
return cart_cookie;
}
获取Cookie中的购物车列表
/**
* 获取cookie中的购物车列表
*
* @param response
* @param request
* @return 购物车列表
* @throws UnsupportedEncodingException 抛出异常
*/
public List<CartVo> getCartInCookie(HttpServletResponse response, HttpServletRequest request) throws
UnsupportedEncodingException {
// 定义空的购物车列表
List<CartVo> items = new ArrayList<CartVo>();
String value_1st = "";
// 购物cookie
Cookie cart_cookie = getCookie(request);
// 判断cookie是否为空
if (cart_cookie != null) {
// 获取cookie中String类型的value
value_1st = URLDecoder.decode(cart_cookie.getValue(), "utf-8");//从cookie获取购物车
// 判断value是否为空或者""字符串
if (value_1st != null && !"".equals(value_1st)) {
// 解析字符串中的数据为对象并封装至list中返回给上一级
String[] arr_1st = value_1st.split("==");
for (String value_2st : arr_1st) {
String[] arr_2st = value_2st.split("=");
CartVo item = new CartVo();
item.setGoodsId(Integer.parseInt(arr_2st[0])); //商品id
item.setGoodsTypeId(Integer.parseInt(arr_2st[1])); //商品类型ID
item.setGoodsName(arr_2st[2]); //商品名
item.setGoodsPrice(Integer.parseInt(arr_2st[3])); //商品市场价格
item.setGoodsDiscount(Integer.parseInt(arr_2st[4]));//商品折后价格
item.setGoodsNum(Integer.parseInt(arr_2st[5]));//商品月销量
item.setGoodsInfo(arr_2st[6]);//商品详情
item.setNum(Integer.parseInt(arr_2st[7]));//加入购物车数量
items.add(item);
}
}
}
return items;
}
制作cookie所需value
/**
* 制作cookie所需value
*
* @param cartVos 购物车列表
* @return 解析为字符串的购物车列表,属性间使用"="相隔,对象间使用"=="相隔
*/
public String makeCookieValue(List<CartVo> cartVos) {
StringBuffer buffer_2st = new StringBuffer();
for (CartVo item : cartVos) {
buffer_2st.append(item.getGoodsId() + "=" + item.getGoodsTypeId() + "=" + item.getGoodsName() + "="
+ item.getGoodsPrice() + "=" + item.getGoodsDiscount() + "=" + item.getGoodsNum() + "=" + item
.getGoodsInfo() + "=" + item.getNum() + "==");
}
return buffer_2st.toString().substring(0, buffer_2st.toString().length() - 2);
}
添加,删除,清空购物车方法
/**
* 根据ID删除删除购物车内的商品
*
* @param goodsId 商品ID
* @param request
* @param response
* @return 成功与否
* @throws UnsupportedEncodingException 抛出异常
*/
@RequestMapping("/deleteByGoodsId/{goodsId}")
public String deleteByGoodsId(@PathVariable("goodsId") Integer goodsId, HttpServletRequest request,
HttpServletResponse response) throws UnsupportedEncodingException {
// 获取cookie中购物车列表
List<CartVo> cartVos = getCartInCookie(response, request);
CartVo deleteCart = null;
// 判断购物车列表是否为空
if (cartVos.size() > 0) {
// 循环购物车列表寻找相同ID的商品
for (CartVo c : cartVos) {
if (c.getGoodsId().equals(goodsId)) {
deleteCart = c;
break;
}
}
// 判断是否找到相同ID的商品
if (deleteCart != null) {
// 判断购物车中商品的数量
if (deleteCart.getNum() > 1) {
// 数量大于1增让数量-1
deleteCart.setNum(deleteCart.getNum() - 1);
cartVos.remove(deleteCart);
cartVos.add(deleteCart);
} else {
// 否则直接删除该商品在购物车中的信息
cartVos.remove(deleteCart);
}
// 获取名为"cart"的cookie
Cookie cookie = getCookie(request);
// 为cookie设置value
cookie.setValue(URLEncoder.encode(makeCookieValue(cartVos), "utf-8"));
// 设置寿命
cookie.setMaxAge(60 * 10);
// 设置路径
cookie.setPath("/");
// 更新cookie
response.addCookie(cookie);
}
}
return "success";
}
/**
* 清空购物车
*
* @param response
* @param request
* @return 成功与否
*/
@RequestMapping("/deleteAllCookie")
public String deleteCookie(HttpServletResponse response, HttpServletRequest request) {
// 获取名为"cart"的cookie
Cookie cookie = getCookie(request);
// 设置寿命为0秒
cookie.setMaxAge(0);
// 设置路径
cookie.setPath("/");
// 设置cookie的value为null
cookie.setValue(null);
// 更新cookie
response.addCookie(cookie);
return "success";
}
/**
* 获取购物车列表
*
* @param request
* @param response
* @return 购物车列表
* @throws UnsupportedEncodingException 抛出异常
*/
@RequestMapping("/getCart")
public List<CartVo> getCart(HttpServletRequest request, HttpServletResponse response) throws
UnsupportedEncodingException {
return getCartInCookie(response, request);
}
/**
* 添加商品至购物车列表
*
* @param goodsId 商品ID
* @param request
* @param response
* @throws UnsupportedEncodingException 异常抛出
*/
@RequestMapping("/addGoodsToCart/{goodsId}")
public void addGoodsToCart(@PathVariable("goodsId") Integer goodsId, HttpServletRequest request,
HttpServletResponse response) throws UnsupportedEncodingException {
// 从cookie中获取购物车列表
List<CartVo> cartVos = getCartInCookie(response, request);
Cookie cookie_2st;
// 如果购物车列表为空
if (cartVos.size() <= 0) {
//TODO 根据商品ID获取商品信息
CartVo cartVo = new CartVo(); // 测试用,实际应当根据id获取
cartVo.setNum(1);
cartVo.setGoodsId(1);
cartVo.setGoodsNum(1);
cartVo.setGoodsTypeId(1);
cartVo.setGoodsPrice(1);
cartVo.setGoodsDiscount(1);
cartVo.setGoodsName("雷园");
// 将当前传来的商品添加到购物车列表
cartVos.add(cartVo);
if (getCookie(request) == null) {
// 制作购物车cookie数据
cookie_2st = new Cookie("cart", URLEncoder.encode(makeCookieValue(cartVos), "utf-8"));
cookie_2st.setPath("/");//设置在该项目下都可以访问该cookie
cookie_2st.setMaxAge(60 * 30);//设置cookie有效时间为30分钟
response.addCookie(cookie_2st);//添加cookie
} else {
cookie_2st = getCookie(request);
cookie_2st.setPath("/");//设置在该项目下都可以访问该cookie
cookie_2st.setMaxAge(60 * 30);//设置cookie有效时间为30分钟
cookie_2st.setValue(URLEncoder.encode(makeCookieValue(cartVos)));
response.addCookie(cookie_2st);//添加cookie
}
}
// 当获取的购物车列表不为空时
else {
int bj = 0;
for (CartVo cart : cartVos) {
// 如果购物车中存在该商品则数量+1
if (cart.getGoodsId() == goodsId) {
cart.setNum(cart.getNum() + 1);
bj = 1;
break;
}
}
if (bj == 0) {
//TODO 根据商品ID获取商品信息
CartVo cartVo = new CartVo(); // 测试用,实际应当根据id获取
cartVo.setNum(1);
cartVo.setGoodsId(goodsId);
cartVo.setGoodsNum(1);
cartVo.setGoodsTypeId(1);
cartVo.setGoodsPrice(1);
cartVo.setGoodsDiscount(1);
cartVo.setGoodsName("雷园");
// 将当前传来的商品添加到购物车列表
cartVos.add(cartVo);
}
// 获取名为"cart"的cookie
cookie_2st = getCookie(request);
cookie_2st.setPath("/");//设置在该项目下都可以访问该cookie
cookie_2st.setMaxAge(60 * 30);//设置cookie有效时间为30分钟
cookie_2st.setValue(URLEncoder.encode(makeCookieValue(cartVos))); // 设置value
response.addCookie(cookie_2st);//添加cookie
}
}
文章浏览阅读77次。为什么80%的码农都做不了架构师?>>> ..._jprofiler6 key
文章浏览阅读170次。(可以看出递归算法更加侧重于计算的技巧,并且计算机计算的次数也相对更少);_c语言程序设计第四版课后题答案苏小红第七章
文章浏览阅读3.8k次。[PyTorch小试牛刀]实战六·准备自己的数据集用于训练(基于猫狗大战数据集)在上面几个实战中,我们使用的是Pytorch官方准备好的FashionMNIST数据集进行的训练与测试。本篇博文介绍我们如何自己去准备数据集,以应对更多的场景。我们此次使用的是猫狗大战数据集,开始之前我们要先把数据处理一下,形式如下datas│└───train│ ││ └───cats│ ..._pytorch入门与实践 dogsvscats pycharm运行
文章浏览阅读968次,点赞3次,收藏4次。CS61C 主要内容为计算机组成原理,重难点是实验(Lab)和项目(Project),当然课程的精华也是实验和项目。本文是对 CS61C 的实验进行分析思考和总结,为项目做好铺垫。_cs61c
文章浏览阅读6.5k次。//分别指图片文本public GameObject imageKongLong;public GameObject imageQiang;void Start () {}void Update () {}//进入触发器public void OnTriggerEnter(Collider other){if (other.gameObject.tag == “konglong..._unity 进入一个触发器内部
文章浏览阅读989次。前言整理一下经常使用到的模块一、加密模块pyarmor在公司上班的时候,有一次要发布python代码,设计到对代码的保密,需要进行加密。因此对python代码加密需要用到pyarmor模块。先进行安装pyarmor 模块pip install pyarmor 默认安装到全局。安装完就可以加密了,我这里通过案例进行笔记。实例 1: 加密脚本# 使用 obfuscate 加密路径 `examples/simple` 的下面的所有脚本pyarmor obfuscate --recursive e_pyarmor使用
文章浏览阅读2.5k次,点赞3次,收藏20次。阿里云服务器 docker 安装 mysql nacos 与踩坑一、安装dockerdocker 的使用文档 在 CentOS | 上安装 Docker 引擎Docker 文档1.卸载旧版本的docker(如果是新的服务器可以跳过) sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ _阿里云安装nacos
文章浏览阅读3.6k次。新钛云服已为您服务1048天大咖专栏什么是Bcache?HDD一般具有较大的容量,并且可以实现良好的顺序读和写操作,但是在随机写和读时非常慢,因此它们的IOPS级别较低;SSD具有非常好的..._bcache
文章浏览阅读243次。php网页抓取乱码的解决办法:1、使用“mbconvertencoding”转换编码;2、设置添加“curl_setopt($ch, CURLOPT_ENCODING, 'gzip');”选项;3、在顶部增加header代码。推荐:《PHP视频教程》php 抓取页面乱码在抓取页面的时候出现类似�������这样乱码解决方法如下1、转换编码str=mbconvertencoding(str, “ut..._php 爬取gb2312格式网站下载乱码
文章浏览阅读117次。账号和口令禁用或删除无用账号减少系统无用账号,降低安全风险。操作步骤cat /etc/shadow 查看有多少账户 使用命令 userdel <用户名> 删除不必要的账号。 使用命令 passwd -l <用户名> 锁定不必要的账号。 使用命令 passwd -u <用户名> 解锁必要的账号。检查特殊账号检查是否存在空口令和root权限的账号。操作步骤查看空口令和root权限账号,确认是否存在异常账号: ...
文章浏览阅读800次。【前端面试】前端面试题—2021年web前端开发面试题本文章作为2021届应届毕业生在实习面试期间所接受的前端面试的面试题。2021年最新面试题CSS盒子模型的要素 ,https://www.cnblogs.com/clearsky/p/5696286.html;CSS中常用伪元素选择符;Position属性四个值:static、fixed、absolute和relative的区别和用法 ;解释CSS样式中display中inline、block、inline-block的区别 ;var和l_2021年资深前端工程师面试题
文章浏览阅读1k次。博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html目录:零:写在前面的一些废话 一、R眼看琅琊榜的基本原理 1、导入数据 2、筛选数据 3、多条件筛选对话 4、导出数据 二、R眼看琅琊榜的基础分析 1、快速对文本分章节 2、快速定位人物出场章节 3、快速定位人物互动章节 三、总结..._sa=sample(1: length)