使用来自其他Maven模块的部分JSP文件的Spring Boot应用程序



假设我们有一个使用JSP模板的基于Spring Boot的web应用程序。它甚至可以像下面的示例一样简单(来自Spring Projects官方存储库)

项目结构:

|-src/main/java/
|    |-sample.tomcat.jsp
|        |-SampleTomcatJspApplication.java
|        |-WelcomeController.java
|-src/main/resources/
|    |-application.properties
|-src/test/java/
|    |-...
|-src/main/webapp/
|    |-WEB-INF
|        |-jsp
|            |-welcome.jsp
|-pom.xml

属性文件包含视图前缀/WEB-INF/jsp/和后缀.jsp,当请求/时,我们看到welcome.jsp正确渲染的内容。

WelcomeController.java

application.properties

现在让我们做以下更改

  1. WelcomeController.java复制为WelcomeController2.java,并更改位请求映射,模型属性和返回视图名称,例如:

    @RequestMapping("/2")
    public String welcome2(Map<String, Object> model) {
        model.put("message", "Hi from Welcome2");
        return "welcome2";
    }
    
  2. welcome.jsp复制为welcome2.jsp,这样src/main/webapp将像这样:

    |-src/main/java/
    |    |-sample.tomcat.jsp
    |        |-SampleTomcatJspApplication.java
    |        |-WelcomeController.java
    |        |-WelcomeController2.java
    ...
    |-src/main/webapp/
    |    |-WEB-INF
    |        |-jsp
    |            |-welcome.jsp
    |            |-welcome2.jsp
    

然后当请求/2时,我们可以看到welcome2.jsp正确渲染的内容。

如何将这样的项目拆分为两个maven项目,以便WelcomeController2.javawelcome2.jsp都可以移动到其他项目(maven依赖),并且在请求/2 URL时仍然可以成功解决?

注意,在Spring Boot中,web-fragment.xml(可以放在META-INF的依赖目录中)被忽略。

不幸的是,我不知道一个简单的方法来做到这一点,但是我使用的一种方法是为主项目创建一个Maven工件,就像通常的那样,在您的情况下可能是一个WAR工件。此项目需要依赖于您的第二个项目。然后你的第二个项目将由两个部分组成:

  1. 一个标准的Maven JAR构件,包含编译后的类文件。
  2. 由JSP文件组成的Maven程序集ZIP,这些文件也需要包含在WAR存档中。这将在package阶段从第二个项目生成,但是需要使用zip分类器作为一个独立的依赖包含在主项目上。

当构建第一个项目时,您将需要解包程序集依赖项,作为WAR存档打包过程的一部分。如果您希望它在IDE中工作,您可能需要在相当早的阶段解压缩它,例如process-resourcesgenerate-sources

最新更新