php文件怎么做成war,springboot项目打成war包放入tomcat中运行,原理分析

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

d991010f7d4f1539e1ca8281a734b057.png

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

c2e23467183561afed0f31476b89a92b.png

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

742ef4b03ce9126f91c1fc151af29bfe.png

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

ed82580bfa2aec542a1bd5b3b7143d3f.png

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

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

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

c161af3d52f57faf247601403613eb2e.png

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

af06abe41eea5162f850d0ebd3727b90.png

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

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

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

0969cc846c484c7d3972bf3a153d2c0b.png

通过上图可以知道,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就是按照这个思想实现零配置的。

ce4a1971a68f346ae3def3e1fd047ead.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值