Tomcat源码二:执行init()方法、start方法

本文深入探讨了Tomcat服务器的启动流程,详细分析了init()和start()方法的作用,以及StandardService、StandardEngine、StandardHost等核心组件的初始化过程。揭示了容器、管道和阀门的配置机制,以及它们在启动过程中的相互作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

init() 方法

start() 方法

StandardService 的start()方法
根据server.xml 可以知道service中配置了 executor(我把注释去掉)、connector、engine
在这里插入图片描述

engine

在这里插入图片描述
在之前的rules(建议打印出来)中,指定了StandardEngine

  • StandardService 的 startInternal()

在这里插入图片描述
此处的container 即为StandardEngine的实例

  1. StandardEngine
    先解决 standardEngine的 realm和children(子容器)两个属性,由哪个类实现的问题
    在这里插入图片描述
    通过xml解析的时候,为standardEngine 指明了 realm的实现类,和Host的实现类(与standardservice 指定standardEngine一样,都是通过rules 默认绑定的。
[
ObjectCreateRule[className=org.apache.catalina.core.StandardHost, attributeName=className], 
SetPropertiesRule[], 
org.apache.catalina.startup.CopyParentClassLoaderRule@4e2120fa, 
org.apache.catalina.startup.LifecycleListenerRule@60fc2528, 
SetNextRule[methodName=addChild, paramType=org.apache.catalina.Container]
]

如上所示的rules。说明host的属性,是通过addChild的方法,保存到children 属性中

  • 另一个重要的属性 pipeline
    默认为 StandardPipeline
    pipeline的setBasic 方法调用图
    在这里插入图片描述
    也就是说。 StandardContext、StandardEngine、StandardHost、StandardWrapper 的basic 属性,都是在创建这些容器的时候,set进去的。
    分别为 StandardContextValve、StandardEngineValve、StandardHostValve、StandardWrapperValve
    在这里插入图片描述
    而如上图,StandardHost add 了一个 AccessLogValve
    形成了 AccessLogValve (next) --> StandardHostValve
    而在启动StandardHost的时候 又为 AccessLogValve StandardHostValve 中间插入了一个ErrorReportValve
    变成了 AccessLogValve --> ErrorReportValve --> StandardHostValve
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值