springboot打包成war,部署到tomcat无法访问的问题
Spring Boot 默认是内嵌了 Tomcat、Jetty 或 Undertow 作为嵌入式服务器,如果你想要打包成 WAR 文件并部署到传统的 Tomcat 服务器中,需要做一些额外的配置。
问题解释:
- 你的 Spring Boot 项目打包成 WAR 文件后,需要修改
pom.xml
文件,设置打包方式为war
。 - 你需要排除 Spring Boot 的内嵌服务器依赖,因为 WAR 文件将会被部署到外部容器中。
- 你需要添加 Servlet API 和 JSP API 的依赖,因为这些可能不会自动包含在 WAR 文件中。
解决方法:
- 修改
pom.xml
文件,设置<packaging>
为war
。 - 排除 Spring Boot 的内嵌服务器依赖,例如:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
- 添加 Servlet API 和 JSP API 的依赖,例如:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
- 创建 WAR 文件并部署到 Tomcat。
- 确保
Application
类继承了SpringBootServletInitializer
并重写了configure
方法。
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- 如果遇到 Bean 的定义冲突或者其他启动错误,请检查是否所有必须的 Spring Bean 都已正确配置。
如果按照以上步骤操作后仍然无法解决问题,可能需要检查 Tomcat 的日志文件,以获取更详细的错误信息,进一步诊断问题所在。
评论已关闭