有一个非常简单的idea springboot web项目(在pom.xml里设置 <packaging>war</packaging>),就一个/hello controller,既然是最简单的java web项目,咱就不载图如何创建项目了,今天要说的是用idea内嵌的tomcat(其实是9.0版)实验成功。但将项目发布到云服务器上或本机的tomcat上都不成功,总是出现:
HTTP状态 404 - 未找到
类型 状态报告
消息 请求的资源[/hello]不可用
描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。
我将本机的tomcat7/8/9三个版本都实验了,现象一样。
我查看spring-boot-starter-web,里面有嵌入tomcat,根据https://www.pianshen.com/article/9379136015/中所说,我修改pom.xml如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
因为前面实验不成功我猜想会不会是因为有内嵌tomcat的原因,所以我通过用provided将spring-boot-starter-web引用的内嵌的tomcat去掉,那么用本机tomcat实验时将会成功,可结果还是失败,一样的现象。结果在https://blog.csdn.net/h_xiao_x/article/details/107012738 说到要想打war包在tomcat中使用需要用到SpringBootServletInitializer,我立刻修改代码如下:
@SpringBootApplication
public class YwwwApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(YwwwApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(YwwwApplication.class);
}
}
启动本机tomcat终于出现:
[H:\yitan\apache-tomcat-9.0.48\we
bapps\yitanwww-0.0.1-SNAPSHOT.war]
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.0)
在浏览器中实验测试OK。