今天介绍历史记录这个业务点,我们浏览某商品后,会留下历史记录,我们可以选择把这些数据存储在缓存redis中,也可以选择作为域存储
我这里只是简单地选择把商品地图片进行展示,事实上还可以在这个基础上在加上商品地名称与详细信息链接。
浏览记录
我们浏览某商品,浏览完了之后,会把刚才浏览的商品的一些信息存储到cookie中
//获得要查询商品的pid
String pid = request.getParameter("pid");
我们这里需要判断是否之前已经浏览过该商品,如果已经浏览过,则把该cookie置前
//获得客户端携带的cookie--名字是pids的cookie
Cookie[] cookies=request.getCookies();
String pids = pid;
if(cookies!=null){
for(Cookie cookie:cookies){
if("pids".equals(cookie.getName())){
pids=cookie.getValue();
//将pids拆成一个数组
String[] split=pids.split("-");
List<String> aList =Arrays.asList(split);
LinkedList<String> list = new LinkedList<String>(aList);
//判断集合中是否存在当前pid
if(list.contains(pid)){
//包含当前查看商品的pid
list.remove(pid);
list.addFirst(pid);
}else{
//不包含当前查看商品的pid 直接将该pid放到头上
list.addFirst(pid);
}
//将[3,1,2]转成3-1-2字符串
StringBuffer sb = new StringBuffer();
for(int i=0;i<list.size()&&i<7;i++){
sb.append(list.get(i));
sb.append("-");//3-1-2-
}
//去掉3-1-2-后的-
pids = sb.substring(0, sb.length()-1);
}
}
}
没有浏览过则创建
//第一次访问时,在转发之前,需要创建cookie存储pid
Cookie cookie_pids = new Cookie("pids",pids);
response.addCookie(cookie_pids);
商品详细信息
当我们点击返回列表页面时,则从cookie中获取到刚才pids。并把它们放入域中
//获得客户端携带名字叫pids的cookie
Cookie[] cookies = request.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies){
if("pids".equals(cookie.getName())){
String pids = cookie.getValue();//3-2-1
String[] split = pids.split("-");
for(String pid : split){
Product pro = service.findProductByPid(pid);
historyProductList.add(pro);
}
}
}}
//将历史记录的集合放到域中
request.setAttribute("historyProductList", historyProductList);
前端页面从域中获取到商品的信息,我这里只展示商品的照片。如果想要展示商品详细信息,还想要新建一个domin对象,其实就是在Product中再加一个路径而已。