【问题标题】:web page not shows new file content网页不显示新文件内容
【发布时间】:2011-07-11 02:36:35
【问题描述】:

我正在尝试从 jsp 文件加载 html 页面。像这样。我将文件名从控制器提供给 jsp,并使用 dojo 我调用另一个控制器并传递文件名。

<script type="text/javascript">
var url = dojo.moduleUrl("dijit.form", "<c:url value="/getfile?Name=${fileName}"/>");
    dojo.xhrGet({
    url: url,
    load: function(html){
        dojo.byId("mycontent").innerHTML = html;
    }
});

它将文件内容流式传输到 jsp。 我的问题是当我更改它没有反映的文件内容时。对于 Firefox,我必须使用 Ctrl+f5,对于 IE,我必须手动清除缓存。 我怎样才能避免这种情况? 我给了

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<meta HTTP-EQUIV="Expires" CONTENT="0"/>
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache"/>
<meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache"/>

在我的jsp文件和html文件中。

【问题讨论】:

  • 奇怪的想法是当你用 Javascript 修改你的 HTML 时,你不应该需要 realod 或任何东西......

标签: java javascript html file jsp


【解决方案1】:

两种方式:

  1. 将它放在 HTTP 响应头中,而不是 HTML 头中。元标记仅在从本地磁盘文件系统打开文件时解释,而不是在通过 HTTP 获取文件时解释。 Filter 是完成这项工作的完美工具。另外,您忘记了另外两个Cache-Control 设置。这是一套完整的:

    HttpServletResponse hsr = (HttpServletResponse) response;
    hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
    hsr.setHeader("Pragma", "no-cache"); // HTTP 1.0.
    hsr.setDateHeader("Expires", 0); // Proxies.
    chain.doFilter(request, response);
    

    将此Filter 映射到与 HTML 文件匹配的所需 URL 模式。

  2. 给查询字符串加时间戳,这样浏览器缓存就被骗了。

    var url = dojo.moduleUrl("dijit.form", "<c:url value="/getfile?Name=${fileName}"/>&" + new Date().getTime());
    

【讨论】:

    猜你喜欢
    • 2013-11-15
    • 2016-06-01
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 2016-11-01
    • 2013-02-15
    • 1970-01-01
    • 2012-05-28
    相关资源
    最近更新 更多