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,否则只能按照注释掉的代码来进行转换

猜你喜欢

转载自blog.csdn.net/qq_40100214/article/details/78066325
今日推荐