JavaWeb16.3【Cookie&Session:Cookie案例-记住上一次访问时间】
1 package com.haifei.cookie; 2 3 import javax.servlet.ServletException; 4 import javax.servlet.annotation.WebServlet; 5 import javax.servlet.http.Cookie; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 import java.io.IOException; 10 import java.net.URLDecoder; 11 import java.net.URLEncoder; 12 import java.text.SimpleDateFormat; 13 import java.util.Date; 14 15 /** 16 * Cookie案例-记住上一次访问时间 17 * 18 * 在服务器中的Servlet判断是否有一个名为lastTime的cookie 19 * 1. 有:不是第一次访问 20 * 1. 响应数据:欢迎回来,您上次访问时间为:2018年6月10日11:50:01 21 * 2. 写回Cookie:lastTime=2018年6月10日11:50:20 22 * 2. 没有:是第一次访问 23 * 1. 响应数据:您好,欢迎您首次访问 24 * 2. 写回Cookie:lastTime=2018年6月10日11:50:01 25 * 26 */ 27 @WebServlet("/CookieTest") 28 public class CookieTest extends HttpServlet { 29 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 30 //设置响应的消息体的数据格式以及编码,防止中文乱码 31 response.setContentType("text/html;charset=utf-8"); 32 33 //1 获取所有cookie 34 Cookie[] cookies = request.getCookies(); 35 boolean flag = false; //false表示没有名为lastTime的cookie 36 37 //2 遍历cookie数组 38 if (cookies!=null && cookies.length>0){ 39 for (Cookie cookie : cookies) { 40 //3 获取cookie的名称 41 String name = cookie.getName(); 42 //4 判断cookie名称是否为"lastTime" 43 if ("lastTime".equals(name)){ 44 //有该cookie,说明不是第一次访问 45 flag = true; 46 47 //(1) 响应数据 48 String value = cookie.getValue(); 49 //----------------------------------------- 50 //URL解码 51 System.out.println("解码前:" + value); 52 value = URLDecoder.decode(value, "utf-8"); 53 System.out.println("解码后:" + value); 54 //----------------------------------------- 55 response.getWriter().write("<h1>欢迎回来,您上次访问时间为:" + value + "</h1>"); 56 57 //(2) 写回Cookie 58 Date date = new Date(); 59 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); 60 String str_date = sdf.format(date); 61 //----------------------------------------- 62 //URL编码(在tomcat8之后,cookie支持中文数据,但如空格等特殊字符还是不支持) 63 System.out.println("编码前:" + str_date); 64 str_date = URLEncoder.encode(str_date, "utf-8"); 65 System.out.println("编码后:" + str_date); 66 //----------------------------------------- 67 cookie.setValue(str_date); 68 cookie.setMaxAge(60 * 60 * 24 * 30); //设置缓存一个月 69 response.addCookie(cookie); 70 71 break; 72 } 73 } 74 } 75 76 if (cookies==null || cookies.length==0 || flag==false){ 77 //无该cookie,说明是第一次访问 78 flag = true; 79 80 //(1) 响应数据 81 response.getWriter().write("<h1>您好,欢迎您首次访问</h1>"); 82 83 //(2) 写回Cookie 84 Date date = new Date(); 85 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); 86 String str_date = sdf.format(date); 87 //----------------------------------------- 88 //URL编码 89 System.out.println("编码前:" + str_date); 90 str_date = URLEncoder.encode(str_date, "utf-8"); 91 System.out.println("编码后:" + str_date); 92 //----------------------------------------- 93 Cookie c = new Cookie("lastTime", str_date); 94 c.setMaxAge(60 * 60 * 24 * 30); //设置缓存一个月 95 response.addCookie(c); 96 } 97 } 98 99 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 100 this.doPost(request, response); 101 } 102 }