Cookies 实现 商品历史浏览

创建 2个 servlet 

一个用来显示 数据库中的商品信息    另一个用来显示点击商品的详细信息  


其中第一个servlet 要显示 历史浏览记录  通过 获取 cookies  来显示  最多显示  3条   最近浏览的在前  

第二个servlet 需要 保存当前浏览商品的cookies   


详细代码如下 :

servlet1-----> cookieDemo3.java

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.print("本网站可以采购的商品有: <br/>");
		LinkedHashMap<String, Book> map = (LinkedHashMap<String, Book>) Db.getAll();
		
		for(Map.Entry<String, Book> entry:map.entrySet()){
			Book book = entry.getValue();
			out.print("<a href='/cooks/servlet/cookieDemo4?id="+book.getId()+"' target = '_blank'>"+book.getName()+"</a><br/>");
		}
		
		out.print("<br/>您曾经所看过的商品:<br/>");
		Cookie cookies[] = request.getCookies();
		for(int i = 0;cookies!=null&&i<cookies.length;i++){
			if(cookies[i].getName().equals("History")){
				String []ids = cookies[i].getValue().split("\\,");
				for(String id : ids){
					Book book = (Book) Db.getAll().get(id);
					out.print(book.getName()+"<br/>");
				}
			}
		}
		
	
	}



servlet2 ---->   cookieDemo4.java

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String id = request.getParameter("id");
		Book book = Db.getAll().get(id);
		
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		if(book!=null){
			out.print(""+book.toString().trim());
			String cookieString = getCookiesHistory(id,request);
		    Cookie cookie = new Cookie("History", cookieString);
		    cookie.setMaxAge(3600*24*30);
		    cookie.setPath("/cooks");
		    response.addCookie(cookie);
		}
		
		
		
		

		
	
	}

	private String getCookiesHistory(String id, HttpServletRequest request) {
		
		
		Cookie[] oldcookies = request.getCookies();
		String oldCookie = null;
		LinkedList<String> idLinkedList = null ;
		for(int i = 0 ;oldcookies!=null&&i<oldcookies.length;i++){
			if(oldcookies[i].getName().equals("History")){
				oldCookie = oldcookies[i].getValue();
			}
		}
		if(oldCookie!=null){
			String[] ids = oldCookie.split("\\,");
			List<String> idList = Arrays.asList(ids);
			idLinkedList = new LinkedList<String>(idList);
			//null    1   1
			
			//1,2     1   1,2
			
			//2,3     1   1,2,3
			
			//2,3,4   1   1,2,3
			
			//2,3,1   1   1,2,3
			
			if(idLinkedList.size()==0){
				idLinkedList.add(id);
			}
			else if(idLinkedList.size()<3){
				if(idLinkedList.contains(id)){
					idLinkedList.remove(id);
					idLinkedList.addFirst(id);
				}
				else {
					idLinkedList.addFirst(id);
				}
			}
			else {//浏览的记录等于3  应该删除一些然后显示
				if(idLinkedList.contains(id)){
					idLinkedList.remove(id);
					idLinkedList.addFirst(id);
				}
				else {
					idLinkedList.removeLast();
					idLinkedList.addFirst(id);
				}
			}
		}
		else {
			return id;
		}
		StringBuffer sb = new StringBuffer();
		for(String id1 : idLinkedList){
			sb.append(id1+",");
		}
		sb.deleteCharAt(sb.length()-1);
		return sb.toString();
	}


如此即可实现效果!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值