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