使用Intellij 10.X和tomcat 6.X修改后的热部署JSP

Tih*_*hom 20 java jsp tomcat intellij-idea hotswap

我有一个带有一个java类和一个jsp的Hello-World应用程序.JSP打印出一些嵌入在JSP和java类中的文本.(它打印出两件事)

我按照这里的指示创建和部署我的应用程序,它(大多数)工作!我能够调用JSP并正确显示页面.按下Intellij重新加载按钮后,我也能够在java类中进行热交换.

问题:如果我更改JSP,它不会反映在浏览器中.

我已经验证了以下内容:

  • Tomcat/conf目录中的web.xml不会覆盖"development"值.默认值为true.
  • HelloWorld\web\META-INF\context.xml和Tomcat\conf\context.xml中的context.xml具有reloadable = true
  • 将JSP从C:\ code\HelloWorld\web\index.jsp复制到C:\ code\HelloWorld\out\artifacts\HelloWorld_war_exploded\index.jsp立即进行任何更改
  • 它不是浏览器缓存问题

有什么想法吗?

小智 31

我正在使用Intellij IDEA 10.0.3并遇到了同样的问题.我通过检查运行/调试配置部分下的tomcat服务器设置中的设置 - " 更新帧停用资源 "来解决它.希望这可以帮助.


Jam*_*ers 30

当我回答这个问题时,IntelliJ IDEA版本为13.0.2.由于提出了这个问题,因此选项略有不同.简而言之,通过项目的"运行/调试配置"面板:

  1. 确保您的项目设置为"战争爆炸"(通过"部署")
  2. 在"服务器"选项卡上,将"在帧停用"设置为"更新类和资源"

按顺序执行这两个步骤后,当IDEA失去焦点时(即将焦点更改为Web浏览器时),将导致项目"热交换".

有关完整说明,请访问http://www.jetbrains.com/help/idea/2016.1/updating-applications-on-application-servers.html?search=application%20servers


小智 6

尝试编辑Run/Debug Configuration,转到"部署"选项卡并部署爆炸的war文件.


小智 2

几年前,我将 Tomcat 配置为在看到修改时间发生变化时重新编译 jsp。最近我尝试了相同的设置,但它对我不起作用。

在我的情况下,我需要看到的更改主要是 html 中的更改,因此我能够将大部分 html 封装到一个单独的 html 文件中。然后,我使用读取的文件将其内容包含在 jsp 中。然后,我能够立即更改浏览器中反映的 html,而无需重新部署。请注意,jsp include 并没有做到这一点(它缓存了 html),必须使用 java 帮助程序中的文件读取器来读取文件,以将字符串返回到 jsp。(你可以将java逻辑放在jsp中,但这根本不像mvc)

这种方法的一个警告是将变量数据合并到读取的 html 文件中。您可以使用多种方法。1. 编写您自己的字符串替换算法,并让您的帮助应用程序动态替换字符串 2. 将您的变量数据输出到 javascript 块中,并让 javascript 更新文件读取 html 块中的 html 值(假设您有需要提取的 javascript 块)关闭)。