cookie-jsp实现记录浏览记录

这篇博客介绍了如何利用Cookie在JSP中实现浏览历史记录的功能。当用户点击商品展示详细信息时,商品ID被保存在Cookie的‘ids’中。如果Cookie为空,则直接添加;否则,检查ID是否已存在,如果存在则移到前面,如果不存在且长度>=3,则移除最后一个ID并添加,否则直接添加。最后,当用户返回商品列表时,显示之前的浏览记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

步骤分析:

1.先将product_list.htm转成jsp
2.点击一个商品,展示该商品的信息,将该商品id记录到cookie  (GetProductById)
获取之前的浏览记录 例如名称:ids
判断cookie是否为空
若为空 将当前商品的id起个名称 ids 放入cookie中  ids=1
若不为空,获取值 例如:ids=2-1  当前访问的id=1  使用"-"分割商品id
判断之前记录中有无该商品
若有:
将当前的id放入前面  结果 ids=1-2
若没有:
继续判断长度是否>=3
若>=3,移除最后一个,将当前的id放入最前面
若<3,直接将当前的id放入最前面.

若 ids=3-2-1 现在访问1 结果 ids=1-3-2
若 ids=4-3-2 现在访问1 结果 ids=1-4-3


3.再次回到product_list.jsp页面,需要将之前访问商品展示在浏览记录中
获取ids  例如:ids=2-3-1

切割

jsp代码:

<!--
        商品浏览记录:
        -->
<div style="width:1210px;margin:0 auto; padding: 0 9px;border: 1px solid #ddd;border-top: 2px solid #999;height: 246px;">


<h4 style="width: 50%;float: left;font: 14px/30px " 微软雅黑 ";">浏览记录<a href="/webseven/clearHistroy">清空</a></h4>
<div style="width: 50%;float: right;text-align: right;"><a href="">more</a></div>
<div style="clear: both;"></div>


<div style="overflow: hidden;">


<ul style="list-style: none;">
<%
   //获取指定名称的cookie ids
     Cookie c= CookieUtils.getCookieByName("ids", request.getCookies());
   //判断ids是否为空
     if(c==null){
  %>
      <h2>暂无浏览记录</h2>
  <%
     }else{//ids=3-2-1
        String [] arr= c.getValue().split("-");
        for(String id :arr){
        %>
        <li style="width: 150px;height: 216;float: left;margin: 0 8px 0 0;padding: 0 18px 15px;text-align: center;"><img src="products/1/cs1000<%=id %>.jpg" width="130px" height="130px" /></li> 
      <%  }
        
     }
     
  
  %>
      
   
</ul>



</div>
</div>
<div style="margin-top:50px;">
<img src="./image/footer.jpg" width="100%" height="78" alt="我们的优势" title="我们的优势" />

</div>

工具类:

package com.feizhu.utils;


import javax.servlet.http.Cookie;


public class CookieUtils {
/**
     * 通过名称在cookie数组获取指定的cookie
     * @param name  cookie名词
     * @param cookies  cookie数组
     * @return
     */
public static Cookie getCookieByName(String name, Cookie[] cookies) {
if(cookies!=null) {

for(Cookie c: cookies) {
//通过名称获取
if(name.equals(c.getName()))
//返回
return c;
}
}
return null;
}

}

Servlet类:

package com.feizhu.web.servlet;


import java.io.IOException;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;


import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import com.feizhu.utils.CookieUtils;


/**
 * 记录商品浏览记录
 */
public class GetProductByIdServlet extends HttpServlet {
private static final long serialVersionUID = 1L;


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//0.设置编码

//获取当前访问的商品id
String id=request.getParameter("id");

//1.获取指定的cokie ids
Cookie c= CookieUtils.getCookieByName("ids", request.getCookies());
String ids="";
//判断cookie是否为空
if(c==null) {
//若cookie为空 需要将当前商品id放入ids中
ids=id;
}else {
//若cookie不为空,继续判断ids种是否已经包含id // ids=2-11-21
//获取值
 ids=c.getValue();
  String[] arr= ids.split("-");
  //将数组转成集合,此aslist长度不变
  List<String> aslist =Arrays.asList(arr);
  //将aslist放入一个新的list中
  LinkedList<String>  list = new LinkedList<>(aslist);
  
  if(list.contains(id)) {
  //若ids中包含id  将id移除放到最前面
  list.remove(id);
  list.addFirst(id);
  }else {
  //若ids种不包含id  继续判断长度是否大于2
  if(list.size()>2) {
  //长度>=3 移除最后一个,将当前的放入最前面
  list.removeLast();
  list.addFirst(id);
  }else {
  //长度<3将当前放入最前面
  list.addFirst(id);
  }
  }
  
  ids="";
  //将List转成字符串
  for(String s :list) {
  ids+=(s+"-");
  }
  ids=ids.substring(0, ids.length());
}
//将ids写回去
c= new Cookie("ids",ids);
//设置访问路径
c.setPath(request.getContextPath());
//设置存活时间
c.setMaxAge(3600);

//写回浏览器
response.addCookie(c);
//3.跳转到指定的商品页面上
  response.sendRedirect(request.getContextPath()+"/product_info"+id+".htm");

}


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);
}

 

}

备注:由于个人原因,本博客暂停更新。如有问题可联系本人,本人提供技术指导、学习方向、学习路线。本人微信wlp1156107728(添加注明来意)   QQ1156107728(添加注明来意)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值