Spring MVC,在 WAR 和 JAR 文件中包含 jsp 个文件
Spring MVC with jsp files in WAR as well as in JAR files
我正在开发一个 web 应用程序,这意味着可以以 jar 应该包含扩展或模块所需的所有内容的方式进行扩展,包括模型、视图以及控制器。一个罐子用于单个扩展。
然而,我仍然坚持在 JAR 中引用 JSPs,尽管经过一天的尝试和谷歌搜索后,我不再确定它是否可能。
环境和库,如果它们是相关的:STS 4,Tomcat 9,Java 8,Spring 5.2.2.RELEASE,servlet-api 4.0.1
框架的配置是基于 XML 的,扩展是基于注释的。
我有:
mvc-dispatcher-servlet.xml(进入 WAR)
<mvc:annotation-driven />
<!-- it instantiates BarController from the JAR that meant to use bar.jsp from the JAR -->
<context:component-scan base-package="acme.jar.with.jsps.controllers.are.in.this.pkg" />
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- it instantiates FooController that uses foo.jsp -->
<bean class="acme.this.controller.is.not.in.jar.FooController" />
bar.jsp 在罐子里
pom.xml
<build>
<resources>
<resource>
<directory>src/main/webapp</directory>
</resource>
...
和bar.jsp
$ find . -name "*.jsp"
./target/classes/WEB-INF/views/jsp/bar.jsp
./src/main/webapp/WEB-INF/views/jsp/bar.jsp
foo.jsp 从 WAR 都很好
DEBUG|org.springframework.web.servlet.view.JstlView|View name 'FooController', model {...
DEBUG|org.springframework.web.servlet.view.JstlView|Forwarding to [/WEB-INF/views/jsp/foo.jsp]
DEBUG|org.springframework.web.servlet.DispatcherServlet|Completed 200 OK
bar.jsp 无法从 JAR 中找到
DEBUG|org.springframework.web.servlet.view.JstlView|View name 'BarController', model {...
DEBUG|org.springframework.web.servlet.view.JstlView|Forwarding to [/WEB-INF/views/jsp/bar.jsp]
DEBUG|org.springframework.web.servlet.DispatcherServlet|Completed 404 NOT_FOUND
我的问题
- 可以引用 JAR 中的 JSP 吗?我尝试为
InternalResourceViewResolver
使用许多不同的前缀,但它们都无法从 JAR 中获取 JSP。
- 是否有能够从 JAR 中提取 JSP 的视图解析器?如果是这样,那么如何配置多个视图解析器?
- 我是不是做错了什么?
好吧,'JSP inside JAR'的整个故事又长又痛。
简而言之:
即使你能够让它工作 - 总会有一些损坏的部分。
这里是更多更少的工作示例:https://github.com/hengyunabc/spring-boot-fat-jar-jsp-sample
这里是类似的问题,有一些细节:
Is it possible with Spring Boot to serve up JSPs with a JAR packaging?
最好的情况是使用 WAR 打包而不是 JAR。
我正在开发一个 web 应用程序,这意味着可以以 jar 应该包含扩展或模块所需的所有内容的方式进行扩展,包括模型、视图以及控制器。一个罐子用于单个扩展。 然而,我仍然坚持在 JAR 中引用 JSPs,尽管经过一天的尝试和谷歌搜索后,我不再确定它是否可能。
环境和库,如果它们是相关的:STS 4,Tomcat 9,Java 8,Spring 5.2.2.RELEASE,servlet-api 4.0.1
框架的配置是基于 XML 的,扩展是基于注释的。
我有:
mvc-dispatcher-servlet.xml(进入 WAR)
<mvc:annotation-driven />
<!-- it instantiates BarController from the JAR that meant to use bar.jsp from the JAR -->
<context:component-scan base-package="acme.jar.with.jsps.controllers.are.in.this.pkg" />
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- it instantiates FooController that uses foo.jsp -->
<bean class="acme.this.controller.is.not.in.jar.FooController" />
bar.jsp 在罐子里
pom.xml
<build>
<resources>
<resource>
<directory>src/main/webapp</directory>
</resource>
...
和bar.jsp
$ find . -name "*.jsp"
./target/classes/WEB-INF/views/jsp/bar.jsp
./src/main/webapp/WEB-INF/views/jsp/bar.jsp
foo.jsp 从 WAR 都很好
DEBUG|org.springframework.web.servlet.view.JstlView|View name 'FooController', model {...
DEBUG|org.springframework.web.servlet.view.JstlView|Forwarding to [/WEB-INF/views/jsp/foo.jsp]
DEBUG|org.springframework.web.servlet.DispatcherServlet|Completed 200 OK
bar.jsp 无法从 JAR 中找到
DEBUG|org.springframework.web.servlet.view.JstlView|View name 'BarController', model {...
DEBUG|org.springframework.web.servlet.view.JstlView|Forwarding to [/WEB-INF/views/jsp/bar.jsp]
DEBUG|org.springframework.web.servlet.DispatcherServlet|Completed 404 NOT_FOUND
我的问题
- 可以引用 JAR 中的 JSP 吗?我尝试为
InternalResourceViewResolver
使用许多不同的前缀,但它们都无法从 JAR 中获取 JSP。 - 是否有能够从 JAR 中提取 JSP 的视图解析器?如果是这样,那么如何配置多个视图解析器?
- 我是不是做错了什么?
好吧,'JSP inside JAR'的整个故事又长又痛。
简而言之: 即使你能够让它工作 - 总会有一些损坏的部分。
这里是更多更少的工作示例:https://github.com/hengyunabc/spring-boot-fat-jar-jsp-sample
这里是类似的问题,有一些细节:
Is it possible with Spring Boot to serve up JSPs with a JAR packaging?
最好的情况是使用 WAR 打包而不是 JAR。