web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<welcome-file-list>
<welcome-file>login.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Login</servlet-name>
<servlet-class>com.exercise.login.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
</web-app>
核心代码
package com.exercise.login;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Login extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置字符编码方式
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
String lastAccessTime=null;
Cookie[]cookies=request.getCookies();
// 遍历Cookie数组,取出上次访问时间
for(int i=0;cookies!=null&&i<cookies.length;i++){
if("lastAccess".equals(cookies[i].getName())){
lastAccessTime=URLDecoder.decode(cookies[i].getValue());
break;
}
}
// 用户第一次请求时,lastAccessTime为null
// 非第一次请求时,lastAccessTime不为null
if(lastAccessTime==null){
response.getWriter().print("你是首次访问本站!");
}else {
response.getWriter().print("你上次的访问时间是:"+lastAccessTime);
}
// 每次进入都需要将当前时间更新进Cookie,覆盖原来记录的时间
// 设置过期时间 10天
/**
* 关于设置Cookie的value时报错:Cookie值中存在无效字符 的问题
* 此处应在设置时统一编码和解码方式:
* Cookie cookie=new Cookie("lastAccess", URLEncoder.encode(currentTime));
* lastAccessTime=URLDecoder.decode(cookies[i].getValue());
*/
String currentTime=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
Cookie cookie=new Cookie("lastAccess", URLEncoder.encode(currentTime));
cookie.setMaxAge(10*24*60*60);
response.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}