商品浏览历史记录的代码实现(基于Cookie)

1 商品列表页---跳转到--->商品详细信息页时将cookie写到浏览器

------------------------------------------------------------------

// 获得客户端携带的cookie 获得名字是pids的cookie
        String pids = pid ;
        //1 首先接收cookie中的pids信息,如果没有则进行创建cookie对象存储pids信息
        Cookie[] cookies = request.getCookies();
        if(cookies != null) {
            for (Cookie cookie : cookies) {
                // 找到与pids对应的cookie名称
                if("pids".equals(cookie.getName())) {
                    // 取出与pids同名的cookie值
                    pids = cookie.getValue();
                    //假设pids不为空
                    // 1-3-2本次访问商品的id为6 6-1-3-2
                    // 1-3-2本次访问商品的id为3 3-1-2
                    // 1-3-2本次访问商品的id为2 2-1-3

                    // 分割pids的值
                    String[] split = pids.split("-");
                    //将数组转换为集合
                    List<String> asList = Arrays.asList(split);
                    //将asList集合转换为LinkedList集合
                    LinkedList<String> list = new LinkedList<>(asList);
                    // 判断集合中是否存在当前pid -->如果包含则移除然后添加到链表的头
                    if(list.contains(pid)) {
                        list.remove(pid);
                        list.addFirst(pid);
                    }else {
                        //如果不包含  则直接添加到链表的头
                        list.addFirst(pid);
                    }
                    
                    // 将[3,1,2]转换为3-1-2-
                    StringBuffer sb = new StringBuffer();
                    for(int i=0;i<list.size()&&i<7;i++) {
                        sb.append(list.get(i));
                        sb.append("-");
                    }
                    // 去掉3-1-2-中最后一个-
                    pids = sb.substring(0, sb.length() - 1);
                    
                }
            }
        }
        //如果Cookie为空则创建cookie并存储pids信息到cookie中
        Cookie cookie_pids = new Cookie("pids", pids);
        //将cookie信息写到浏览器中
        response.addCookie(cookie_pids);
        

        request.getRequestDispatcher("/product_info.jsp").forward(request, response);



2. 商品详细信息页面的数据准备--准备好历史数据后---存域--转发到商品列表页即可看到历史浏览信息

//定义一个集合存储历史浏览记录
        List<Product> historyProductList = new ArrayList<>();
        // 获得cookie
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie : cookies) {
            if("pids".equals(cookie.getName())) {
                String pids = cookie.getValue();
                String[] split = pids.split("-");
                for (String pid : split) {
                    Product product = service.findProductInfo(pid);
                    historyProductList.add(product);
                }
            }
        }
        
        request.setAttribute("historyProductList", historyProductList);
        
        request.setAttribute("pageBean", pageBean);
        request.setAttribute("cid", cid);
        request.getRequestDispatcher("/product_list.jsp").forward(request, response);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值