tomcat 源码解析
本文中 tomcat
采用的版本为 10.0.12
。
1. bootstrap
启动
- 1.1 静态块获取
catalina.base
变量值 ; - 1.2 调用
Bootstrap.main()
, 里面再调用init()
,setAwait(true)
,load()
,start()
.
2. 具体启动流程
- 2.1
init()
初始化类加载器
ClassLoader
, 指定为commonLoader
, 加载catalina.home
下lib
包中所有jar
文件 ;catalinaLoader
,sharedLoader
指向commonLoader
; 初始化catalinaDaemon
为Catalina
. - 2.2
setAwait(true)
调用
Catalina.setAwait()
方法 , 设置await
状态为true
. - 2.3
load()
调用
Catalina.load()
方法 , 初始化Naming
, 解析server.xml
为Server
对象 , 主要逻辑Catalina.createStartDigester()
; 通过模板方法LifecycleBase.initInternal()
, 陆续调用StandardServer
,StandardService
,StandardEngine
,StandardThreadExecutor
,MapperListener
,Connector
的initInternal()
方法 ; 最后调用NioEndpoint.initServerSocket()
, 使用NIO
的ServerSocketChannel.bind
方法绑定端口地址 . - 2.4
start()
调用
Catalina.start()
方法 , 再通过模板方法LifecycleBase.startInternal()
流程和上面的load()
方法类似 , 最后调用NioEndpoint.serverSocketAccept()
, 使用NIO
的ServerSocketChannel.accept()
接受连接 .