SpringBoot应用程序在从JAR

时间:2018-02-28 16:16:33

标签: spring maven jsp tomcat spring-boot

我正在探索如何从JAR文件提供JSP。我使用的是SpringBoot 1.5.10.RELEASE

我提到this& this示例,并能够创建春季启动应用程序

  • 包括位于 src / main / resources / META-INF / resources / WEB-INF / jsp /
  • 的JSP
  • 查看解析程序的前缀为 / WEB-INF / jsp / ,后缀为 .jsp

奇怪的是,当我将项目作为springboot应用程序或Java App运行时,我能够点击控制器并获得所需的JSP文件作为响应。之后,我想到打包应用程序,然后从JAR运行它。

$ mvn package
$ java -jar target/springboot-web-jar-demo-0.0.1-SNAPSHOT.jar

Spring启动应用程序出现,当我点击相同的URL模式时,控件来自映射方法,但之后...

  

Whitelabel错误页面

     

此应用程序没有/ error的显式映射,因此您将此视为后备。

     

Wed Feb 28 21:01:09 IST 2018年   出现意外错误(type = Not Found,status = 404)   /WEB-INF/jsp/index.jsp

我的问题/问题......

  • 在IDE中运行的springboot应用程序与作为JAR运行的应用程序之间是否有任何重大差异,甚至可能导致404?
  • spring boot 1.5.10.RELEASE是否支持从JAR提供JSP? (如果是,那么我在这里失踪了,如果没有,那么它会被提及) - stackoverflow-link

我试过寻找合适的解决方案或回答我的问题,但没有得到任何解决方案。因此,请在此处发布问题。

注意:

  • 请不要为WAR包装提供解决方案
  • 我知道JSP现在不是最好的选择,我只是在学习
  • 我知道我可以寻找像百里香,自由标记和速度等替代品
  • 我不想降级SpringBoot版本
  • 我也尝试过指定<scope>的jasper&amp; JSTL到providedcompile但没有运气

的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.atuldwivedi.learn.springboot</groupId>
<artifactId>springboot-web-jar-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>springboot-web-jar-demo</name>
<description>Learn how to serve JSP from JAR</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.10.RELEASE</version>
    <relativePath />
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

</project>

3 个答案:

答案 0 :(得分:0)

对于你的春季启动识别他们的jsps,你债务在src.main中创建一个webapp目录,如下所示:

<强>的src /主/ web应用/ WEB-INF / JSP

而不喜欢:

<强>的src /主/资源/ META-INF /资源/ WEB-INF / JSP

答案 1 :(得分:0)

让dispatcherServelet识别他们的jsps,你在src.main中创建一个webapp目录,如下所示:

的src /主/ web应用/ WEB-INF / JSP 并在application.properties中自动配置您的应用程序 spring.mvc.view.prefix:/ WEB-INF / JSP spring.mvc.view.suffix:.jsp`

答案 2 :(得分:-1)

使用可执行jar时不支持JSP。