cookie使用举例(添加购物车商品_移除购物车商品)

之前介绍过cookie和session的原理和区别。下面举例说明一下cookie在实际项目中的使用。
使用cookie实现购物车功能:

  • 1.往购物车添加商品
  • 2.从购物车里移除商品

主要是要点是:以产品id作为主键进行判断。如果这个添加的产品id信息已经在cookie里面存在,则添加失败(这里不考虑同一个商品重复添加多个的问题。因为只是cookie的简单举例);否则则把该产品的信息保存在cookie里面。
因此存在用户手动清楚cookie的情况,所以需要判断:

1 if(cookieMap.containsKey(key)){
2 ...
3 } else {
4 //移除购物车商品失败
5 }

完整代码如下:

  1 import java.util.HashMap;
  2 import java.util.Map;
  3 import javax.servlet.http.Cookie;
  4 import javax.servlet.http.HttpServletRequest;
  5 import javax.servlet.http.HttpServletResponse;
  6
  7 import net.sf.json.JSONObject;
  8
  9 /**
 10  * 我的购物车
 11  * @author Administrator
 12  *
 13  */
 14 public class MyShoppingCar {
 15
 16     /**
 17      * 添加商品
 18      * @param request
 19      * @param response
 20      * @param prodId   商品id
 21      * @param prodPrice 商品价格
 22      * @return
 23      * @throws Exception
 24      */
 25     public static JSONObject addInShoppingCar(HttpServletRequest request,HttpServletResponse response,String opId,String prodId,String prodPrice) throws Exception{
 26         //保存在cookie
 27         String key = opId;
 28         String value = prodId + "*" + prodPrice;
 29         if("".equals(key)||"".equals(value)){
 30             throw new Exception("操作员信息不存在或者商品信息不存在,请联系管理员");
 31         }
 32         JSONObject jsonObject = new JSONObject(true);
 33         Map<String,Cookie> cookieMap = ReadCookieMap(request);//key--cookie
 34
 35         if(cookieMap.containsKey(key)){
 36             Cookie cookie = cookieMap.get(key);
 37             String cookieVal = cookie.getValue();
 38             String[] vals = cookieVal.split(",");
 39             for (int i = 0; i < vals.length; i++) {
 40                 if(prodId.equals(vals[i].split("\\*")[0])){
 41                     jsonObject.put("status", "-1");
 42                     jsonObject.put("msg", "添加购物车失败");
 43                     return jsonObject;
 44                 } else {
 45                     if("".equals(cookieVal) || null == cookieVal){
 46                         cookieVal = value;
 47                     } else {
 48                         cookieVal += "," + cookieVal;
 49                     }
 50                     cookie.setValue(value);
 51                     cookie.setPath("/");
 52                     cookie.setMaxAge(24*60*60);
 53                     response.addCookie(cookie);
 54                 }
 55             }
 56         } else {
 57             Cookie newCookie = new Cookie(key,value);
 58             newCookie.setMaxAge(24*60*60);
 59             newCookie.setPath("/");
 60             response.addCookie(newCookie);
 61         }
 62         jsonObject.put("status", "1");
 63         jsonObject.put("msg", "添加购物车成功");
 64         return jsonObject;
 65     }
 66
 67     /**
 68      * 返回cookieMap
 69      * @param request
 70      * @return
 71      */
 72     private static Map<String, Cookie> ReadCookieMap(HttpServletRequest request) {
 73         Cookie[] cookies = request.getCookies();
 74         Map<String,Cookie> cookieMap = null;
 75         if(null != cookies && cookies.length>0){
 76             cookieMap = new HashMap<String,Cookie>();
 77             for (int i = 0; i < cookies.length; i++) {
 78                 cookieMap.put(cookies[i].getName(), cookies[i]);
 79             }
 80         }
 81         return cookieMap;
 82     }
 83
 84     /**
 85      * 移除购物车里面的商品
 86      * @param request
 87      * @param response
 88      * @param opId
 89      * @param prodId
 90      * @return
 91      */
 92     public static JSONObject delFromShoppingCar(HttpServletRequest request,HttpServletResponse response,String opId,String prodId){
 93         JSONObject jsonObject = new JSONObject();
 94         Map<String, Cookie> cookieMap = ReadCookieMap(request);
 95         if(cookieMap.containsKey(opId)){
 96             Cookie cookie = cookieMap.get(opId);//123*34,234*45,456*67
 97             String cookieVal = cookie.getValue();
 98             String[] cvalue = cookieVal.split(",");
 99             String newCval = "";
100             for (int i = 0; i < cvalue.length; i++) {
101                 if(!prodId.equals(cvalue[i].split("\\*")[0])){
102                     if("".equals(newCval) || null ==  newCval ){
103                         newCval = cvalue[i];
104                     } else {
105                         newCval += "," + cvalue[i];
106                     }
107                 }
108             }
109             //删除cookie
110             cookie.setMaxAge(0);
111                         //重新创建cookie并保存购物车商品信息
112             Cookie newCookie = new Cookie(opId,newCval);
113             newCookie.setPath("/");
114             newCookie.setMaxAge(24*60*60);
115             response.addCookie(newCookie);
116             jsonObject.put("status", "1");
117             jsonObject.put("msg", "删除商品成功");
118
119         } else {
120             jsonObject.put("status", "-1");
121             jsonObject.put("msg", "删除商品失败");
122         }
123         return jsonObject;
124     }
125 }
时间: 2024-10-27 13:28:50

