我遇到了以下问题:我有一个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部署项目)。此外,这个问题并没有发生在开始,它曾经工作正常,我不知道我改变了什么导致它停止工作。
答案 0 :(得分:1)
Servlet容器默认情况下可以为静态内容发送缓存标头,或者浏览器自己会缓存看似静态的内容(例如以.html
,.gif
结尾等)并且否< / em>缓存标头。这就是您需要清理浏览器缓存的原因。所以有一些解决方案(可能还有其他解决方案):
为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标签内。