springboot项目打成war包放入tomcat中运行,原理分析

简介: 1.需要将pom.xml文件的packaging设置为war。 2.改成war包之后,就可以直接使用maven的命令将项目打成一个war包了。 3.将这个war包直接放入到tomcat中运行。 4.启

1.需要将pom.xml文件的packaging设置为war。

2.改成war包之后,就可以直接使用maven的命令将项目打成一个war包了。

3.将这个war包直接放入到tomcat中运行。

4.启动startup.bat,你可以发现控制台,并没有打印springboot启动的信息。

从上面的tomcat启动信息,可以看到springboot并没有启动,即spring的环境和springmvc的环境,并没有初始化。所以是访问不到项目的。

基于这个结果,我们在想,为什么会启动不了springboot的环境呢?即在使用tomcat启动我们的war包的时候,tomcat并没有执行到我们的主类(启动类)。

那怎样才能让tomcat启动的时候,执行到我们的主类呢?

5.在springboot的启动类,继承了SpringBootServletInitializer类,重写configure()方法;然后再使用maven的package命令重写打war包,就可以让tomcat启动的时候,执行到我们的主类。

这个时候,我们再将打成的war放入到tomcat中运行,就可以看到已经打印了springboot启动的信息了,即已经初始化了spring和springmvc的环境了。

6.为什么在springboot的主类继承了SpringBootServletInitializer,tomcat就可以执行到我们的主类呢?

这个问题,就要涉及到servlet3.0的新特性了:

通过上图可以知道,servlet3.0给我们提供了一个非常牛逼的规范,只要我们按照这个规范,我们就能在tomcat启动的时候去掉web.xml,而且还能初始化spring环境。

1.定义了一个新的规范,即在资源文件的META-INF/services文件夹下面,有一个以javax.servlet.ServletContainerInitializer命名的文件,里面定义一个你自己的类的全类名。同时该类实现javax.servlet.ServletContainerInitializer接口,并重写onStartup方法\
2.在上面这个规范下,所有按照这个规范的servlet服务器,例如:tomcat,在服务启动的时候,会自己反射执行这个类的onStartup()方法\
3.通过这个新的规范,我们就不需要按照传统的方法,需要在web.xml文件中,初始化spring等配置和环境,这样做就能实现零配置,springboot就是按照这个思想实现零配置的。

这就是为什么springboot项目在使用tomcat启动的时候,就需要实现SpringBootServletInitializer这个类,并重写configure方法的原因了。

目录
相关文章
|
2月前
|
Java 应用服务中间件 Maven
Spring Boot项目打war包(idea:多种方式)
Spring Boot项目打war包(idea:多种方式)
58 1
|
5天前
|
Java 应用服务中间件 Maven
IDEA创建一个Servlet项目(tomcat10)
IDEA创建一个Servlet项目(tomcat10)
14 1
|
3天前
|
Ubuntu 前端开发 JavaScript
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
|
17天前
|
XML Java 应用服务中间件
Tomcat项目创建 以及 在IDEA当中集成Tomcat
Tomcat项目创建 以及 在IDEA当中集成Tomcat
|
3天前
|
Java
SpringBoot起步依赖原理分析
SpringBoot起步依赖原理分析
|
2月前
|
Java 应用服务中间件 Apache
Tomcat的基本使用,如何用Maven创建Web项目、开发完成部署的Web项目
Tomcat的基本使用,如何用Maven创建Web项目、开发完成部署的Web项目
46 1
|
17天前
|
XML 应用服务中间件 Android开发
【已解决】eclipse导入项目出错 Server Tomcat v7.0 Server at localhost failed to start
【已解决】eclipse导入项目出错 Server Tomcat v7.0 Server at localhost failed to start
15 0
|
17天前
|
应用服务中间件
Tomcat发布项目不需要项目名访问
Tomcat发布项目不需要项目名访问
14 0
|
2月前
|
安全 Java 应用服务中间件
【小白误闯】这可能是对 Tomcat 工作原理解释最详细的文章
脑子一闪而过,当年 V 哥在面试 Java 开发时,被问到让你写一个 Tomcat 服务器,你有什么想法?尼码,面试官摆明是在压工资了,你得逞了,我回答不上来,当时也没研究过 Tomcat 的源码,饮恨被拒。今天想想看,当时尴尬的表情,蛮逗的嘞。 今天V 哥有空把这个问题整理出来,干脆写成文章吧,放到资料库里,也分享给大家。Tomcat 是一个流行的 Java Servlet 和 JSP 容器,用于运行 Java Web 应用程序。它的核心组件主要包括:
|
2月前
|
存储 Java 应用服务中间件
Springboot项目打war包部署到外置tomcat容器【详解版】
该文介绍了将Spring Boot应用改为war包并在外部Tomcat中部署的步骤:1) 修改pom.xml打包方式为war;2) 排除内置Tomcat依赖;3) 创建`ServletInitializer`类继承`SpringBootServletInitializer`;4) build部分需指定`finalName`;5) 使用`mvn clean package`打包,将war包放入外部Tomcat的webapps目录,通过startup脚本启动Tomcat并访问应用。注意,应用访问路径和静态资源引用需包含war包名。