Cookie存入用户游览记录:
这里直接存用户游览商品的ID
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//从请求参数中取出商品的ID
String pid = request.getParameter("pid");
//通过id读取商品的信息,
Product product = productService.findProducById(pid);
//将商品的信息放入request中。
request.setAttribute("product", product);
//将商品的ID存储到cookie中
//要考虑是否以及存在了浏览记录。
//如果已经存在浏览记录cookie,则将现在的ID添加到原来的浏览记录中
//从reuqest中区cookie
Cookie[] cookies = request.getCookies();//获取到所有的cookie
//保存浏览记录的cookie对象
Cookie readCookie = null;
//遍历cookies
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
//判断是否存在浏览记录的cookie
if(cookie.getName().equals("readId")){
//说明存在浏览记录的cookie
readCookie = cookie;
break;//跳出循环
}
}
if(readCookie!=null){//浏览记录cookie存在
//将当前的ID添加到原有的记录cookie中
//取出原有的浏览记录的ID
String ids = readCookie.getValue();//1_3434_54545_erer3434_3434
//直接将现在pid添加到原有的后面
//判断浏览记录的cookie中是否存在当前的商品
if(!ids.contains(pid)){//不存在就添加到后面
//当记录数量超过10的时候,就删除最前面的一个记录。
if(ids.split("_").length==10){
ids=ids.substring(ids.indexOf("_")+1);
}
//将最新的浏览记录的ID追加到最后
ids+="_"+pid;//
//再将ID设置到cookie中
readCookie.setValue(ids);
}
}else{
//如果没有浏览记录,则新创建浏览记录的cookie
readCookie = new Cookie("readId", pid);
}
readCookie.setPath("/");//设置cookie的路径为根目录
readCookie.setMaxAge(60*60*24*7);//设置cookie的存活时间为7天。一旦设置cookie的存活时间,cookie就会存储在磁盘上。
//将cookie设置到response中
response.addCookie(readCookie);
//转发到product_info.jsp
request.getRequestDispatcher("product_info.jsp").forward(request, response);
}
Cookie取出用户游览记录:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 通过cid读取商品列表
String cid = request.getParameter("cid");
int page = 1;
int size = 6;
try {
page = Integer.parseInt(request.getParameter("page"));
} catch (Exception e) {
}
try {
size = Integer.parseInt(request.getParameter("size"));
} catch (Exception e) {
}
// List<Product> products = productService.findProductsByCid(cid);
// request.setAttribute("products", products);
// 将查询全部修改为分页查询
Pager<Product> pager = productService.findByPage(cid, page, size);
request.setAttribute("pager", pager);
// 将cid再次携带到页面
request.setAttribute("cid", cid);
// 从cookie中取出readId
Cookie[] cookies = request.getCookies();// 获取所有的cookie
// 遍历找出浏览记录的cookie
Cookie readCookie = null;
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if (cookie.getName().equals("readId")) {
readCookie = cookie;
break;
}
}
//判断是否已经拿到浏览记录的cookie
if(readCookie!=null){//说明已经获取到浏览记录的cookie
//取出id字符串
String ids = readCookie.getValue();
// 分割id
String[] pids = ids.split("_");
// 根据pid的数组,从底层中查询浏览记录的商品信息列表
//只窃取数组的最后7位。
pids = Arrays.copyOfRange(pids, pids.length-7<0?0:pids.length-7, pids.length);
List<Product> rproducts = productService.findByIds(pids);
// 将浏览记录的商品信息列表存储在request中
request.setAttribute("rproducts", rproducts);
}
// 转发到列表页面
request.getRequestDispatcher("product_list.jsp").forward(request, response);
}