使用Intellij 10.X和tomcat 6.X,在修改JSP后进行热部署

24

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

我按照这里的指示创建并部署了我的应用程序,并且它(大多数情况下)正常工作! 我能够调用JSP,它可以正确地显示页面。 在按下Intellij重新加载按钮后,我还可以实时更改Java类中的内容。

问题:如果我更改JSP,则浏览器不会显示更改后的内容。

我已验证以下内容:

  • Tomcat / conf目录中的web.xml不会覆盖“开发”值。 默认值为true。
  • HelloWorld \ web \ META-INF \ context.xml和Tomcat \ conf \ context.xml中的reloadable = true
  • 无论何时更改,JSP都会从C:\ code \ HelloWorld \ web \ index.jsp复制到C:\ code \ HelloWorld \ out \ artifacts \ HelloWorld_war_exploded \ index.jsp
  • 这不是浏览器缓存问题

有什么想法吗?


无法复现。尝试使用原始的Tomcat安装程序并查看是否有所帮助。如果没有,请将您的项目发送给JetBrains支持,并提供重现错误的确切步骤。 - CrazyCoder
1
我认为相同的问题和适当的解决方案是: https://dev59.com/IWIk5IYBdhLWcg3wFKpK - Fatih Aksu
4个回答

34

当我回答这个问题时,IntelliJ IDEA的版本是13.0.2。由于提问时已经过去一段时间,因此选项略有不同。简单来说,通过“项目的运行/调试配置”面板:

  1. 确保您的项目设置为“war exploded”(通过“部署”)
  2. 在“服务器”选项卡上,将“在框架失活时”设置为“更新类和资源”

按照这两个步骤的顺序进行操作,将导致在IDEA失去焦点时(即当您切换到Web浏览器时)项目被“热替换”。

完整的说明可在http://www.jetbrains.com/help/idea/2016.1/updating-applications-on-application-servers.html?search=application%20servers找到。


@Madbreaks 我已经更新了,但我肯定它会再次出问题。现在没有人知道301是用来做什么的了。所以你将来只能搜索“应用服务器”文档。 - James Sumners

31

我正在使用Intellij IDEA 10.0.3并遇到了同样的问题。我通过检查Tomcat服务器设置下的一个选项"在帧失去焦点时更新资源",解决了这个问题,该选项在运行/调试配置部分中可找到。希望这可以帮助你。


6
尝试编辑“运行/调试配置”,转到部署选项卡并部署已解压的war文件。

我尝试了所有的解决方案,但在idea12中,这个似乎是唯一可行的解决方案。在部署 exploded war 后,在“Run”/“Debug”选项卡上按下“Update Resources on frame deactivation”按钮。 - Rigg802

2
多年前,我将Tomcat配置为在检测到修改时间变化时重新编译jsp文件。最近,我尝试使用相同的设置,但却没有成功。
我的情况是,我需要查看的更改主要是html方面的,因此我能够将大部分html封装到一个单独的html文件中。然后,我使用文件读取将其内容包含在jsp中。这样,我就能够立即在浏览器中看到html的更改,而无需重新部署。请注意,jsp include没有起到作用(它缓存了html),必须在java helper中使用文件阅读器读取文件以将字符串返回给jsp。(您可以将java逻辑放在jsp中,但这完全不像mvc)
使用这种方法的一个注意事项是将可变数据合并到文件读取的html中。有几种方法可以使用。1.自己编写字符串替换算法,并让您的helper应用程序动态替换字符串2.将您的变量数据输出到javascript块中,并让javascript更新文件读取的html块中的html值(假设您有足够的javascript技能来完成这个任务)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接