当访问某些web应用可显示用户上次访问时间,利用cookie实现.设置cookie的name为lastAccess,value的值为lastAccessTime。
package cn.edu.bdu.mc;
import java.io.IOException;
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;
@WebServlet("/LastAccessServlet")
public class LastAccessServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
/*
* 设定一个 cookie 的name : lastAccessTime 读取客户端发送cookie 获得用户上次的访问时间显示
*/
String lastAccessTime = null;
// 获取所有的cookie,并将这些cookie存放在数组中
Cookie[] cookies = request.getCookies();
for (int i = 0; cookies != null && i < cookies.length; i++) {
if ("lastAccess".equals(cookies[i].getName())) {
// 如果cookie的名称为lastAccess,则获取该cookie的值
lastAccessTime = cookies[i].getValue();
break;
}
}
// 判断是否存在名称为lastAccess的cookie
if(lastAccessTime!=null){
response.getWriter().print("您上次的访问时间" + lastAccessTime);
}else{
response.getWriter().print("您是首次访问本站!!!");
}
// 创建cookie,将当前时间作为cookie的值发送给客户端
String currenttime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
Cookie cookie = new Cookie("lastAccess",currenttime);
cookie.setMaxAge(60 * 60);// 保存1小时
// 访问chapter006下资源时回送cookie
cookie.setPath("/chapter006");
// 发送 cookie
response.addCookie(cookie);
}
}
在tomcat8.3.5上抛出异常java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value。
这句话的意思是 一个不识别的字符[32]出现在了cookie当中 由于tomcat的版本比较高,所以在addCookie时是不能使用空格的 而在ASCII码中32对应的就是空格。只要把后台代码中的空格删掉就可以了。
通过借鉴https://blog.csdn.net/Rain_JN/article/details/75912083?locationNum=4&fps=1帖子 可在d和h之间显示出空格
可以在获取当前登录时间时,使用URLEncoder编码,再设置为cookie的值;在获取cookie的value值的时候,使用URLDecoder解码 在输出的时候使用utf-8输出中文
关于URLEncoder编码和URLDecoder解码可参照https://blog.csdn.net/justloveyou_/article/details/57156039这篇帖子
package cn.edu.bdu.mc;
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 LastAccessServlet02
*/
@WebServlet("/LastAccessServlet02")
public class LastAccessServlet02 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LastAccessServlet02() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String currenttime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
currenttime = URLEncoder.encode(currenttime, "UTF-8");
Cookie cookie = new Cookie("lastAccess",currenttime);
cookie.setMaxAge(60 * 60);// 保存1小时
// 访问chapter006下资源时回送cookie
cookie.setPath("/chapter006");
// 发送 cookie
response.addCookie(cookie);
String lastAccessTime = null;
Cookie[] cookies = request.getCookies();
for (int i = 0; cookies != null && i < cookies.length; i++) {
if ("lastAccess".equals(cookies[i].getName())) {
// 如果cookie的名称为lastAccess,则获取该cookie的值
lastAccessTime = URLDecoder.decode(cookies[i].getValue(),"utf-8");
break;
}
}
response.setContentType("text/html;charset=UTF-8");
// 判断是否存在名称为lastAccess的cookie
if(lastAccessTime!=null){
response.getWriter().print("您上次的访问时间" + lastAccessTime);
}else{
response.getWriter().print("您是首次访问本站!!!");
}
}
/**
* @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);
}
}