思路如下:
为了便于后期的操作,所以使用collection,其中使用collection中的contains方法更加严谨点,因为contains方法不止判断值是否相同,也会判断类型是否相同,并且collection中的实现内linkedList中针对集合操作更加方便,如:addFirst(),removelast(),在cookie中我们拿到的value值是字符串,把字符串转换成集合的话我们可以借助Arrays工具类的asList()方法,它会把数据转化为一个collection的集合,但是由于不知道是是具体那种集合,所有得用linkedList的构造方法把这个collection接口转换为linkedList。
1.1 首先判断指定的cookie存不存在
1.1.1
假如不存在
则直接把拿到的id,添加到新创建的cookie中去,并且设置cookie的最大生命时间,响应给浏览器
假如存在
我们拿到cookie中的value值转换,完成后我们首先判断是否在我们规定范围内的数量,
是的话则判断是否重复,
有的话则romove()掉,并且把我们拿到的id添加到linkedList第一位
没有的话则直接把id添加到linkedList的第一位
不是的话判断是否重复
有的话则romove()掉,并且把我们拿到的id添加到linkedList第一位
没有的话则删除最后一位的id,并拿传入的id添加到linkedList的第一位
1.2 最后把linkedList转化为字符串,并且对相应内容做判断,判断是否是最后一位
是的话,则拼接的时间不添加分隔符
不是的话,则添加相应的分隔符号
把字符串添加到cookie中,并且设置cookie的最大生命时间,响应给到浏览器中去
代码如下:
Cookie newCookie = null;
Cookie[] cookies = request.getCookies();
String string = null;
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies;
if ("hist".equals(cookie.getName())) {
string = cookie.getValue();
break;
}
}
}
System.out.println(string);
if (cookies == null || string == null) {
newCookie = new Cookie("hist", commodityId);
newCookie.setMaxAge(1 * 30 * 24 * 60 * 60);
response.addCookie(newCookie);
} else {
String[] split = string.split(",");
LinkedList<String> linkedList = new LinkedList<>(Arrays.asList(split));
if (linkedList.size() < 3) {
if (linkedList.contains(commodityId)) {
linkedList.remove(commodityId);
linkedList.addFirst(commodityId);
} else {
linkedList.addFirst(commodityId);
}
} else {
if (linkedList.contains(commodityId)) {
linkedList.remove(commodityId);
linkedList.addFirst(commodityId);
} else {
linkedList.removeLast();
linkedList.addFirst(commodityId);
}
}
String str = "";
for (int i = 0; i < linkedList.size(); i++) {
if (i == linkedList.size() - 1) {
str += linkedList.get(i);
} else {
str += linkedList.get(i) + ",";
}
}
System.out.println(str);
newCookie = new Cookie("hist", str);
newCookie.setMaxAge(1*30*24*60*60);
response.addCookie(newCookie);
}
本文出自 “11373021” 博客,请务必保留此出处http://11383021.blog.51cto.com/11373021/1900793
原文地址:http://11383021.blog.51cto.com/11373021/1900793