servlet实现浏览记录功能

	String pid = request.getParameter("pid");
		Product product = ps.findProductByPid(pid);
		request.setAttribute("product", product);
		// 浏览记录
		String pids = pid;
		Cookie[] cookies = request.getCookies();
		//当coockie不是空的时候,也就是不是	第一次浏览的时候
		if (cookies != null) {
			for (Cookie cookie : cookies) {
				// 找到key为pids的cookie
				if (cookie.getName().equals("pids")){//如果有pids的cookie说明不是第一次点击商品详情了
					//拼接pid们组成的pids字符串
					String[] pid_stirngs = cookie.getValue().split("!");
					//将字符串数组转化为linkList
					List<String> list = Arrays.asList(pid_stirngs);
					LinkedList<String> linkedList = new LinkedList<String>(list);
					//此次点击的产品的pid在不在linkedList内,如果不在,那么直接添加到首位,如果在,删除之前一样的再添加到首位
					if (linkedList.contains(pid)){
						//删除之前一样的
						linkedList.remove(pid);
						//添加至首位
						linkedList.addFirst(pid);
					}else{
						//添加至首位
						linkedList.addFirst(pid);
					}
					//只保留5个
					if (linkedList.size() > 5){
						linkedList.subList(5, linkedList.size()).clear();
					}
//					//将linkedlist转换为字符串数组
//					StringBuffer sbuffer = new StringBuffer();
//					for (String string : linkedList) {
//						sbuffer.append(string);
//						sbuffer.append("!");
//					}
//					//去掉最后的!
//					sbuffer.deleteCharAt(sbuffer.length() - 1);
//					//将新的字符串赋给pids
//					pids = sbuffer.toString();
					pids = StringUtils.join(linkedList,"!");
				}
			}
		}
		System.out.println(pids);
		//存入cookie
		Cookie cookie = new Cookie("pids", pids);
		response.addCookie(cookie);
		request.getRequestDispatcher("/product_info.jsp").forward(request,
				response);
该方法实现了浏览记录的功能,原理是使用cookie进行存储,并把每一个商品的id中间使用!来连接,用的时候 字符串分割掉!,并使用了LinkedList,因为该种集合的更新操作执行效率较高,加了注释那几行代码由注释后的一行代码代替 pids = StringUtils.join(linkedList,"!");
如果使用这种形式转换为string类型的话,需要导入一个包commons-lang-2.6.jar,否则只能按照注释掉的代码来进行转换
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过在Servlet中获取HTTP请求的Referer头信息来实现浏览记录功能。具体实现代码如下: ```java import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class BrowseHistoryServlet extends HttpServlet { private static final long serialVersionUID = 1L; private List<String> history = new ArrayList<String>(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String url = request.getHeader("Referer"); if (url != null && !url.isEmpty()) { history.add(url); } response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head><title>浏览历史记录</title></head>"); out.println("<body>"); out.println("<h1>浏览历史记录</h1>"); out.println("<ul>"); for (String h : history) { out.println("<li>" + h + "</li>"); } out.println("</ul>"); out.println("</body>"); out.println("</html>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } ``` 这个Servlet会在每次HTTP请求时获取Referer头信息,并将它添加到一个列表中。当用户访问这个Servlet时,它会将浏览历史记录输出到页面中。通过这种方式,我们就可以实现浏览记录功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值