慕田峪7021683
2016-11-22 15:42
String list =""; //从客户端获得Cookies集合 Cookie[] cookies = request.getCookies(); //遍历这个Cookies集合 if(cookies!=null&&cookies.length>0) { for(Cookie c:cookies) { if(c.getName().equals("ListViewCookie")) { list = c.getValue(); } } } list+=request.getParameter("id")+","; //如果浏览记录超过1000条,清零. String[] arr = list.split(","); if(arr!=null&&arr.length>0) { if(arr.length>=1000) { list=""; } } Cookie cookie = new Cookie("ListViewCookie",list); response.addCookie(cookie);
if(cookies!=null&&cookies.length>0) { for(Cookie c:cookies) { if(c.getName().equals("ListViewCookie")) { list = c.getValue(); } } } list+=request.getParameter("id")+",";
这段代码不太懂,c.getName().equals("ListViewCookie")中的“ListViewCookie”在第一次开始遍历的时候是不存在的对吗?因为在最后才创建了
Cookie cookie = new Cookie("ListViewCookie",list);
这个cookie对象。如果我第一次点击了id为1的商品
也就是说第一次遍历的时候 list=“1,”。
等到如果我第二次我点击了id为2的时候
list=“1,沃特篮球鞋,2”;
是酱紫吗?
我建议你实在理不清就这样理解。
假设代码是这样执行的:
--------------------------------第一次执行-------------------------------------------------------
String list ="";
list+=request.getParameter("id")+","; //这里相当于就是获取商品的id值并添加到字符串中
//如果浏览记录超过1000条,清零.
String[] arr = list.split(",");
if(arr!=null&&arr.length>0)
{
if(arr.length>=1000)
{
list="";
}
}
//设置一个cookie,名为ListView,值为list (而这里的list就是上面的request.getParameter("id")即商品的id)
Cookie cookie = new Cookie("ListViewCookie",list);
response.addCookie(cookie);
--------------------------------第二次执行-------------------------------------------------------
//从客户端获得Cookies集合
Cookie[] cookies = request.getCookies();
//遍历这个Cookies集合
if(cookies!=null&&cookies.length>0)
{
for(Cookie c:cookies)
{
//匹配是否有名为ListViewCookie的cookie
if(c.getName().equals("ListViewCookie"))
{
list = c.getValue(); //匹配到后获取cookie的值,覆盖原来的字符串。
}
}
}
所以有可能你最后获得的list就是“2,5,6,10,12,”只是商品的id而已,没有商品的名称...只用id即可确定某条具体信息。
我始终觉得你是以为代码始终就是从上到下执行,原本这是代码的执行方式没错,但是第一段代码并没有满足条件,所以会直接执行第2段,而下一次执行才会执行第1段,然后第2段
cookie本身是有生命周期的,即有个过期时间。
下面这段代码的用途是来判断是否有匹配的cookie,如果有,执行这行代码 list = c.getValue();
Cookie[] cookies = request.getCookies();
//遍历这个Cookies集合
if(cookies!=null&&cookies.length>0)
{
for(Cookie c:cookies)
{
if(c.getName().equals("ListViewCookie"))
{
list = c.getValue();
}
}
}
如果没有,则上面这段代码将不被执行,直接执行下面这段代码
list+=request.getParameter("id")+",";
//如果浏览记录超过1000条,清零.
String[] arr = list.split(",");
if(arr!=null&&arr.length>0)
{
if(arr.length>=1000)
{
list="";
}
}
Cookie cookie = new Cookie("ListViewCookie",list);
response.addCookie(cookie);
实际上项目第一次被执行的时候是先执行的第2段代码,然后第二次才是执行的第1段代码
---------------------------------------------------------------------------------------------------
至于cookie里面存的值:
举个例子,当我点击的id为1的商品, 则list=“1,”;
点击id为2的商品,则list ="1,2,";
因为 list+=request.getParameter("id")+","; 等同于 list = list + request.getParameter("id")+","
即重新覆盖原来字符串的意思。
Cookie[] cookies = request.getCookies();
//遍历这个Cookies集合
if(cookies!=null&&cookies.length>0)
{
for(Cookie c:cookies)
{
if(c.getName().equals("ListViewCookie"))
{
list = c.getValue();
}
}
}else{
Cookie cookie = new Cookie("ListViewCookie",list);
response.addCookie(cookie);
}
c.getName().equals("ListViewCookie"),这段代码是查找ListViewCookie,前面有条件 if(cookies!=null&&cookies.length>0),
Cookie cookie = new Cookie("ListViewCookie",list); response.addCookie(cookie);
这段代码应该放在前面if语句接else里面。
代码错了
不对,第二次的话应该是list="1,沃特篮球鞋2,"。
也就是说正确的话应该到第二次的时候list="沃特篮球鞋1,安踏运动鞋2"
但还是不懂。
JAVA遇见HTML——JSP篇
248278 学习 · 3071 问题
相似问题