在用户访问我web应用的时候,显示上次访问的时间,这里只显示一次
public class LastAccessTimeFilter extends HttpFilter {
public void doFilter(HttpServletRequest request,HttpServletResponse response,FilterChain chain)throws IOException, ServletException {
//request.getSession()就会创建一个session,如果没有就会创建一个。isNew()方法为是否为新的session,如果是新的就提示上次访问的时间是,否则就不用老提示。
if(request.getSession().isNew()) {
// 拦截所有的请求
response.setContentType("text/html;charset=utf-8");
// 读取cookie name为lastAccessTime
Cookie[] cookies = request.getCookies();
String lastAccessTime = null;
//首次访问Cookie为空,当调用cookies.length就会报空指针异常
for(int i=0; cookies!=null&&i<cookies.length; i++) {
if("lastAccessTime".equals(cookies[i].getName())) {
lastAccessTime = cookies[i].getValue();
//当Cookie很多时,我只要找到了就跳出循环,这样效率会高
break;
}
}
if(lastAccessTime==null)
response.getWriter().print("您是首次访问本站" + "<hr>");
else
response.getWriter().print("您上次的访问时间是:" + lastAccessTime + "<hr>");
// 获得一个时间
Date date = new Date();
// 创建 cookie
Cookie cookie = new Cookie("lastAccessTime", date.toLocaleString());
// 必须设置缓存时间,否则当用户关闭浏览器后,会话结束了就没有Cookie了
cookie.setMaxAge(60*60*5);
// 设置有效路径,这样在访问我web应用的路径的时候就会带着cookie来,若果不设置cookie只在当前路径有效
cookie.setPath(request.getContextPath());
// 发送cookie
response.addCookie(cookie);
}
// 放行
chain.doFilter(request, response);
}
}