Java使用cookie显示最近查看过的书

 更新时间:2016年04月19日 16:17:40   作者:zqwang121  
这篇文章主要为大家详细介绍了Java使用cookie显示最近查看过的书,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Java使用cookie显示最近查看过的书的相关方法,供大家参考,具体内容如下

1.ben包    

import java.io.Serializable;
 
public class Book implements Serializable {
 private String id;
 private String name;
 private String price;
 private String auth;
 private String publish;
 private String description;
  
 public Book() {
 }
  
 public Book(String id, String name, String price, String auth,
   String publish, String description) {
  super();
  this.id = id;
  this.name = name;
  this.price = price;
  this.auth = auth;
  this.publish = publish;
  this.description = description;
 }
 
 public String getDescription() {
  return description;
 }
 
 public void setDescription(String description) {
  this.description = description;
 }
 
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getPrice() {
  return price;
 }
 public void setPrice(String price) {
  this.price = price;
 }
 public String getAuth() {
  return auth;
 }
 public void setAuth(String auth) {
  this.auth = auth;
 }
 public String getPublish() {
  return publish;
 }
 public void setPublish(String publish) {
  this.publish = publish;
 }
 
}

2.Dao包    

import java.util.LinkedHashMap;
import java.util.Map;
 
import cn.huiyu.ben.Book;
 
 
 
public class BookDao {
 private static Map<String,Book> bookMap = new LinkedHashMap<String, Book>();
 private BookDao() {
 }
 static{
  bookMap.put("1", new Book("1","1111","11.0","zqwang","111出版社","111111111"));
  bookMap.put("2", new Book("2","2222","22.0","zqwang","222出版社","222222222"));
  bookMap.put("3", new Book("3","3333","33.0","zqwang","333出版社","333333333"));
 }
  
 public static Map<String,Book> getBooks(){
  return bookMap;
 }
  
 public static Book getBook(String id){
  return bookMap.get(id);
 }
}

3.servlet    

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("text/html;charset=utf-8");
  //1.查询数据库中所有的书展示
  Map<String,Book> map = BookDao.getBooks();
  for(Map.Entry<String , Book> entry : map.entrySet()){
   Book book = entry.getValue();
   response.getWriter().write("<a href='"+request.getContextPath()+"/servlet/BookInfoServlet?id="+book.getId()+"'>"+book.getName()+"</a><br>");
  }
  response.getWriter().write("<hr>");
   
  //2.显示之前看过的书
  Cookie [] cs = request.getCookies();
  Cookie findC = null;
  if(cs!=null){
   for(Cookie c : cs){
    if("last".equals(c.getName())){
     findC = c;
    }
   }
  }
  if(findC == null){
   response.getWriter().write("没有看过任何书!");
  }else{
   response.getWriter().write("您曾经浏览过的书:<br>");
   String[] ids = findC.getValue().split(",");
   for(String id : ids){
    Book book = BookDao.getBook(id);
    response.getWriter().write(book.getName()+"<br>");
   }
  }
 }

4.servlet

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("text/html;charset=utf-8");
  //1.获取要看的书的id,查询数据库找出书,输出书的详细信息
  String id = request.getParameter("id");
  Book book = BookDao.getBook(id);
  if(book==null){
   response.getWriter().write("找不到这本书!");
   return;
  }else{
   response.getWriter().write("<h1>书名:"+book.getName()+"</h1>");
   response.getWriter().write("<h3>作者:"+book.getAuth()+"</h3>");
   response.getWriter().write("<h3>售价:"+book.getPrice()+"</h3>");
   response.getWriter().write("<h3>出版社:"+book.getPublish()+"</h3>");
   response.getWriter().write("<h3>描述信息:"+book.getDescription()+"</h3>");
  }
   
  //2.发送cookie保存最后看过的书
  // --- 1 --> 1
  // 1 --2,1 --> 2,1
  // 2,1--3,2,1 --> 3,2,1
  // 3,2,1 -- 4,3,2 --> 4,3,2
  // 4,3,2 --3,4,2 --> 3,4,2
  String ids = "";
   
  Cookie [] cs = request.getCookies();
  Cookie findC = null;
  if(cs!=null){
   for(Cookie c : cs){
    if("last".equals(c.getName())){
     findC = c;
    }
   }
  }
   
  if(findC == null){
   //说明之前没有看过书的记录
   ids += book.getId();
  }else{
   //说明之前有历史看过的书的记录,需要根据历史记录算一个新的记录出来
   String [] olds = findC.getValue().split(","); 
   StringBuffer buffer = new StringBuffer();
   buffer.append(book.getId()+",");
   for(int i = 0;i<olds.length && buffer.toString().split(",").length<3 ;i++){
    String old = olds[i];
    if(!old.equals(book.getId())){
     buffer.append(old+",");
    }
   }
   ids = buffer.substring(0, buffer.length()-1);
  }
   
   
   
  Cookie lastC = new Cookie("last",ids);
  lastC.setMaxAge(3600*24*30);
  lastC.setPath(request.getContextPath());
  response.addCookie(lastC);
 }

以上就是本文的全部内容,希望对大家学习Java使用cookie显示最近查看过的书的方法有所帮助。

相关文章

  • springboot 使用上下文获取bean

    springboot 使用上下文获取bean

    这篇文章主要介绍了springboot 使用上下文获取bean,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Netty分布式Server启动流程服务端初始化源码分析

    Netty分布式Server启动流程服务端初始化源码分析

    本章主要讲解server启动的关键步骤, 读者只需要了解server启动的大概逻辑, 知道关键的步骤在哪个类执行即可, 并不需要了解每一步的运作机制, 之后会对每个模块进行深度分析
    2022-03-03
  • SpringBoot API增加version版本号方式

    SpringBoot API增加version版本号方式

    这篇文章主要介绍了SpringBoot API增加version版本号方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • java中实现Comparable接口实现自定义排序的示例

    java中实现Comparable接口实现自定义排序的示例

    下面小编就为大家带来一篇java中实现Comparable接口实现自定义排序的示例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Java定时任务的三种实现方式

    Java定时任务的三种实现方式

    这篇文章主要给大家介绍了关于Java定时任务的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • Mybatis逆向工程笔记小结

    Mybatis逆向工程笔记小结

    MyBatis官方为我们提供了一个逆向工程,通过这个逆向工程,只需要建立好数据表,MyBatis就会根据这个表自动生成pojo类、mapper接口、sql映射文件,本文主要介绍了Mybatis逆向工程笔记小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • springboot中JSONObject遍历并替换部分json值

    springboot中JSONObject遍历并替换部分json值

    这篇文章主要介绍了springboot中JSONObject遍历并替换部分json值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • FastJson时间格式化问题避坑经验分享

    FastJson时间格式化问题避坑经验分享

    这篇文章主要为大家介绍了FastJson时间格式化问题避坑经验分享,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • java中年月日的加减法使用示例

    java中年月日的加减法使用示例

    这篇文章主要介绍了java中年月日的加减法使用示例的相关资料,需要的朋友可以参考下
    2023-02-02
  • java利用递归调用实现树形菜单的样式

    java利用递归调用实现树形菜单的样式

    这篇文章主要给大家介绍了关于java利用递归调用实现树形菜单样式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09

最新评论