利用Cookie记录商品浏览信息
Web客户端和Web服务端是基于Http协议进行通信的,Http协议具有无状态的特点,服务端只能被动的受理客户端的Http请求,并且不知道该Http是来自于那个客户端。
在实际开发环境中,为了能让服务器在一定程度上可以识别客户端,常利用会话技术来保存客户端和服务端之间的共同信息,通过这些信息,服务器可以获得客户端的一些状态。通过将信息保存在客户端和服务端,会话技术右细分为两类:Cookie和Session。Cookie和Session的一个重要的区别就是Cookie将信息保存在客户端,Session将信息保存在服务端。本案例涉及Cookie的基本用法,并且在Cookie的基础上完成商品浏览信息的记录。
1.基础声明
pid字段是数据库中product表记录的主键,是product的唯一标识,通过pid字段可以唯一的查询到商品信息。select* from product where pid =?
2.实现思路
图 2-1实现思路
在上述的实现思路中,主要涉及两个部分的内容:
2.1是如何创建一个Cookie可以保存浏览过的商品的Pid
在此种需求下,不难分析出,有很多个商品浏览记录,也就是需要保存多个pid的值,但是每一个Cookie只能保存一个键值对(Key-value),可以创建多个Cookie保存多个键值队,但是这样开销过大,为了降低开销我们采取拼串的方法利用一个Cookie保存键值对。下面贴出创建Cookie拼串的代码。
Cookie[] cookieArray = request.getCookies();
String recorder="";
if(cookieArray!=null){
for(Cookie cookie:cookieArray){
//recorder是预先设计的Key值
if("recorder".equals(cookie.getName())){
recorder =cookie.getValue();
//这里预先设置每个pid之间利通“-”分割
String [] pids = recorder.split("-");
//保证List集合中没有重复pid
//并且最新的pid永远放在链表的前面
//这里常进行插入操作,所以用链表
List<String> list =Arrays.asList(pids);
LinkedList<String>linkedList =new LinkedList<String>(list);
if(recorder.contains(id)){
linkedList.remove(id);
}
linkedList.addFirst(id);
StringBuffer stringBuffer = new StringBuffer();
//从链表中恢复前num个字符串,
for(int i=0;i<linkedList.size()&&i<7;i++){
stringBuffer.append(linkedList.get(i)+"-");
}
recorder= stringBuffer.toString();
recorder=recorder.substring(0,recorder.length()-1);
}
}
cookie ck= new Cookie("recorder",recorder);
ck.setMaxAge(60*60*24);
response.addCookie(ck);2.2 如何从 Cookie 解析出商品的 pid ,借助解析的 pid ,查询数据库将结果返回。 2.2.1 Web层代码 2.2.2 Service层代码2.2.3 Dao层代码 |
版权声明:本文为qq_30322803原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。