一、创建LastAccessServlet
该类主要用于实现获取Cookie信息并将当前时间作为Cookie值发送给客户端。
public class LastAccessServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 指定服务器输出内容的编码方式UTF-8,防止发生乱码
response.setContentType("text/html;charset=utf-8");
String lastAccessTime = null;
// 获取所有的cookie,并将这些cookie存放在数组中
Cookie[] cookies = request.getCookies();
// 遍历cookies数组
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("您是首次访问本站!!!");
} else {
response.getWriter().print("您上次的访问时间是: " + lastAccessTime);
}
// 创建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); //设置cookie最大存在时间
// 发送 cookie
response.addCookie(cookie);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
}
二、运行并访问
http://localhost:8080/chapter05/LastAccessServlet
第一次访问时
但服务器端报错了
java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value
cookie值中出现非法字符,这个字符是空格,cookie值就是时间字符串。
简单解决办法是把空格换成"-"。
String currentTime = new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss").format(new Date());
再次访问,就能在浏览器中获取到cookie
再访问一次就能拿到上次访问时间
当关闭浏览器后再次访问,又是首次访问,原因是默认情况下,cookie对象的Max-Age=-1,即浏览器关闭,就删除cookie对象。可以通过设置cookie有效时间来解决。
cookie.setMaxAge(60*60); //设置cookie最大存在时间