#Q题目
要求:
显示上次访问页面时间,并添加清除Cookie功能
如下图:
清除Cookie
#A 代码
实现Cookie显示上次访问时间
package com.tcb.cookie;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*说明:
*1.该方式将时间直接以long类型存进Cookie
*2.从Cookie中取出值后,需要先做日期格式化,才能展示
*
*优点:避免某些电脑浏览器因为Cookie值存储长短限制不能显示上次访问时间
*
*比如:“2017-05-04 20:33:22”,日期转为该格式后,不能存进Cookie中,因为Cookie长度限制
* 但直接以--时间戳(long类型)--的方式,可以直接存进Cookie
*/
public class CookieServlet01 extends HttpServlet {
private static final long serialVersionUID = 1L;
public CookieServlet01() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//编码格式
response.setContentType("text/html;charset=utf-8");
PrintWriter writer=response.getWriter();
writer.write("上次访问时间:");
Cookie[] cookies=request.getCookies();
if(cookies!=null){
//遍历cookies,取出lastAccessTime这个cookie
for (int i = 0; i < cookies.length; i++) {
Cookie c=cookies[i];
if("lastAccessTime".equals(c.getName())){
//取值上次访问时间,并显示出来
String time=c.getValue();
time=new Date(Long.parseLong(time)).toLocaleString();
writer.write(String.valueOf(time));
}
}
}
writer.write("<a href="+request.getContextPath()+"/ClearCookieServlet>清除Cookie</a>");
//获取当前时间,并存储到Cookie中
Long currentTime=System.currentTimeMillis();
Cookie cookie=new Cookie("lastAccessTime", currentTime.toString());
cookie.setMaxAge(5*60);//设置Cookie有效时间,5min内关闭再打开浏览器Cookie会一直存在
response.addCookie(cookie);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
清除Cookie
package com.tcb.cookie;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 说明:
* 清楚Cookie
*/
public class ClearCookieServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ClearCookieServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//清除cookie
//清除cookie时,完全没必要先将cookie遍历出来,再去清除cookie,尽管下面的方法可以实现清除cookie
//我们可以根据cookie的特性,名字相同的cookie,后面设置的值会覆盖前面的值
/*Cookie[] cookies=request.getCookies();
if(cookies!=null){
for (Cookie cookie : cookies) {
if("lastAccessTime".equals(cookie.getName())){
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
}*/
//便捷做法
Cookie cookie=new Cookie("lastAccessTime", "");
cookie.setMaxAge(0);
response.addCookie(cookie);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}