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

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
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值