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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 让容器管理更轻松!