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 }

 

 

 

 

 

 

 

posted @ 2021-07-02 16:52  yub4by  阅读(83)  评论(0编辑  收藏  举报