欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

cookie来实现购物车功能

程序员文章站 2024-01-21 12:37:34
一、大概思路 1、从cookie中取商品列表 2、判断要添加的商品是否存在cookie中。 3、如果已添加过,则把对应的商品取出来,把要添加的商品的数量加上去。 4、如果没有添加过,则把改商品添加到商品列表中。 5、再把商品列表序列化,加入cookie中。 二、代码实现 1、定义一个购物车商品的po ......

一、大概思路

  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";
    }
}