tomcat - 为什么服务器重启后 servlet、.html 文件没有更新?

标签 tomcat servlets

我遇到了以下问题:我有一个 web 应用程序,它有一个 html 页面,该页面使用 ajax 从 servlet 请求更新列表(我的想法是我希望一个用户能够看到修改其他用户在列表中执行)。

问题是我对 servlet 代码和 .html 文件所做的更新没有被考虑在内,即使在重新启动服务器之后也是如此。我尝试以各种方式解决此问题,从清理项目到创建另一台服务器,大约两个小时后,我找到的解决方案是删除临时互联网文件和网站文件。但是,每次我对代码进行修改时,我仍然需要这样做。

然后我发现了一个新问题(实际上是第一个问题的结果)。在我的 .html 中,我使用 javascript setInterval(...) 方法在 servlet 上执行 ajax 请求,但只有第一个请求被处理,然后,直到我再次清理临时文件,它看起来一直在获取初始请求响应,即使列表已更新。我知道我的代码没有错,因为我在 servlet 上打印了屏幕,而且我可以看到 doGet(...) 只被调用了一次。如果我在程序执行期间删除了临时 Internet 文件,则会再次调用 doGet(...),.html 会正确更新并且一切正常。

那么为什么会发生这种情况,有没有办法解决它?我相信 eclipse/tomcat 以某种方式缓存信息,但是可以禁用它吗(我使用的是 eclipse juno 4.2.1、apache-tomcat-7.0.47,我直接从 eclipse 部署项目)。此外,这个问题并不是从一开始就发生的,它曾经工作得很好,我不确定我改变了什么导致它停止工作。

最佳答案

Servlet 容器可能默认为静态内容发送缓存 header ,或者浏览器本身将缓存看似静态的内容(例如以 .html.gif 等结尾) ) 并且没有缓存 header 。这就是您需要清理浏览器缓存的原因。所以一些解决方案(可能还有其他解决方案):

  • 让 servlet 过滤器拦截请求并在所有 header 中添加适当的、短暂的缓存或不添加缓存。 (关于如何做到这一点的大量资源。)
  • 为 GET 请求添加打破缓存的请求参数,例如而不是要求

    http://host/app/index.html
    

    要求:

    http://host/app/index.html?q=12345678
    

    其中 12345678 是一个随机数或当前时间戳(如果您指定 cache: false,jQuery 会这样做)

关于tomcat - 为什么服务器重启后 servlet、.html 文件没有更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21096349/

相关文章:

java - org.apache.catalina.core.StandardContext 重新加载后 transient 变量为空

tomcat - support.PluginAwareResourceBundleMessageSource 无法解析插件的任何资源

javascript - Java JSONArray 在 Javascript 中迭代提供 'undefined' 结果

java - alfresco webscript 和 Java servlet 之间的区别

tomcat - 以编程方式运行 grails run-app

tomcat - 在 Tomcat 上切换 HTTP 和 HTTPS 时出现 Cookie 问题

jsf - jsf primefaces中的多种形式

java - 将 servlet 移动到 jar 文件以用作库

java - 保存时 HttpServletResponse 提示输入文件名

javascript - 如何获取被点击元素的ID