Spring Boot:从jar依赖项解析JSP

时间:2019-04-22 07:04:02

标签: spring-boot jsp

很遗憾,尚未在官方文档中找到答案。也许我想做的事是Tomcat不支持的事件,但仍然如此。 是否可以使spring-boot / Tomcat从类路径中的.jar文件中解析JSP页面?

我有一个Spring-boot(2)应用程序,它打包为war文件。 “ webapp / view”文件夹中有许多jsp页,并且具有适当的MVC配置:

@Configuration
public class MVCConf implements WebMvcConfigurer {
    // ...
    @Bean
    public ViewResolver internalResourceViewResolver() {
        return new InternalResourceViewResolver(){{
            setPrefix("/view/");
            setSuffix(".jsp");
            setRedirectHttp10Compatible(false);
        }};
    }
    // ...
}

所有这些页面均已解决。好的。

但是。该项目是一个多模块的专家。它支持依赖于Maven配置文件的具有不同依赖性(我自己的模块)的构建。

我需要使应用程序能够从类路径中作为jar包含在运行时中的那些可选依赖项中解析JSP。

并且我收到Whitelabel错误,该错误指示找不到JSP文件。

是否有可能使其工作?如果可以,那么怎么办?

P.S .:我已经尝试通过将JSP复制到“ root” spring-boot应用程序本身来使之神奇,并且它可以工作,但是这种方式很脏而且很棘手。

1 个答案:

答案 0 :(得分:0)

我认为不值得发布整个pom.xml,但是下面的maven-dependency-plugin部分适用于我的情况:

            <!-- ... -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.1.1</version>
                <executions>
                    <execution>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>unpack</goal>
                        </goals>
                        <configuration>

                            <!-- this skip property is set by maven profile in same pom.xml - no magic here -->
                            <skip>${exclude.some_submodule}</skip>

                            <artifactItems>
                                <artifactItem>
                                    <groupId>${project.groupId}</groupId>
                                    <artifactId>some_submodule</artifactId>
                                    <version>${project.version}</version>
                                    <type>jar</type>
                                    <overWrite>true</overWrite>
                                    <outputDirectory>${project.build.outputDirectory}</outputDirectory>

                                    <!-- there are webapp/view/*.jsp files in some_module's structure -->
                                    <includes>view/**</includes>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- ... -->

这里唯一的问题是,它仅在启动可执行文件.war时有效。从IDE(IntelliJ IDEA)启动此应用程序需要执行一些附加步骤。在我看来,这是该解决方案的另一个缺点。第一个是脏的pom.xml

TL; DR

解决方案:

但是!I have found another solution that is more suitable, I think。 实际上,我已经从Tomcat迁移到了Jetty,并且即使在上面,上述解决方案也可以正常工作。不再需要修改构建。

现在,我将.jsp文件放入 some_module 依赖项的src/main/webapp/META-INF/resources/view/some_module文件夹中,并通过标准Spring的@Controller通过路径“ some_module / someJsp”对其进行解析。

很抱歉,我之前没有找到这个主题。现在这是重复的。但是谁知道呢,也许有人会使用带有Maven依赖插件的解决方案。