侧边栏壁纸
博主头像
程序员の小站博主等级

行动起来,活在当下

  • 累计撰写 51 篇文章
  • 累计创建 35 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Tomcat -- 启动流程

Administrator
2024-10-28 / 0 评论 / 0 点赞 / 1 阅读 / 3628 字
温馨提示:
本文最后更新于 2024-10-28,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

启动流程

  1. 启动Tomcat,需要调用 bin/startup.bat(在linux目录下,需要调用 bin/startup.sh),在startup.bat脚本中调用了catalina.bat
    启动脚本的调用过程
  2. 在catalina.bat的脚本文件中调用了BootStrap中的main方法
  3. 在BootStrap的main方法中调用了init方法,来创建Catalina及初始化类加载器
  4. 在BootStrap的main方法中调用了load方法,在其中有调用了Catalina的load方法
  5. 在Catalina的load方法中,需要进行一些初始化的工作,并需要构造Digester对象,用于解析XML
  6. 然后在调用后续组件的初始化操作。加载Tomcat的配置文件,初始化容器组件,监听对应的端口号,准备接受客户端的请求。

Lifecycle
由于所有的组件均存在初始化、启动、停止等生命周期方法,拥有生命周期管理的特性,所以Tomcat在设计的时候,基于生命周期管理抽象成了一个接口Lifecycle,而组件
Server、Service、Container、Executor、Connector都实现了一个生命周期的接口,从而具有了以下生命周期中的核心方法:

  • init():初始化组件
  • start():启动组件
  • stop():停止组件
  • destroy():销毁组件

image.png

上面提到的Server、Service、Engine、Host、Context都是接口, 下图中罗列了这些接口的默认实现类。当前对于 Endpoint组件来说,在Tomcat中没有对应的Endpoint 接口, 但是有一个抽象类 AbstractEndpoint ,其下有三个实现类: NioEndpoint、 Nio2Endpoint、AprEndpoint , 这三个实现类,分别对应于前面讲解链接器 Coyote 时, 提到的链接器支持的三种IO模型:NIO,NIO2,APR , Tomcat8.5版本中,默认采 用的是 NioEndpoint。

image.png

ProtocolHandler
Coyote协议接口,通过封装Endpoint和Processor , 实现针对具体 协议的处理功能。Tomcat按照协议和IO提供了6个实现类。

  1. AJP协议
    • AjpNioProtocol:采用NIO的IO模型。
    • AjpNio2Protocol:采用NIO2的IO模型
    • AjpAprProtocol:采用APR的IO模型,需要依赖于APR库
  2. HTTP协议
    • Http11NioProtocol:采用NIO的IO模型,默认使用的协议(如果服务器没有安装 APR)
    • Http11Nio2Protocol:采用NIO2的IO模型
    • Http11AprProtocol:采用APR的IO模型,需要依赖于APR库

image.png

总结
从启动流程图中可以看出Tomcat的启动过程非常标准化, 统一按照生命周期管理接口Lifecycle的定义进行启动。首先调用init()方法进行组件的逐级初始化操作,然后再调用start()方法进行启动。
每一级的组件除了完成自身的处理外,还要负责调用子组件响应的生命周期管理方法, 组件与组件之间是松耦合的,因为我们可以很容易的通过配置文件进行修改和替换。

0

评论区