Cookie實現瀏覽記錄的主要步驟分析如下:
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 切割
CookUtils工具類下的代碼:
/* * 通過cookie的名稱獲取指定的cookie */ public static Cookie getCookieByName(String name, Cookie[] cookies) { if(cookies!=null){ for (Cookie c : cookies) { if(name.equals(c.getName())) return c; } } return null; }
頁面顯示代碼:
<% //獲取指定名稱的cookie ids Cookie c=CookUtils.getCookieByName("ids", request.getCookies()); if(c==null){ %> <h2>暫無瀏覽記錄</h2> <% }else{ String[] arr=c.getValue().split("-"); for(String id:arr){ %> <img src="products/1/cs1000<%=id %>.jpg" width="130px" height="130px" /> <% } } %>
后台代碼
String id = request.getParameter("id"); Cookie c = CookUtils.getCookieByName("ids", request.getCookies()); String ids=""; if(c==null){ ids=id; }else{ ids=c.getValue(); String[] arr = ids.split("-"); List<String> asList = Arrays.asList(arr); 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{ list.addFirst(id); } } ids=""; for (String string : list) { ids+=(string+"-"); } ids=ids.substring(0, ids.length()-1); } c= new Cookie("ids", ids); c.setPath(request.getContextPath()+"/"); c.setMaxAge(3600); response.addCookie(c);