cookie使用举例(添加购物车商品_移除购物车商品)的相关文章

编写一个简易购物车,实现向购物车内添加商品,移除指定商品及清空购物车功能。

showp.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+reque

添加二级缓存_配置及使用

项目添加二级缓存1.需要引入三个jar包 在hibernate下能找到 hibernate-distribution-3.5.6-Final\lib\optional\ehcache\ehcache-1.5.0.jar 在srping下能找到 ..\lib\concurrent\backport-util-concurrent.jar ..\lib\jakarta-commons\commons-logging.jar2.在hibernate.cfg.xml中配置 (1)开启二级缓存: <!--

JAVAEE——宜立方商城09:Activemq整合spring的应用场景、添加商品同步索引库、商品详情页面动态展示与使用缓存

1. 学习计划 1.Activemq整合spring的应用场景 2.添加商品同步索引库 3.商品详情页面动态展示 4.展示详情页面使用缓存 2. Activemq整合spring 2.1. 使用方法 第一步:引用相关的jar包. <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> </dependency> &l

Java 添加、更新和移除PDF超链接

简介 PDF超链接用一个简单的链接包含了大量的信息,满足了人们在不占用太多空间的情况下渲染外部信息的需求.下面将介绍通过Java 在PDF中添加.更新和移除超链接. (一)工具使用: Free Spire.PDF for Java 2.4.4(免费版) Intellij IDEA (二)导入Jar文件包: 方式一:首先,从官网获取Free Spire.PDF for Java文件包. Step 1: 下载控件包之后解压,打开“Project Structure”界面.(以下是三种在IDEA中快速

jq select change下拉框选项变化判断选中值,添加(attr)或移除(removeAttr)一个或多个属性

select change下拉框选项变化判断选中值,添加(attr)或移除(removeAttr)一个或多个属性 $("#IsRecommend").change(function () { var isCheck = $(this).children('option:selected').val(); if (isCheck == "true") { $("#CategoryId").css("display", "

非框架, 纯原生JS “商品详情跳转到商品列表,并记录高度“ 的写法思路

这里只讲思路,不提供代码. 写之前,我要先吐槽一种非常奇葩的写法.    下面是他的写法思路(虽不提倡,但可借鉴): 一个商品列表,然后把商品详情写在商品列表里. 这是一个页面,两个不一样的div标签,一个div标签是商品类表,另一个div标签是商品详情 从商品列表跳转到商品详情的操作是: 请求商品详情接口,请求到后赋值(在jq项目里特地引了个vue来双向绑定), 把当前页面的高度记录下来($document.scrollTop()获取高度), 然后把商品列表div标签隐藏掉,然后再显示商品详情

商品属性管理【把商品和属性关联起来】

在添加商品的表单中制作一个类型的下拉框 <!-- 商品属性 --> <table style="display:none;" width="90%" class="tab_table" align="center"> <tr><td> 商品类型: <?php buildSelect('Type','type_id','id','type_name'); ?> <

python爬虫之:淘宝商品搜索爬虫(收集商品信息/下载详情图)

一.获取商品信息: #!/usr/bin/python3.5 #coding:utf8 import xlsxwriter as wx import re import cgi import requests import os import time import urllib page=1 downsuccess = 0 downfaild = 0 shop = [("店铺名称","商品","商品售价¥","商品购买数",

修改ECSHOP后台的商品列表里显示该商品品牌

如何在在ECSHOP后台的商品列表中也显示商品的品牌”.下面就来最模板讲一下如何来修改.此方法只保证在ECSHOP2.7.2版本下有效,其他版本请参照修改. 第一步:首先我们来打开程序文件: /admin/includes/lib_goods.php 定位到 goods_list  函数部分 找到下面代码(大概在911行左右) $sql = "SELECT goods_id, goods_name, goods_type, goods_sn, shop_price, is_on_sale, is