22

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

我按照此处的说明创建和部署我的应用程序,它(大部分)工作!我能够调用 JSP 并正确显示页面。按下 Intellij 重新加载按钮后,我还可以在 java 类中进行热交换更改。

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

我已经验证了以下内容:

  • Tomcat/conf 目录中的 web.xml 不会覆盖“开发”值。默认值为真。
  • 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
  • 这不是浏览器缓存问题

有什么想法吗?

4

4 回答 4

31

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

于 2011-05-03T20:12:09.463 回答
31

当我回答这个问题时,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

于 2014-02-07T15:03:46.897 回答
6

尝试编辑Run/Debug Configuration,转到部署选项卡并部署爆炸的战争文件。

于 2012-10-05T11:55:18.293 回答
2

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

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

对这种方法的一个警告是将可变数据合并到读取 html 的文件中。您可以使用几种方法。1. 制作你自己的字符串替换算法,让你的助手应用程序动态替换字符串 2. 将你的变量数据输出到一个 javascript 块中,让 javascript 更新你的文件中的 html 值读取 html 块(假设你有 javascript 印章拉关闭)。

于 2011-04-22T13:54:03.240 回答