[原创]java WEB学习笔记30:Cookie Demo 之显示最近浏览的记录

Posted jason_zhangz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[原创]java WEB学习笔记30:Cookie Demo 之显示最近浏览的记录相关的知识,希望对你有一定的参考价值。

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

本人互联网技术爱好者,互联网技术发烧友

微博:伊直都在0221

QQ:951226918

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 1.Demo 需求: 显示最近浏览的 5 本书的 title

 2.代码结构 books.jsp  book.jsp

  1)books.jsp :  显示最近浏览的 5 本书  ① 获取所有的 Cookie   ② 从中筛选出 Book 的 Cookie:如果 cookieName 为 ATGUIGU_BOOK_ 开头的即符合条件 ③ 显示 cookieValue

  2)book.jsp :   把书的信息以 Cookie 方式传回给浏览器,

          ① 删除一个 Cookie 确定要被删除的 Cookie: ATGUIGU_BOOK_ 开头的 Cookie 数量大于或等于 5,且

            若从 books.jsp 页面传入的 book 不在 ATGUIGU_BOOK_ 的 Cookie 中则删除较早的那个 Cookie( ATGUIGU_BOOK_ 数组的第一个 Cbookie),

            若在其中,则删除该 Cookie  

          ② 把从 books.jsp 传入的 book 作为一个 Cookie 返回

 

3.代码:

 

  1)books.jsp

 

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>books jsp</title>
 8 </head>
 9 <body>
10 
11     <h4>Book page</h4>
12     <a href="book.jsp?book=JavaWeb">Java Web</a><br><br>
13     <a href="book.jsp?book=Java">Java </a><br><br>
14     <a href="book.jsp?book=Oracle">Oracle</a><br><br>
15     <a href="book.jsp?book=Ajax">Ajax</a><br><br>
16     <a href="book.jsp?book=javascript">JavaScript</a><br><br>
17     <a href="book.jsp?book=android">Android</a><br><br>
18     <a href="book.jsp?book=Jbpm">jbpm</a><br><br>
19     <a href="book.jsp?book=Struts">Struts</a><br><br>
20     <a href="book.jsp?book=Hibernate">Hibernate</a><br><br>
21     <a href="book.jsp?book=Spring">Spring</a><br><br>
22     
23     <!-- 
24      -->
25      
26      <%
27     //    显示最近浏览的 5 本书
28     //    1.获取所有的 Cookie
29     Cookie[]  cookies = request.getCookies();
30         if(cookies != null && cookies.length > 0){
31             
32             for(Cookie cookie : cookies){
33                 
34                 if(cookie.getName().startsWith("JASON_BOOK_")){
35                     out.println(cookie.getValue());
36                     out.print("<br>");
37                 
38                     }
39                 }
40         }
41     //    2.从中筛选出 Book 的 Cookie:如果 cookieName 为 JASON_BOOK_ 开头的即符合条件
42     //    3.显示 cookieValue
43      
44      
45      %>
46 </body>
47 </html>

 

  

  2)book.jsp

 

 1 <%@page import="javax.print.attribute.ResolutionSyntax"%>
 2 <%@ page language="java" contentType="text/html; charset=UTF-8"
 3     pageEncoding="UTF-8"%>
 4 <%@page import="java.util.ArrayList"%>
 5 <%@page import="java.util.List"%>
 6 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 7 <html>
 8 <head>
 9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
10 <title>book jsp</title>
11 </head>
12 <body>
13     <h4>Book detial page</h4>
14     Book:<%= request.getParameter("book") %>
15     
16     <br><br>
17     
18     <a href="books.jsp">Return</a>
19     
20     <!-- 
21     把书的信息以 Cookie 方式传回给浏览器,删除一个 Cookie
22      -->
23     <%
24         
25     //1. 确定要被删除的 Cookie:
26     
27     //前提:ATGUIGU_BOOK_ 开头的 Cookie 数量大于或等于 528     String book = request.getParameter("book");
29     Cookie[]  cookies = request.getCookies();
30     
31     //保存所有的JASON_BOOK_ 开头的cookie
32     List<Cookie> bookCookies = new ArrayList<Cookie>();
33     
34     //用来保存和books.jsp 传入的book 匹配的cookie
35     Cookie tempCookie = null;
36     
37      if(cookies != null && cookies.length > 0){
38         for(Cookie cookie : cookies){
39             if(cookie.getName().startsWith("JASON_BOOK_")){
40                 bookCookies.add(cookie);
41             
42                 if(cookie.getValue().equals(book)){
43                      tempCookie = cookie;
44                 }
45                 
46             }
47         }
48     }
49     // ① 且若从 books.jsp 页面传入的 book 不在 JASON_BOOK_ 的 Cookie 中则删除较早的那个 Cookie( JASON_BOOK_ 数组的第一个 Cookie),
50     if(bookCookies.size() >= 5 && tempCookie == null){
51          tempCookie = bookCookies.get(0);
52     }
53     
54     // ② 若在其中,则删除该 Cookie
55     if(tempCookie != null){
56         tempCookie.setMaxAge(0);
57         response.addCookie(tempCookie);
58     }
59         
60     //2. 把从 books.jsp 传入的 book 作为一个 Cookie 返回
61     Cookie cookie =new Cookie("JASON_BOOK_"+book,book);
62     response.addCookie(cookie);
63     
64     %>
65 </body>
66 </html>

 

 

示意图:

  

 

分析:当 JDBC 提交到book.jsp 的时候,属于第一种情况,则删除 先前的按个JDBC ;当 PL/SQL 提交到 book.jsp 时候 ,属于第二种情况,则删除 最开始的那个cookie

 

4. 总结: 理解和使用 cookie的 API

 

以上是关于[原创]java WEB学习笔记30:Cookie Demo 之显示最近浏览的记录的主要内容,如果未能解决你的问题,请参考以下文章

[原创]java WEB学习笔记28: 会话与状态管理Cookie 机制

[原创]java WEB学习笔记11:HttpServlet

[原创]java WEB学习笔记10:GenericServlet

[原创]java WEB学习笔记18:java EE 中的MVC 设计模式

[原创]java WEB学习笔记08:ServletResponse & HttpServletResponse

[原创]java WEB学习笔记20:案例完整实践(part 1)---MVC架构分析