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);
