servlet及struts2清除页面缓存问题


何谓页面缓存?简单的说就是,试试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);
   是实现倒计时跳转页面。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值