1.技术点 :Cookie +LinkedList(利用栈特性)
2.实现代码 :
/**
* 通过pid获取商品详细信息 并添加历史记录 cookie
*
* @param pid
* @param cid
* @param model
* @return
*/
@RequestMapping(value = "/getproductinfo")
public String getProductInfo(String pid, String cid, String currentPage, Model model, HttpServletResponse response,
HttpServletRequest request) {
// 根据pid获得商品详细信息
Product list = service.getProductInfoByPid(pid);
model.addAttribute("product", list);
model.addAttribute("cid", cid);
model.addAttribute("currentPage", currentPage);
// 添加历史记录
// 历史记录只添加pid--->添加到cookie中,记录展示通过pid查询商品详细信息
// 栈-->先进后出 1-2-3 添加 3-2-1 实现 LinkList
// 获得客户端携带cookie---获得名字是pids的cookie
String pids = pid;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie c : cookies) {
if ("pids".equals(c.getName())) {
pids = c.getValue();// 1-3-2
// 1-3-2 本次访问商品pid是8----->8-1-3-2
// 1-3-2 本次访问商品pid是3----->3-1-2
// 1-3-2 本次访问商品pid是2----->2-1-3
// 将pids拆成一个数组
String[] str = pids.split("-");// {1,3,2}
List<String> asList = Arrays.asList(str);// [1,3,2]
LinkedList<String> pidlist = new LinkedList<String>(asList);// [1,3,2]
// 判断集合中是否存在当前pid
System.out.println(pidlist + "---" + pid);
if (pidlist.contains(pid)) {// (pid=2) ->[1,3,2]
// 存在移除,再添加到头
pidlist.remove(pid); // [1,3]
pidlist.addFirst(pid);// [2,1,3]
} else {
// 不包含就直接添加都头
pidlist.addFirst(pid);
}
System.out.println(pidlist + "---" + pid);
// 拼接 [3,2,1] ->3-2-1-
StringBuilder sb = new StringBuilder();
for (int i = 0; i < pidlist.size() && i < 7; i++) {
sb.append(pidlist.get(i));
sb.append("-");// 3-1-2-
}
// 3-2-1,去掉最后一个-
pids = sb.substring(0, sb.length() - 1);
}
}
}
Cookie cookie = new Cookie("pids", pids);
response.addCookie(cookie);
return "product_info";
}