描述:
不用登陆就可以加入购物车,关闭浏览器后,购物车里面的商品还存在,
所以我们可以把购物车放进cookie里面,设置cookie的有效期.即使关闭浏览器,在一定时间内,cookie还是有效的,从而实现购物车里面有商品这件事.
业务逻辑
package cn.e3mall.cart.controller;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import cn.e3mall.common.utils.CookieUtils;
import cn.e3mall.common.utils.JsonUtils;
import cn.e3mall.pojo.TbItem;
/**
* 将商品添加到购物车,添加成功,响应一个成功页面!
* @author Administrator
*
*/
import cn.e3mall.service.ItemService;
@Controller
public class CartController {
@Value("${COOKIE_CART_EXPIRE}")
private Integer COOKIE_CART_EXPIRE;
@Autowired
private ItemService itemService;
@RequestMapping("/cart/add/{itemId}")
public String addCartToGouWuChe(@PathVariable Long itemId,@RequestParam(defaultValue="1")Integer num,
HttpServletRequest request,HttpServletResponse response){
//1.从cookie中提取购物车列表
List<TbItem> cartList = getCartListFromCookie(request);
//2.判断商品在商品列表中是否存在
boolean flag = false;
for(TbItem item : cartList){
if(item.getId() == itemId.longValue()){
flag=true;
//3.如果存在数量相加
item.setNum(item.getNum()+num);
//跳出循环
break;//continue
}
}
if(!flag){
//4.如果不存在,根据商品id查询商品信息,得到一个TBItem对象
TbItem item = itemService.getItemById(itemId);
//设置商品数量
item.setNum(num);
String image = item.getImage();
if(StringUtils.isNotBlank(image)){
//获取一张图片
item.setImage(image.split(",")[0]);
}
//5.把商品增加到商品列表
cartList.add(item);
}
//6.写入cookie
CookieUtils.setCookie(request, response,"cart",JsonUtils.objectToJson(cartList),COOKIE_CART_EXPIRE,true);
//7.返回添加成功页面-cartSuccess.jsp这个页面
return "cartSuccess";
}
//从cookie中提取购物车列表的处理
private List<TbItem> getCartListFromCookie(HttpServletRequest request){
String json = CookieUtils.getCookieValue(request, "cart", true);
//判断json是否为null
if(StringUtils.isBlank(json))
{
return new ArrayList<>();
}
//把json准换成商品列表
List<TbItem> list = JsonUtils.jsonToList(json, TbItem.class);
return list;
}
}
Cookie过期时间的设置
#cookie中的购物车的保存时间
COOKIE_CART_EXPIRE=432000