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

时间:2014-01-13 16:30:03

标签: tomcat servlets

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

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

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

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

2 个答案:

答案 0 :(得分:1)

Servlet容器默认情况下可以为静态内容发送缓存标头,或者浏览器自己会缓存看似静态的内容(例如以.html.gif结尾等)并且否< / em>缓存标头。这就是您需要清理浏览器缓存的原因。所以有一些解决方案(可能还有其他解决方案):

  • 让servlet过滤器拦截请求,并在所有标头上添加正确的短暂缓存或无缓存。 (关于如何做到这一点有很多资源。)
  • 为GET请求添加缓存中断请求参数,例如而不是要求

    http://host/app/index.html
    

    要求:

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

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

答案 1 :(得分:1)

  

有没有办法解决它?

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

我发现这样做的最快方法是添加空格,保存,删除空格,再次保存。此外,我是在一个重要的区域内完成的,例如在url-pattern标签内。