Board logo

标题: jsp页面清除缓存 [打印本页]

作者: look_w    时间: 2019-5-11 13:41     标题: jsp页面清除缓存

有一种应用场景是,  用户点击返回按钮回到页面后,需要清除页面的缓存,不记录用户的操作。


这就需要清除页面的缓存 或者 对页面继续刷新。


在网上看了很多资料都是如下方法,但在jsp页面中并不起作用。


方法一: 在jsp页里

    <%response.setHeader("Pragma","No-cache");
    response.setHeader("Cache-Control","no-cache");
    response.setDateHeader("Expires", 0);
    response.flushBuffer();%>



方法二:在jsp<head></head>里

    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
    <META HTTP-EQUIV="Expires" CONTENT="0">


亲测这两种方法都无效。



考虑到 如果客户端缓存了页面的话,页面上的 input带的值也会缓存下来,所以可以用input带的值来 进行判断 是否需要 reload 刷新。

下面的代码思路是 一进页面就运行 js代码,进页面判断input的值,如果不是yes就赋值yes就给input 赋值yes。

如果是yes,就reload。

也就是说 第二次进入同一个页面 就会reload( 点击返回按钮也算第二次进入)。


这样就能实现了 用户点击返回按钮回到页面后,需要清除页面的缓存。

实现代码如下:

js

      <script type="text/javascript">
    function pageNoCache(url){
        //<input type="hidden" id="page_no_cache" data-description="magic_methon_dont_touch_me_fuck_x5" value="no">
        var ele = document.getElementById('page_no_cache');
        if(ele != null){
            //alert(ele.value);
            ele.value == 'yes' ? (url ? location.replace(url) : location.reload()) : ele.value = 'yes';
        } else {
            alert('页面需要一个id为page_no_cache的隐藏input,详见此方法');
        }
    }
         pageNoCache();
      </script>


jsp页面中加入input

<input type="hidden" id="page_no_cache" data-description="magic_methon_dont_touch_me_fuck_x5" value="no">


ps:

reload 方法,该方法强迫浏览器刷新当前页面。
语法: location.reload([bForceGet])
参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取当前页。true, 则以 GET 方式,从服务端取最新的页面, 相当于客户端点击 F5("刷新")



replace 方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,你不能通过“前进”和“后退”来访问已经被替换的URL。
语法: location.replace(URL)
在实际应用的时候,重新刷新页面的时候,我们通常使用: location.reload() 或者是 history.go(0) 来做。因为这种做法就像是客户端点F5刷新页面,所以页面的method="post"的时候,会出现“网页过期”的提示。那是因为Session的安全保护机制。可以想到: 当调用 location.reload() 方法的时候, aspx页面此时在服务端内存里已经存在, 因此必定是 IsPostback 的。如果有这种应用: 我们需要重新加载该页面,也就是说我们期望页面能够在服务端重新被创建, 我们期望是 Not IsPostback 的。这里,location.replace() 就可以完成此任务。被replace的页面每次都在服务端重新生成。你可以这么写: location.replace(location.href)




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0