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

Tomcat 为什么服务器重启后servlet、.html文件没有更新?,tomcat,servlets,Tomcat,Servlets,我遇到了以下问题:我有一个web应用程序,它有一个html页面,使用ajax从servlet请求列表更新(我的想法是希望一个用户能够看到其他用户对列表所做的修改) 问题是,即使在重新启动服务器之后,我对servlet代码和.html文件所做的更新也没有被考虑在内。我试图用各种方法解决这个问题,从清理项目到创建另一台服务器,大约两个小时后,我找到的解决方案是删除临时互联网文件和网站文件。但是,每次修改代码时,我仍然需要这样做 然后我发现了一个新问题(实际上是第一个问题的结果)。从my.html开始

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

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

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


那么,为什么会发生这种情况,有没有办法解决呢?我相信eclipse/tomcat会以某种方式缓存信息,但这可以被禁用(我使用的是EclipseJuno 4.2.1、apache-tomcat-7.0.47,我直接从eclipse部署项目)。另外,这个问题不是从Begging开始出现的,它过去工作正常,我不确定是什么改变导致它停止工作。

Servlet容器默认情况下可能会发送静态内容的缓存头,或者浏览器本身会缓存看似静态的内容(例如,以
.html
.gif
结尾,等等)并且没有缓存头。这就是为什么需要清理浏览器缓存。因此,有几种解决方案(可能还有其他的):

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

    http://host/app/index.html
    
    要求:

    http://host/app/index.html?q=12345678
    
    其中12345678是一个随机数,或者是当前时间戳(如果指定
    缓存:false
    ,jQuery会这样做)

有办法解决吗

您只需要服务器利用更新的文件,而不是从缓存中提取。有多种方法可以做到这一点。对于Tomcat 8.0.21,保存web.xml中的更改会导致服务器使用文件而不是缓存,这似乎是真的


我发现最快的方法是添加一个空间,保存,删除空间,然后再次保存。此外,我在一个重要的区域内(例如url模式标记内)执行了此操作。

事实上,我总是发送相同的GET请求,现在问题已经解决了。感谢您指出这一点。我们刚刚遇到了这个问题,并且能够通过“触摸”web.xml文件让Tomcat重新构建。