前言

一个基于Cookie的购物车实现

话不多说,直接上代码


导包

import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

制作cookie需要的value

    public static String makeCookieValue(List<购物车POJO> pojos, 购物车POJO pojo) {
JSONArray array = new JSONArray();
if (pojos.size() <= 0) {
JSONObject json = new JSONObject();
json.put("key", pojo.getXX());
array.add(json);
} else {
List<Integer> ids = new ArrayList<Integer>();
for (购物车pojo item : pojos) {
JSONObject json = new JSONObject();
json.put("key", pojo.getXX());
array.add(json);
ids.add(item.getId());
}
if (!ids.contains(pojo.getId())) {//新添加进来的产品信息如果购物车中已存在就不进行重封装
JSONObject json = new JSONObject();
json.put("key", pojo.getXX());
array.add(json);
}
}
return array.toString();
}
//购物车商品重新封装
public static String makeCookieValue(List<Cart> cart) {
JSONArray array = new JSONArray();
for (Cart item : cart) {
JSONObject json = new JSONObject();
json.put("id", item.getId());
json.put("name", item.getName());
json.put("fileName", item.getFileName());
json.put("price", item.getPrice());
json.put("num", item.getNum());
array.add(json);
}
return array.toString();
}

获取名为cart的购物车

    public static 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中的购物车列表

    public static List<购物车POJO> getCartInCookie(HttpServletResponse response, HttpServletRequest request)throws UnsupportedEncodingException {
// 定义空的购物车列表
List<购物车POJO> items = new ArrayList<购物车POJO>();
String value = "";
// 购物cookie
Cookie cart_cookie = getCookie(request);
// 判断cookie是否为空
if (cart_cookie != null) {
// 获取cookie中String类型的value
value = URLDecoder.decode(cart_cookie.getValue(), "utf-8");// 从cookie获取购物车
// 判断value是否为空或者""字符串
if (value != null && !"".equals(value)) {
JSONArray array = JSONArray.fromObject(value);
// 解析字符串中的数据为对象并封装至list中返回给上一级
for (int i = 0; i < array.size(); i++) {
JSONObject json = JSONObject.fromObject(array.get(i));
购物车POJO pojo = new 购物车POJO();
pojo.setXX(json.get("key"));
items.add(cartVo);
}
}
}
return items;
}

添加商品到购物车

    public void addCart(){
try {
//获取cookie中购物车
List<购物车POJO> pojos = getCartInCookie(response, request);
Cookie cookie;
// 如果购物车列表为空
if (pojos.size() <= 0) {
// 将当前传来的商品添加到购物车列表
//如果cookie中没有名为cart的key
if (getCookie(request) == null) {
// 制作购物车cookie数据
cookie = new Cookie("cart",URLEncoder.encode(makeCookieValue(pojos, 购物车POJO), "utf-8"));
cookie.setPath("/");// 设置在该项目下都可以访问该cookie
cookie.setMaxAge(60 * 30);// 设置cookie有效时间为30分钟
response.addCookie(cookie);// 添加cookie
} else {
cookie = getCookie(request);
cookie_2st.setPath("/");// 设置在该项目下都可以访问该cookie
cookie_2st.setMaxAge(60 * 30);// 设置cookie有效时间为30分钟
cookie_2st.setValue(URLEncoder.encode(makeCookieValue(pojos, 购物车POJO)));
response.addCookie(cookie);// 添加cookie
}
}
// 当获取的购物车列表不为空时
else {
for (购物车POJO pojo : pojos) {
// 如果购物车中存在该商品则数量+1
if (pojo.getId() == id) {
pojo.setNum(pojo.getNum() + 1);
break;
}
}
// 获取名为"cart"的cookie
cookie = getCookie(request);
cookie.setPath("/");// 设置在该项目下都可以访问该cookie
cookie.setMaxAge(60 * 30);// 设置cookie有效时间为30分钟
String value = CartUtil.makeCookieValue(pojos, 购物车POJO);
cookie.setValue(URLEncoder.encode(value)); // 设置value
response.addCookie(cookie);
}
} catch (UnsupportedEncodingException e) {
}
}

从购物车删除商品

    public void delCartById(){
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
try {
List<购物车POJO> pojoss = CartUtil.getCartInCookie(response, request);
List<购物车POJO> pojos=new ArrayList<购物车POJO>();
for(购物车POJO pojo:pojoss){
if(pojo.getId()!=id){
购物车POJO vo=new 购物车POJO();
vo=pojo;
pojos.add(vo);
}
}
Cookie cookie = CartUtil.getCookie(request);
cookie.setPath("/");// 设置在该项目下都可以访问该cookie
cookie.setMaxAge(60 * 30);// 设置cookie有效时间为30分钟
String value = makeCookieValue(carts);
cookie_2st.setValue(URLEncoder.encode(value)); // 设置value
response.addCookie(cookie);
} catch (UnsupportedEncodingException e) {
}
}

