我正在使用Eclipse中的Vaadin框架开发一个应用程序。我正在使用Tomcat v6.0 servlet并在Eclipse Web浏览器中运行该应用程序。我遇到的一个问题是,当我测试应用程序时,浏览器中会显示最近的更改。
无论我重启Tomcat多少次,清理所有已发布的资源并重启Eclipse Web Browser,更改仍然不会生效。这些变化似乎是在时间最重要的因素中随机生效的,这在开发时非常令人沮丧......
所以我的问题是,如果有其他人注意到这个问题,并且有任何解决方法的想法,如果有我可以做的配置,或者如果我在重启时错过了阻止更改生效的步骤..?
非常感谢任何帮助!
答案 0 :(得分:1)
在Vaadin中,大多数代码都在服务器中运行,并包含在普通的Java文件中。有三个级别的资源/类更改:
运行时“热代码替换”。如果在调试模式下运行Tomcat,则可以发布某些Java类更改,而无需重新部署Web应用程序。但是,如果Tomcat配置为“自动发布”(在Eclipse中检查您的服务器设置),则只要类发生更改,就会自动执行重新部署,这会导致完整的上下文重新加载和会话序列化(请参阅#2)。可以使用JRebel等工具增强热代码替换。
Web应用程序部署。这实质上是将新的war文件部署到服务器。导致取消部署以前的版本并部署所有类和资源的新版本。有时服务器工作目录中会留下一些资源,或者没有重新加载类,在这种情况下需要重新启动服务器(#3)。
服务器重启。这使得整个JVM重新加载,并且还重新加载所有类和Web应用程序。仍然需要单独清理工作目录,以确保重新加载所有内容。
除此之外,还有Vaadin的客户端部分(本质上是用GWT编译的JavaScript),Tomcat将其视为静态资源。如果修改客户端Java代码,则使用GWT重新编译JavaScript。部署应该只是文件复制。浏览器缓存生成的HTML / JS文件,但GWT包含避免这种情况的机制。
您应首先尝试更改自动发布的服务器设置,看看是否有帮助。另外,我注意到不同的Tomcat版本表现不同。这很不幸,但你唯一能做的就是试着找到适合你的版本/设置。
答案 1 :(得分:0)
只是为了确保:你一直在URL中添加?restartApplication以强制应用程序在页面重新加载时重启,不是吗?