cookie - 提示上一次访问该网页的时间
案例:记住上一次访问时间
1. 需求:
1. 访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问。
2. 如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串
2. 分析:
1. 可以采用Cookie来完成
2. 在服务器中的Servlet判断是否有一个名为lastTime的cookie
1. 有:不是第一次访问
1. 响应数据:欢迎回来,您上次访问时间为:2018年6月10日11:50:20
2. 写回Cookie:lastTime=2018年6月10日11:50:01
2. 没有:是第一次访问
1. 响应数据:您好,欢迎您首次访问
2. 写回Cookie:lastTime=2018年6月10日11:50:00
注意点:
1. 获取PrintWriter流之前必须设置编码
response.setContentType("text/html;charset=utf-8");
2. cookie中不能包含特殊字符,比如空格,所以要进行编码以及解码
1 package cn.itcast.web.servlet; 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 @WebServlet("/cookieServlet") 16 public class CookieServlet extends HttpServlet { 17 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { 18 // 获取PrintWriter流之前设置响应的消息体的数据格式以及编码 19 response.setHeader("content-type", "text/html;charset=utf-8"); 20 21 // 1.获取所有Cookie 22 Cookie[] cookies = request.getCookies(); 23 boolean flag = false; // 没有叫做lastTime名称的cookie 24 25 // 2.遍历cookie数组 26 if (cookies != null) { 27 for (Cookie cookie : cookies) { 28 if (cookie.getName().equals("lastTime")) { // 不是第一次访问 29 flag = true; 30 31 String value = cookie.getValue(); 32 value = URLDecoder.decode(value, "utf-8"); // URL解码 33 response.getWriter().write("欢迎回来,您上次的访问时间是" + value); 34 35 // 将cookie的value值改为此次登录的时间,重新发送cookie 36 Date date = new Date(); 37 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); 38 String str_date = sdf.format(date); 39 str_date = URLEncoder.encode(str_date, "utf-8"); // URL编码,因为str_date中包含空格,如果不进行URL编码将会报错 40 cookie.setValue(str_date); 41 cookie.setMaxAge(30 * 24 *60 *60); // 设置cookie的存活时间 42 response.addCookie(cookie); 43 break; 44 } 45 } 46 } 47 48 if (cookies == null || flag == false){ // 第一次访问 49 response.getWriter().write("<h1>您好,欢迎您首次访问<h1>"); 50 51 Date date = new Date(); 52 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); 53 String str_date = sdf.format(date); 54 str_date = URLEncoder.encode(str_date, "utf-8"); 55 Cookie cookie = new Cookie("lastTime", str_date); 56 cookie.setMaxAge(30 * 24 *60 *60); 57 response.addCookie(cookie); 58 } 59 60 61 } 62 63 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 64 this.doPost(request, response); 65 } 66 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南