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

我的问题

好吧,'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。