【问题标题】:how to clear browser cache programmatically in jsp?如何在jsp中以编程方式清除浏览器缓存?
【发布时间】:2012-07-05 04:18:39
【问题描述】:

在我的网络应用程序中,由于浏览器缓存存在一些问题。

加载我的jsp页面时如何清除浏览器缓存?

如何在 jsp 页面中包含清除缓存代码?

【问题讨论】:

    标签: java jsp


    【解决方案1】:

    您可以在 JSP 中对prevent from caching 执行此操作,但无法以编程方式清除缓存:

     <% response.setHeader("Cache-Control","no-cache"); //HTTP 1.1 
     response.setHeader("Pragma","no-cache"); //HTTP 1.0 
     response.setDateHeader ("Expires", 0); //prevents caching at the proxy server  
    %>
    

    【讨论】:

    • 将上述代码 sn-p 添加到 jsp 文件中,并将该 jsp 包含在所有其他 jsp 中。或者另一种简单的方法是在将响应发送回过滤器时添加此代码,这样您就可以确保浏览器不会缓存数据。
    • 我尝试使用以下代码,它没有缓存页面但是当我点击浏览器返回按钮时,浏览器说这个文档不再存在,重新加载页面。为什么它不自动重新加载页面? &lt;% response.setHeader("Cache-Control", "no-cache"); response.setHeader("Cache-Control", "no-store"); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", 0); %&gt;
    • 我们需要在jsp页面中使用request.setHeader或response.setHeader吗?我还需要在我的 Web 应用程序中禁用缓存
    • @Sadanand,您找到问题的答案了吗?如果没有,请尝试在此处作为单独的问题提问。
    • @Barett 不,我没有。
    【解决方案2】:
     <%
    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Cache-Control", "no-store");
    response.setHeader("Pragma", "no-cache");
    response.setDateHeader("Expires", 0);
     %>
    

    在jsp中完美运行,记得检查会话

    <%
    
    User u = (User) request.getSession().getAttribute("user");
    if (u != null ) {
    //show page
    }else{
    // redirect to login page
    }
    
    %>
    

    【讨论】:

      【解决方案3】:
      <%
      response.addHeader("Cache-Control", "no-cache, no-store, must-revalidate");
      response.addHeader("Pragma", "no-cache");
      response.setDateHeader("Expires", 0);
      %>
      

      这对我有用。 Reference

      【讨论】:

        【解决方案4】:

        如何禁用特定 JSP 的浏览器缓存? 可以防止浏览器缓存 JSP 页面响应。添加到响应标头的以下提示似乎可以防止大多数现代浏览器在“命中”相同的 URL 时将页面拉出缓存:

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

        在 HTML header 中使用 meta 标签也可以达到同样的效果:

        <meta http-equiv="Pragma" content="no-cache">
        <meta http-equiv="Cache-Control" content="no-cache">
        <meta http-equiv="Expires" content="Sat, 01 Dec 2001 00:00:00 GMT">
        

        【讨论】:

          【解决方案5】:

          在 HTML header 中使用 meta 标签也可以达到同样的效果:

          <meta http-equiv="Pragma" content="no-cache"> 
           <meta http-equiv="Cache-Control"      content="no-cache"> 
          <meta http-equiv="Expires" content="Sat, 01 Dec 2012 00:00:00 GMT">
          

          Cache-Control 标头是在 HTTP 1.1 中添加的,而另外两个标头也存在于 HTTP 1.0 中。

          【讨论】:

          • 不推荐,除非你别无选择。 (不使用 JSP,或者在 JSP 运行时无法修改响应标头 - 可能是由于您使用的框架不灵活。)
          猜你喜欢
          • 2012-01-08
          • 1970-01-01
          • 1970-01-01
          • 2011-12-30
          • 2014-12-15
          • 2011-09-19
          • 2011-04-16
          • 1970-01-01
          相关资源
          最近更新 更多