案例:访问一个网页,如果第一次访问显示“欢迎您首次登录”否则显示上次登录时间

一、需求:

  • 访问一个网页,如果是首次登录,显示“欢迎您首次登录”
  • 否则显示:欢迎回来,您上次的登录时间为:显示时间字符串

二、分析:

  • 1.可以采用Cookie来完成

  • 2.在服务器中的Servlet判断是否有一个名为lastTime的cookie

    1.有:表示不是第一次访问,通过cookie.getValue()获得响应数据
    通过Date把当前新的时间写入cookie
    2.没有:表示是第一次访问,响应数据:您好,欢迎您首次访问,通过Date把当前时间写入cookie:lasttime:2020年10月13日16:02:30

三、代码展示

package com.Demo;

import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class CookieTest
 */
@WebServlet("/CookieTest")
public class CookieTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public CookieTest() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//编码
		response.setContentType("text/html;charset=utf-8");
		//1.获取所有Cookie
		Cookie[] cookies = request.getCookies();
		//2.遍历Cookie数组,看是否有lasttime
		if(cookies!=null && cookies.length>0) {
			for(Cookie cookie :cookies) {
				//3.获取cookie的名称
				String name = cookie.getName();
				//4.判断名称是否是:lasttime
				if("lasttime".equals(name)) {
					//是:不是第一次访问
					//响应数据
					String value1 = cookie.getValue();
					String value2 = URLDecoder.decode(cookie.getValue(), "UTF-8");//cookie使用utf-8编码 
					response.getWriter().println("欢迎回来,您上次访问的时间为"+value2);
					//对于cookie.getValue())不需要编码再解码,因为他本身就是编码后的值
					
					Date date = new Date();
					SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
					String str1 = sdf.format(date);//本次的访问时间
					//编码
					String str2 = URLEncoder.encode(str1);
					//给value重新赋值
					cookie.setValue(str2);
					//设置cookie的存活时间
					cookie.setMaxAge(60*60*24*30);//一个月
					response.addCookie(cookie);
					break;
				}
			}
		}
		if(cookies==null||cookies.length==0) {
			//没有 第一次访问
			Date date = new Date();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
			String str1 = sdf.format(date);
			String str2 = URLEncoder.encode(str1);//进行编码
			Cookie cookie = new Cookie("lasttime",str2);
			//设置cookie的存活时间
			cookie.setMaxAge(60*60*24*30);//一个月
			response.addCookie(cookie);
			//获取Cookie的value,时间
			response.getWriter().println("您好,欢迎首次登录!");
		
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

四、运行结果

在这里插入图片描述

在Java Web应用中,为了存储用户上次访问时间并通过Cookie展示给用户,你可以按照以下步骤操作: 1. **设置Cookie**: 当用户访问应用时(比如登录成功),服务器端可以创建一个`HttpSession`对象,然后在其中保存用户上次访问时间戳。接着,使用`javax.servlet.http.HttpServletResponse`的`setCookie()`方法创建一个新的Cookie,设置名称、(通常是时间戳字符串)、过期时间和路径。 ```java // 示例代码 HttpSession session = request.getSession(); long lastVisitTime = session.getLastAccessedTime().getTime(); // 获取时间戳 Date expirationDate = new Date(System.currentTimeMillis() + 60 * 60 * 1000); // 过期时间为一小时后 Cookie cookie = new Cookie("lastVisit", Long.toString(lastVisitTime)); cookie.setMaxAge(expirationDate.getTime() - System.currentTimeMillis()); // 设置过期时间 response.addCookie(cookie); ``` 2. **读取Cookie**: 用户再次访问应用时,服务端可以通过`HttpServletRequest`的`getCookies()`方法获取所有Cookie,然后查找名为"lastVisit"的Cookie,解析出时间戳,并计算实际的时间。 ```java Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { if ("lastVisit".equals(cookie.getName())) { long lastVisitTimestamp = Long.parseLong(cookie.getValue()); Date lastVisitDate = new Date(lastVisitTimestamp); // 显示用户上次访问时间 out.println("上次访问时间:" + lastVisitDate); break; } } } ``` 注意:这种方法依赖于客户端浏览器支持Cookie,并且如果用户禁用了Cookie,或者清理了浏览器缓存,那么上次访问信息将不再可用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值