cookie来实现购物车功能

一、大概思路

  1、从cookie中取商品列表

  2、判断要添加的商品是否存在cookie中。

  3、如果已添加过,则把对应的商品取出来,把要添加的商品的数量加上去。

  4、如果没有添加过,则把改商品添加到商品列表中。

  5、再把商品列表序列化,加入cookie中。

二、代码实现

  1、定义一个购物车商品的pojo

public class CartItem {

    private Long id;

    private String title;

    private Long price;

    private Integer num;

    private String image;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Long getPrice() {
        return price;
    }

    public void setPrice(Long price) {
        this.price = price;
    }

    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }
}

  2、定义一个购物车的接口和实现类

public interface CartService {

    TaotaoResult addCartService(HttpServletRequest request, HttpServletResponse response, Long itemId, Integer num);
}
@Service
public class CartServiceImpl implements CartService {

    @Autowired
    private ItemService itemService;
    @Value("${COOKIE_EXPIRE}")
    private Integer COOKIE_EXPIRE;

    @Override
    public TaotaoResult addCartService(HttpServletRequest request, HttpServletResponse response, Long itemId, Integer num) {
        // 1.从cookie中取商品列表
        List<CartItem> list = getCartFromCookie(request);
        // 2.判断是否已经添加过购物车
        boolean haveflag = false;
        for (CartItem c : list) {
            //3.如果添加过,把对应的商品取出来,数量加Num
            if(c.getId().longValue() == itemId) {
                c.setNum(c.getNum() + num);
                haveflag = true;
                break;
            }
        }
        // 4.如果没添加过,则把该商品添加进去。
        if (!haveflag) {
            TbItem item = itemService.getItemById(itemId);
            CartItem cartItem = new CartItem();
            cartItem.setNum(num);
            cartItem.setId(itemId);
            cartItem.setPrice(item.getPrice());
            cartItem.setTitle(item.getTitle());
            if (item.getImage() != null) {
                String image = item.getImage();
                String[] strings = image.split(",");
                cartItem.setImage(strings[0]);
            }
            list.add(cartItem);
        }
        // 5.再把list返回到cookie中
        CookieUtils.setCookie(request, response, "TT_CART", JsonUtils.objectToJson(list), COOKIE_EXPIRE);      
        return TaotaoResult.ok();
    }

    private List<CartItem> getCartFromCookie(HttpServletRequest request) {
        try {
            String json = CookieUtils.getCookieValue(request, "TT_TOKEN", true);
            List<CartItem> list = JsonUtils.jsonToList(json, CartItem.class);
            if (list == null) {
                return new ArrayList<>();
            }else {
                return list;
            }
        }catch (Exception e) {
            return new ArrayList<>();
        }
    }
}

  3、controller来接收前端的请求,并响应到cart-success.jsp页面。

@Controller
public class CartController {

    @Autowired
    private CartService cartService;

    @RequestMapping("/cart/add/{itemId}")
    public String addCart(@PathVariable Long itemId, Integer num, HttpServletRequest request, HttpServletResponse response) {
        TaotaoResult result = cartService.addCartService(request, response, itemId, num);
        return "cart-success";
    }
}

原文地址:https://www.cnblogs.com/huclouy/p/9498374.html

时间: 2024-10-23 09:24:35

cookie来实现购物车功能的相关文章

简单3步 js使用cookie实现的购物车功能[原创]

引入JQuery.js支持 加入JQuery.Cookie.js,代码如下 1 jQuery.cookie = function(name, value, options) { 2 if (typeof value != 'undefined') { // name and value given, set cookie 3 options = options || {}; 4 if (value === null) { 5 value = ''; 6 options.expires = -1;

ASP.NET之电子商务系统开发-2(购物车功能)

一.前言 继上次的首页数据列表后,这是第二篇.记录一下购物车这个比较庞大的功能,可能实现的方法跟其他人有点不一样,不过原理都差不多,是将cookie存数据库里面的. 二.开始 首先看一下购物车流程及对应代码. 1.如果购物车为空,就显示   其方法是创建两个大的div层,当你没有购买商品时,就显示这层,里面啥都没有,如果你点击了一个商品加入购物车,就会将这层隐藏,显示存放刚放入购物车商品信息的那一层,其控制方法如下: DataSet ds = bllShopCar.ShopCarQT(Reque

电商网站中添加商品到购物车功能模块2017.12.8

前言: 电商网站中添加商品到购物车功能模块实现: 根据前一篇博客的介绍,我们看到淘宝网站为了保证购物车数据的同步,直接是强制用户必须登录才可以将商品加入购物车.而京东网站是用户在未登录的状态下也可以将商品加入到购物车,此时这个是保存在了cookie中,然后用户登录后,根据商品的id判断商品是否存在,将两个购物车的商品合并,形成最终的购物车商品. 本篇文章分两个模块,分别看下这两个功能是如何实现的: 1.必须在用户登录的前提下,才可以将商品加入到购物车列表 我们今天先看下淘宝网站的状态下的添加商品

关于电商网站购物车功能如何与登录账号相关联的一点想法

最近在试着做电商网站,自然也需要涉及到实现购物车的功能.然后就想到去用cookie来完成购物车的功能. 实现过程是新建一个cookie,把购物车实体类的list放进去,每次给购物车新增商品和删除商品的时候就new一个新的cookie,把key设置成一样的就可以覆盖掉之前的cookie内容了,这样就可以实现每次实现更改购物车内容之后,更新cookie的功能了. 但是完成之后遇到了一个问题,就是如何把这个存在本地客户端的cookie购物车和登录的账号关联起来呢?总不能每个登录用户都共享同一个购物车吧

Session原理、生命周期及购物车功能的实现

在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据(保存该浏览器(会话)的相关信息)时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务. Session和Cookie的主要区别在于: Cookie是把用户的数据写给用户的浏览器. Session技术把用户的数据写到用户独占的

Android 购物车功能的实现

首先,众所周知,ListView是Android最常用的控件,可以说是最简单的控件,也可以说是最复杂的控件. 作为一个Android初级开发者,可能会简单的ListView展示图文信息. 作为一个有一定项目开发经验的Android开发者来说,可能会遇到ListView的列表项中存在各种按钮的需求. 需求最多的就是购物车功能.想必大家都用过某宝某东客户端APP吧 ,就是那个购物车的功能. -------------------------------------------------------

js中利用cookie实现记住密码功能

js中利用cookie实现记住密码功能 在登录界面添加记住密码功能,我首先想到的是在java后台中调用cookie存放账号密码,大致如下: 1 HttpServletRequest request 2 HttpServletResponse response 3 Cookie username = new Cookie("username ","cookievalue"); 4 Cookie password = new Cookie("password

jQuery实现一个简单的购物车功能

最近由于工作需要的原因,开始系统学习jQuery的知识,然后跟着一个视频教程做了一个购物车的功能,现总结如下. 第一步:准备HTML页面,代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.

session实现购物车功能

购物车功能是生活中经常使用的,这里以fruit表为例,做一个简单的购物车: 首先要将fruit表显示出来: <?php session_start();?> <table width="100%" border="1" cellpadding="0" cellspacing="0"> <tr> <td>代号</td> <td>名称</td> &