以最简单的spring boot demo项目来演示如何发布项目war包到tomcat,并成功运行(有很多小伙伴会出现404错误)
一、准备一个最简单的demo项目
在IDEA中新建一个项目,一直next,选择Dependencies中选择Web。
点击Finish完成
二、为了项目发布后方便排错,在DemoApplication中增加几行代码
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class DemoApplication{ public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @GetMapping("/hello") public String hello() { return "This is a demo project."; } }
三、把项目打成war包
把项目打成war包需要修改两个地方:
1.DemoApplication继承SpringBootServletInitializer,重写configure方法
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class DemoApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @GetMapping("/hello") public String hello() { return "This is a demo project."; } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(DemoApplication.class); } }
2.修改POM文件,把packaging修改为war,并在build中新增finalName为demo,指定打包之后的名称为demo.war,完整的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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <packaging>war</packaging> <description>Demo project for Spring Boot</description> <properties> <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> </dependencies> <build> <finalName>demo</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
3.在IDEA界面的左下角,找到Terminal,并点击。输入mvn clean package -Dmaven.skip.tree=true回车
可以看到在target目录下,生成了demo.war
四、将target下的demo.war包复制到tomcat的webapps目录下,并启动tomcat
在浏览器访问localhost:8080,查看tomcat是否启动
在浏览器访问localhost:8080/demo/hello
表示项目已经部署成功。
五、排错,特别是404错误
排错步骤为:
1.首先需要确保demo项目,在idea中启动时,能正常访问。
2.如果localhost:8080无法看到tomcat的欢迎界面,需要排查端口是否正确,如果端口没有问题,则一定是tomcat的配置出现了问题。
3.如果能看到tomcat的欢迎界面,但是访问项目出现404,则首先需要排查tomcat的启动日志,查看是否报错。
4.如果启动日志没有报错,可则新建一个index.html,并把该index.html放入到tomcat/webapps/demo的根目录,通过localhost:8080/demo/index.html查看是否能正常访问。index.html的代码即为一个最简单的html默认页面。
5.如果不能访问,说明tomcat加载demo项目失败。如果能正常访问index.html,但访问demo/hello出现404,则需要排查是否是个web项目,也就是引入了spring-boot-starter-web依赖,项目的打包方式是否是war包,并且特别是启动类(这里是DemoApplication)是否继承了SpringBootServletInitializer,并重写了configure方法。
至于其他的业务报错,连接资源报错,不在此讨论范围。