@Author:Agsting(我的英文名字)
@CreateDate:2016-8-12
@Theam:cookie保存
我们在逛商城时,自己的浏览记录都会显示出来,这个功能很实用,小编表示不会不行啊。看了课程上的保存浏览记录的视频,老师用的是List容器存储cookie,表明上功能比较齐全了,可是后面你就发现问题了。主要有两个:
1、保存的浏览记录会出现重复,同样一个商品点击多次,都会显示在浏览器上,这个肯定是不科学的;
2、每当我刷新页面的时候,浏览记录中会不断增加上一次浏览的那个商品,这个bug太大了。当然我是在老师的启发下,进行的优化,老师还是很牛的哈。
具体的视频请大家看下JavaScript中的关于cookie的内容。我下面就针对保存商品的部分进行展示:
一、考虑用什么容器来存储cookie?
我们要看到的结果是不重复的浏览记录,那么肯定首选Map进行存储,思路对了就好办了。
//定义一个获取由id组成的cookie
String cookieIdList="";
Cookie cookies[]=request.getCookies();
if(cookies!=null&&cookies.length>0){
for(Cookie c:cookies){
if(c.getName().equals("ListViewCookie")){
cookieIdList=c.getValue();
}
}
}
cookieIdList+=request.getParameter("id")+",";
Cookie cookie=new Cookie("ListViewCookie",cookieIdList);
response.add(cookie);
我总觉得这里写的太繁琐,后期我会继续优化,如果大家有更好的方案,拿出来一起探讨一下哈。
// 创建一个方法,把获得的由id字符串组成的cookie放在map中
public HashMap<Integer,Goods> getViewList(String cookieIdList) throws NumberFormatException, Exception {
String sid[]=cookieIdList.split(",");
HashMap<Integer,Goods> cookieMap=new HashMap<Integer,Goods>();
for(int i=0;i<sid.length;i++){
Goods good=getGoods(Integer.parseInt(sid[i]));//调用的方式是根据Id来获取商品对象,此处我就不放了
mapView.put(Integer.parseInt(sid[i]),good);//把id作为键,对应的商品good作为值,这样就确保了一个cookie的唯一性(所谓的cookie,也就是你要保存的一个商品对象的集合)
}
return cookieMap;
}
这一块对于我这个新手来说还是挺难理解的,我琢磨了八个小时,晚上一直在思考,功夫不负有心人,最终还是让我解决了这个问题,下面我跟大家分享一下我的思路:
我的疑惑是我把cookie放在map集合中,但是如果直接是HashMap<Integer,Cookie>来存放cookie对象,那么cookie又是由id的字符串组合形成的,放进去毫无意义,什么都约束不了。那我放啥进去呢,经过不断的墨迹磨叽,我终于想通了,把id放进去作为键,把对象放进去作为值,这样就可以通过key确定唯一个对象(因为我们最终的目的是保存唯一的对象啊!)。最终也就形成了上面的方法,思路理出来以后,后面的调用就很简单了,直接用HashMap的迭代器来遍历键,并将键对应的值赋给商品对象,即可获得想要的唯一对象啦!
//通过迭代器来取对象
GoodsDAO goodsdao=new GoodsDAO();//创建dao层的对象
HashMap<Integer,Goods> viewList=goodsdao.getViewList(cookieIdList);
if(viewList!=null){
Iterator it=viewList.keySet().iterator();
while(it.hasNext()){
Goods g=viewList.get(it.next());//根据键取出map集合中对应的对象
}
}
好了,到这基本就结束了,我最前面提到的问题已经完美解决。当然,我的代码问题还是比较大的,比如没有显示条数的限制,我还会继续完善的,每增加一个逻辑,思考量就要翻倍,先把这个技能get吧,突破一个难点,大脑承受力就会随之增加,思考的越多,解决的问题越多,大脑会越来越强大哈。继续加油吧。
2025 - 快车库 - 我的知识库 重庆启连科技有限公司 渝ICP备16002641号-10
企客连连 表单助手 企服开发 榜单123