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 @   yub4by  阅读(85)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示