cookie来实现购物车功能

Posted huclouy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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";
    }
}

 


以上是关于cookie来实现购物车功能的主要内容,如果未能解决你的问题,请参考以下文章

jQuery使用cookie与json简单实现购物车功能

电商---实现购物车功能

(JS实现顾客商品浏览记录以及购物车)Cookie的保存与删除

购物车的原理及实现

模拟淘宝登录和购物车功能:使用cookie记录登录名,下次登录时能够记得上次的登录名,使用cookie模拟购物车功能,使用session记住登录信息并验证是否登录,防止利用url打开网站,并实现退出登

模拟淘宝登录和购物车功能:使用cookie记录登录名,下次登录时能够记得上次的登录名,使用cookie模拟购物车功能,使用session记住登录信息并验证是否登录,防止利用url打开网站,并实现退出登