cookie的案例最近浏览的书

来源:互联网 发布:韩国rap知乎 编辑:程序博客网 时间:2024/04/29 06:31

一步:建一个书的数据库,用静态代码块实现,这样可以随在类一加载后就在内存中,不用随着构造函数每次都加载。

  要list所有书的方法,还有根据Id查询书的方法

private static HashMap<String, Book> bookMap = new HashMap<String, Book>();

static{
bookMap.put("1", new Book("1","西游记",998.0,"朴乾","一个和尚一头猪,一只猴子一个河童和一批马的故事"));
bookMap.put("2", new Book("2","水浒传",8.0,"刘德华","105个男人和3个女人的混乱的故事"));
bookMap.put("3", new Book("3","三国演义",98.0,"方老师","打来大去没完没了"));
bookMap.put("4", new Book("4","红楼梦",998.0,"郭富城","乱七八糟的故事"));
bookMap.put("5", new Book("5","金瓶梅",88.0,"武二郎","卖烧饼的故事"));
}
/**
* 获取所有书信息的方法
*/
public static HashMap<String, Book> getBookList(){
return bookMap;
}
/**
* 根据id获取书的方法
*/
public static Book getBook(String id){
return bookMap.get(id);

二部:遍历书在浏览器里展示

   点击查看书的详细

           展示浏览过的书


public class BookList extends HttpServlet {


public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//1.查询数据库获取书的信息
Map<String,Book> map = BookDao.getBookList();
//2.将书打印给浏览器
for(Map.Entry<String, Book> entry : map.entrySet()){
Book book = entry.getValue();
response.getWriter().write("<a href='"+request.getContextPath()+"/servlet/BookInfo?id="+book.getId()+"'>"+book.getName()+"</a><br>");
}
//3.打印经常看过的书
response.getWriter().write("<hr>曾今看过的书:<br>");
Cookie []  cs = request.getCookies();
Cookie findC = null;
if(cs!=null){
for(Cookie c : cs){
if("last".equals(c.getName())){
findC = c;
break;
}
}
}
if(findC == null){
response.getWriter().write("您还没有看过任何书!");
}else{
String [] ids =  findC.getValue().split(",");
for(String id : ids){
Book book = BookDao.getBook(id);
response.getWriter().write(book.getName()+"<br>");
}
}
}


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


}


}


三步:获取要查看书的Id

判读是否存在cookie的ID

如果没有则创建一个

如果有则,把书的id加入cookie值里面去。

public class BookInfo extends HttpServlet {


public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置字符码
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//1.获取当前要查询的书的详细信息
String id = request.getParameter("id");
Book book = BookDao.getBook(id);
//2.将详细信息打给浏览器展示
response.getWriter().write("<h1>书名:"+book.getName()+"</h1><hr>");
response.getWriter().write("<h3>作者:"+book.getAuth()+"</h3><br>");
response.getWriter().write("<h3>售价:"+book.getPrice()+"</h3><br>");
response.getWriter().write("<h3>详细信息:"+book.getDesc()+"</h3><br><hr>");
//3.写回一个cookie,last,保存最后看过的书
Cookie lastC = new Cookie("last","");
lastC.setPath(request.getContextPath());
lastC.setMaxAge(3600*24*30);

//--先获取之前看过的书,再拼接当前看的书,由此得到最后看过的三本书,最主要的思想:把cookie的值清空,重新赋值。
Cookie [] cs = request.getCookies();
Cookie findC = null;
if(cs!=null){
for(Cookie c : cs){
if("last".equals(c.getName())){
findC = c;
break;
}
}
}
if(findC == null){//之前没有看过别的书,则cookie里只放当前看的书的id即可
lastC.setValue(book.getId()+"");
}else{//有之前看过书的信息,则要进行计算,计算出最后看的三本书,输出
//1 -->2,1--> 2,1
//2,1-->3,2,1-->3,2,1
//3,2,1-->4,3,2-->4,3,2
//3,2,1-->2,3,1-->2,3,1
String [] infos = findC.getValue().split(",");
StringBuffer buffer = new StringBuffer();
buffer.append(book.getId()+",");
int count = 0;
for(int i=0;i<infos.length && count<2;i++){
if(!infos[i].equals(book.getId())){
buffer.append(infos[i]+",");
count++;
}
}
String info = buffer.substring(0, buffer.lastIndexOf(",")).toString();
//给cookie的值赋值
lastC.setValue(info);
}

response.addCookie(lastC);
}


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


}


}

原创粉丝点击