美文网首页
01加购物车的分析

01加购物车的分析

作者: Explorer_Mi | 来源:发表于2017-11-29 09:31 被阅读0次

    描述:
    不用登陆就可以加入购物车,关闭浏览器后,购物车里面的商品还存在,
    所以我们可以把购物车放进cookie里面,设置cookie的有效期.即使关闭浏览器,在一定时间内,cookie还是有效的,从而实现购物车里面有商品这件事.


    image.png

    业务逻辑

    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
    

    相关文章

      网友评论

          本文标题:01加购物车的分析

          本文链接:https://www.haomeiwen.com/subject/okwqbxtx.html