javaweb学习4_Cookie Demo之最近浏览记录
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 数量大于或等于 5, 28 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