主要流程
bootstrap main
|
init (初始化三个classloader(包括common、server、shared,其中common是后面两个的父类加载器,common主要用于tomcat相关类的加载,应该是catalina与用户应用公用的一些类,server主要用于catalina相关类的加载,而shared主要是用户应用相关类得的加载,实现了catalina相关类与用户类的隔离),并用server加载类catalina类, 这就是为什么bootstrap这样一个类来启动而不是直接用catalina的原因,类隔离!!!)
|
根据命令行参数执行相应动作,其实就是调用catalina的方法,这里启动的话应是start方法
catalina start
|
load (这里是解析server.xml,创建server对象并初始化)
|
StandardServer.init (包括其内部services、containers(engine(只能有一个)、host 、context、wrapper)、executor、connectors的初始化 )
|
StandardServer.start(调用上面组件的start方法)
connector init
|
protocolHandler.init (protocolHandler是一个对象引用,这个对象的类是由server.xml中connector元素中的protocol属性定义的,项目中常用Http11NioProtocol)
|
Http11NioProtocol.init
|
NioEndpoint.init
|
NioEndpoint.bind(创建serversocketchannel)