Tomcat/Spring Boot 重新加载 META-INF/resources/ jsp 文件(实时更新)

2022-09-03 07:39:40

我在spring boot/tomcat实例中使用jsp时遇到了问题。基本上,我在模块A(A/src/main/resources/META-INF/resources/jsp)中拥有所有jsp文件,并且该模块作为jar依赖项包含在模块B(主模块,war打包)中。问题是,当应用程序在调试模式下运行时(无论是在Eclipse还是在IntelliJ Idea中),模块A中没有一个jsp文件被自动重新加载(在渲染的网页上看不到文件中的更改),只有重新启动tomcat实际上重新加载文件并显示更改。模块 B 中被覆盖的 jsp 文件正在重新加载,只是模块 A 中的 jsp 文件有问题(可能是因为 META-INF/resources 文件夹)。

模块 A 结构(依赖项,打包为 jar):src/main/resources/META-INF/resources/jsp/*.jsp

模块B结构(主模块,打包为war,这里的jsp覆盖模块A中的那些):src/main/webapp/jsp/*.jsp

我已经搜索了这个问题的解决方案,但是我最接近答案的是这个(使用JRebel):https://zeroturnaround.com/forums/topic/jsps-in-servlet-3-0-jars-are-not-reloading/

另外,这是一个关于我如何设置jsp的示例:https://github.com/ghillert/spring-boot-jsp-demo


答案 1

我不知道它是否符合您的约束,但是有这样的解决方案:https://spring.io/blog/2015/06/17/devtools-in-spring-boot-1-3

另一种选择:https://github.com/spring-projects/spring-loaded

我使用JSF和Facelets,对于具有动态渲染的Web技术来说,热重载总是有点问题。因此,除了spring-boot-devtools之外,我的建议是将静态内容开发过程与渲染相关过程分开。如果你只需要对css,html,js编辑进行热重载,那么大多数技术都会帮助你,但渲染相关的组件编辑会要求你不时地重新部署你的应用程序。他们会多久问你一次,这取决于你将使用的工具的质量。


答案 2

这很可能与:https://stackoverflow.com/a/8656527/696632

类路径中的所有资源都受缓存的约束。您应该评估答案。