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()接受连接 .