修改购物车商品

    public void changeCart(){
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
try {
List<购物车POJO> cartVos = getCartInCookie(response, request);
List<购物车POJO> carts = new ArrayList<购物车POJO>();
//减少
if (type.equals("0")) {
for (购物车POJO cartVo : cartVos) {
if (cartVo.getId() == id) {
购物车POJO cart = new 购物车POJO();
cart.setId(id);
cart.setNum(num - 1);
carts.add(cart);
} else {
购物车POJO cart = new 购物车POJO();
cart = cartVo;
carts.add(cart);
}
}
//增加
} else if (type.equals("1")) {
for (购物车POJO cartVo : cartVos) {
if (cartVo.getId() == id) {
购物车POJO cart = new 购物车POJO();
cart.setId(id);
cart.setNum(num + 1);
carts.add(cart);
} else {
购物车POJO cart = new 购物车POJO();
cart = cartVo;
carts.add(cart);
}
}
}
Cookie cookie = getCookie(request);
cookie.setPath("/");// 设置在该项目下都可以访问该cookie
cookie.setMaxAge(60 * 30);// 设置cookie有效时间为30分钟
String value = makeCookieValue(carts, POJO);
cookie.setValue(URLEncoder.encode(value)); // 设置value
response.addCookie(cookie);
} catch (Exception e) {
}
}

此代码无法直接使用,如需使用请更改代码内相关变量

【java】Cookie购物车实现的更多相关文章

  1. Java实现购物车功能:方式一:存放在session中.方式二:存储在数据库中

    //将购物车产品加入到cookie中,方式同浏览记录.Java实现购物车,方式一(简易版):存储在session中.这种方式实现还不严谨,大家看的时候看思路即可.(1). JSP页面中,选择某一款产品 ...

  2. Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie

    Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie >>>>>>>>>>>>& ...

  3. Java Cookie和Session

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  4. java cookie 工具类

    package com.xxx.xxx.xxx.xxx; import java.net.URLDecoder; import java.net.URLEncoder; import javax.se ...

  5. Java cookie和session介绍与区别

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于才服务器端保持状态的 ...

  6. js+cookie 购物车

    $(function () { //var ctx = new Ch(); //ctx.Clear(); //$.cookie(ctx.cookieName, ""); //ale ...

  7. Java——Cookie与Session

    Cookie通过客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 1.Cookie  1.1概念及使用方法 Cookie实际上是一小段文本信息.客户端请求服务器,如果服务 ...

  8. Java Cookie和Session(转载)

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于才服务器端保持状态的 ...

  9. Java简单购物车设计

            还是存在一些问题(比如clear函数没效果.乱码,单独测试也没,确实找不到问题),路过的给解决下... 第一部分     会话控制 会话跟踪: 使用隐藏表单字段 URL重写,实际就是直 ...

随机推荐

  1. Math类简介

    Math  abs max min 分别是绝对值 最大值,最小值 round 四舍五入 ceil ceil(32.6)  33.0 ceil(32.2) 33.0 返回大于该数值的较大的整数 与之相对 ...

  2. Mac系统的launchd、守护进程daemon(2013笔记整理)

    1. launchd Mac系统下通用的进程管理器,是Mac系统下非常重要的一个进程,一般来说该进程不允许直接以命令行的形式调用.只能通过其控制管理界面,launchctl来进行控制. launchd ...

  3. C++之string类

    1.String对象的初始化 string s1;               默认构造函数,s1为空串 string s4(n, 'c');     将s4初始化为字符c的n个副本 string s ...

  4. Linux包管理

    1.yum(Yellow dog Updater, Modified) yum是一个在Fedora(基于Linux的操作系统)和RedHat(基于Linux的操作系统)以及SUSE(基于Linux的操 ...

  5. 27.【转载】挖洞技巧:如何绕过URL限制

    大家对URL任意跳转都肯定了解,也知道他的危害,这里我就不细说了,过~ 大家遇到的肯定都是很多基于这样的跳转格式:http://www.xxx.xxx/xxx?xxx=http://www.xxx.x ...

  6. idea中java项目增加module后,手动增加xml文件,合并到webapp/WEB-INFO或WEB-INFO(包)

    当手工增加一个module,增加配置文件(如:web.xml)需要合并到文件夹里,要不众多文件在一个src文件夹下,太凌乱. 1. 合并到webapp/WEB-INFO下 a. 首先增加webapp目 ...

  7. 关于goneaway及499

    关于上面现象的分析如下 问题描述: 接口偶发性出现接口耗时过长的情况 根源: “sockets的快速回收”机制被启动 简单代码+数据分析: 1.      经简单分析,耗时主要出现在连接数据库的方法: ...

  8. Unity中限制轴向移动范围Mathf.Clamp

    Mathf.Clamp   在游戏中,为了限制玩家的某一轴向的移动不超过一定的范围,可以用Mathf.Clamp来解决 Mathf.Clamp(float value,float min,float ...

  9. Hadoop WordCount单词计数原理

    计算文件中出现每个单词的频数 输入结果按照字母顺序进行排序 编写WordCount.java 包含Mapper类和Reducer类 编译WordCount.java javac -classpath ...

  10. 配置OpenCV报应用程序无法正常启动0xc000007b

    我的配置软件是OpenCV3.4.1和visual studio2017.参考这篇博客(https://blog.csdn.net/qq_41175905/article/details/805604 ...