网页不显示新文件内容

时间:2011-03-08 13:02:29

标签: java javascript html file jsp

我正在尝试从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文件中。

1 个答案:

答案 0 :(得分:3)

两种方式:

  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文件匹配的所需网址格式。

  2. 向查询字符串添加时间戳,以便愚弄浏览器缓存。

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