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"; } }
下一篇: 盘点手机芯片行业未来发展趋势与格局