上节课我们使用SpringBoot集成了JSP,操作很简单,但此时真正的问题还并未出现。

会出现404的场景一般有两个,一个就是上节课中我们讲到的并没有引入如下两个依赖:

<!--引入jstl-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
<!--内嵌的tomcat支持模块-->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

此问题,在IDE中启时便会出现访问404的问题。

另外一种情况就是当我们将打成jar包进行java -jar运行时会发现访问页面时出现404。这是为什么呢?

解决方案一

如果打开jar包会发现,并没有我们所定义的jsp文件内容。

image

解决方案比较简单在maven打包插件中将指定的文件夹打入jar包即可。build中配置如下:

<build>
    <resources>
        <resource>
            <directory>src/main/webapp</directory>
            <!--这里必须是META-INF/resources-->
            <targetPath>META-INF/resources</targetPath>
            <includes>
                <include>**/**</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>**/**</include>
            </includes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <!-- 404解决方案之一 -->
            <version>1.4.2.RELEASE</version>
        </plugin>
    </plugins>
</build>

上面打包的重点有两个:一个是资源文件打包到META-INF/resources目录下;另外一个就是spring-boot-maven-plugin插件的版本。

特别注意:此中解决方案只适用于spring-boot-maven-plugin的1.4.2.RELEASE的版本。也就是说,这种方案如果用其他版本的maven插件打包同样无法解决404的问题。

解决方案二

该解决方案比较直接,将pom文件中默认的package为jar包,改为war包。

只需将package指定如下即可:

<packaging>war</packaging>

然后同样执行jar -jar XXX.war即可启动,正常访问。

最后,话又说话来了,springboot对jsp的支持可以说非常不友好了。如果可能的话,尽量不要在springboot中使用jsp。

SpringBoot技术视频

CSDN学院:《Spring Boot 视频教程全家桶》

SpringBoot集成Jsp jar包运行404插图1
公众号:程序新视界


SpringBoot集成Jsp jar包运行404插图2

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://choupangxia.com/2020/01/09/springboot-jsp-jar-404/