给点耐心看,可能根本问题就是你漏掉了一个细节。
在这里插入图片描述

问题分析
项目由架构:
Springboot 版本2.4.5
jdk版本11.0.11
tomcat版本10.0.6
jsp版本9.0.46
在这里插入图片描述
将SpringBoot以war方式打包,启动tomcat之后访问项目地址,报404错误,404代表访问的地址不存在,所以别想得太复杂,简单的理解就是tomcat无法访问到你的项目指定的路径,没有找到这个东西。
在这里插入图片描述

问题排查
首先附上我的项目目录结构
在这里插入图片描述
1)如果项目有用到jsp,那么首先在application.properties配置视图解析器。
在这里插入图片描述

spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp

之后在pom.xml配置jsp依赖。
在这里插入图片描述

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

指定jsp编译后的路径,这个路径是指定格式。
在这里插入图片描述

			<resource>
				<directory>src/main/webapp</directory>
				<targetPath>META-INF/resources</targetPath>
				<includes>
					<include>*.*</include>
				</includes>
			</resource>

这样jsp的配置就完成了。

2)SpringBoot启动类,必须继承一个SpringBootServletInitializer,然后重写configure方法,目的是为当前这个SpringBoot启动类构建新资源。我这里项目创建的时候生成了一个ServletInitializer,所以直接继承ServletInitializer即可。如果你的项目没有ServletInitializer这个类,则手继承
在这里插入图片描述在这里插入图片描述


public class ServletInitializer extends SpringBootServletInitializer {

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(SpringbootWarProjectApplication.class);
	}

}

3)打包war,如果你的项目默认是jar的方式,需要把配置修改成war的打包方式,在pom.xml增加war配置。
在这里插入图片描述指定打包方式为war
在这里插入图片描述指定打包后的文件名称为springboot,这里随意。

4)运行mvn clean package打包项目
在这里插入图片描述
可以看到target目录下面有个springboot.war包,这个就是我们需要的包。

5)我这里分别对tomcat三个版本做测试。
在这里插入图片描述
发现均访问404
原地升天
在这里插入图片描述
别急,稳住,上面的配置肯定不会有问题。

6)这个问题很明显是tomcat访问不到java资源,我们到官网看看版本兼容。
在这里插入图片描述
tomcat 版本8.5.x对应java 7 and later ,支持java7及更高版本
tomcat 版本 9.0.x对应java 8 and later,支持java8及更高版本
tomcat 版本 10.0.x对应java 8 and later,支持java8及更高版本

这样一看我的,java 11版本是没有问题的。
在这里插入图片描述
但是启动tomcat的时候,明显没有spring的logo,说明spring根本没有启动成功,也就是tomcat启动spring没有成功,归根到底还是兼容问题,于是我手动将java 版本修改成tomcat支持的最低版本,也就是java 8的版本。
在这里插入图片描述
7)重新打包运行,再次启动。
在这里插入图片描述
我用tomcat 9.0.46的版本重新运行之后,可以看到spring大大的logo,
打开网页访问localhost:8090/springboot。别问为什么我的端口是8090,问就是我自己修改的。
在这里插入图片描述
启动成功,所以为什么是这个页面,别急这个只是路径错误而已,至少我们的tomcat是可以访问到我们的springboot项目了。

来个正确姿势。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到这里问题基本就解决了,一定要注意兼容问题。

值得研究的是,我这里测试了三个tomcat的版本,只有10.0.6的版本依旧不能访问,其余的两个版本都没有问题,这里我们也不必纠结了,直接使用其它两个版本中的一个就行了。
在这里插入图片描述

end

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