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