何谓页面缓存?简单的说就是,试试IE或者firefox工具栏的前进/后退按钮,就知道了.也就是说,浏览器会先将页面缓存,待下次使用时,就直接从缓存里面取数据,而不重web server重新获取数据.从而减少了server的压力.
但凡事就利就有弊。比如web页面的登陆,如何退出呢?当然在servlet可以用
session.removeAttribute("LogName");
session.invalidate();
但,仅这样是不完善的。如果用户没有及时将浏览器关闭的话,那么按“后退”按钮,就有可能造成不安全因素了(因为用户并没有真正的退出)。
好在http协议可以自定义缓存页面。示例如下:
一般来说,web页面都有一个登陆按钮。登陆按钮映射servlet或struts action等等。也就是说,登陆动作后,一般都是跳转至主页。所以在sendRedirect或forward动作之前加入清除缓存代码:
servlet
session.setAttribute("logName", logName);//用户写入session //清除页面 response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setHeader("Cache-Control", "no-store"); response.setDateHeader("Expires", 0); //跳转页面 RequestDispatcher requestDispatcher = null; requestDispatcher = request.getRequestDispatcher("index.jsp"); requestDispatcher.forward(request,response);
struts2
HttpServletResponse response = ServletActionContext.getResponse(); //清除登陆页面缓存 response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setHeader("Cache-Control", "no-store"); response.setDateHeader("Expires", 0); //页面重定位,倒计时。 String URL = "index.jsp"; String content=3+";URL="+URL;//3秒后进入主页 response.setHeader("REFRESH",content);
这样在调用session.invalidate()后,再按IE或firefox退出按钮时,就会出现页面已过期的提示了。
response.setHeader("REFRESH",content);
是实现倒计时跳转页面