cookie应用 显示上次浏览商品的实现过程

来源:互联网 发布:ubuntu安装飞秋 编辑:程序博客网 时间:2024/05/21 12:42

public class CookieDemo1 extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
  response.setContentType("text/html;charset=utf-8");
  PrintWriter out = response.getWriter();
  
  //显示所有书名
  out.print("本网站的商品有:<br/>");
  BookDao bd = new BookDao();
  List<Book> list = bd.getAll();
  for(Book book:list){
   //System.out.println(book.getId());
   //out.print("<a href='/BookHistory/servlet/CookieDemo2'?id="+book.getId()+">"+book.getName()+"</a><br/>");
   out.print("<a href='/BookHistory/servlet/CookieDemo2?id="+book.getId()+"' target='_blank'>"+book.getName()+"</a><br/>");
  }
  
  
  
  
  //显示浏览过的书名   bookhistory=1,2,3
  out.print("你浏览过的商品:<br/>");
  Cookie[] cookies = request.getCookies();
  for(int i=0;cookies!=null && i<cookies.length;i++){
   if(cookies[i].getName().equals("bookhistory")){
    String[] ids = cookies[i].getValue().split(",");
    for(String id:ids){
     Book book = bd.getBook(id);
     out.print(book.getName()+"<br/>");
    }
   }
  }
  
  
  

 }

 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  doGet(request, response);
 }

}

 

 

 

 

public class CookieDemo2 extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
  response.setContentType("text/html;charset=utf-8");
  PrintWriter out = response.getWriter();
  
  //显示书的详细信息,根据id获取
  String id = request.getParameter("id");
  System.out.println(id);
  BookDao bd = new BookDao();
  Book book = bd.getBook(id);
  System.out.println(book);
  out.print("书号:"+book.getId()+"<br/>");
  out.print("书名:"+book.getName()+"<br/>");
  out.print("作者:"+book.getAuthor()+"<br/>");
  out.print("描述:"+book.getDescript()+"<br/>");
  
  
  
  
  
  
  String cookieValue = buildCookValue(id,request);
  Cookie cookie = new Cookie("bookhistory",cookieValue);
  cookie.setMaxAge(30*24*3600);
  cookie.setPath("/BookHistory");
  response.addCookie(cookie);
  
  

 }
 
 public String buildCookValue(String id,HttpServletRequest request){
  String bookhistory=null;
  Cookie[] cookies = request.getCookies();
  for(int i=0;cookies!=null && i<cookies.length;i++){
   if(cookies[i].getName().equals("bookhistory")){
    bookhistory = cookies[i].getValue();
   }
  }
  if(bookhistory == null){
   return id;
  }
  LinkedList<String> list = new LinkedList(Arrays.asList(bookhistory.split(",")));
  
  if(list.contains(id)){
   list.remove(id);
   list.addFirst(id);
  }else{
   //bookhistory=2,3,5   1  1,2,3
   //bookhistory=2,3     1  1,2,3
   if(list.size()>=3){
    list.removeLast();
    list.addFirst(id);
   }else{
    list.addFirst(id);
   }
   
  }
  StringBuffer sb = new StringBuffer();
  for(String bid: list){
   sb.append(bid+",");
  }
  
  return  sb.deleteCharAt(sb.length()-1).toString();
 }

 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  doGet(request, response);
 }

}

 

原创粉丝点击