tomcat源码阅读笔记二——初始化过程(下)

一 .在StandardServer中,调用initInternal()方法。

    在此过程,1.初始化了globalNamingResources(此globalNamingResources在catalina初始化的时候被加载到jvm),

tomcat源码阅读笔记二——初始化过程(下)

作为全局的资源共享,里面保存的东西如图:

tomcat源码阅读笔记二——初始化过程(下)

2.之后用向上找到URLClassLoader,用此URLClassLoader 加载所有jdk中的jar包,放到ExtendsionValidator中的containerManifestResources中。

tomcat源码阅读笔记二——初始化过程(下)

3.然后启动所有的services

tomcat源码阅读笔记二——初始化过程(下)

二.在service启动过程中,调用initInternal()方法,此方法做了如下事情:

1.启动此service所指向的Container(catalina初始化的时候用digester加载到jvm的StandardEngine),

tomcat源码阅读笔记二——初始化过程(下)

及初始化StandardEngine,调用其initInternal方法,开启了一个可以异步执行操作的的线程池,供之后在startInternal()中启动StandardHos StandardContext StandardWrapper用,如图:

tomcat源码阅读笔记二——初始化过程(下)

2.然后初始化StandardThreadExecutor,

tomcat源码阅读笔记二——初始化过程(下)

3.初始化connectors

tomcat源码阅读笔记二——初始化过程(下)

    在connector初始化过程中,做了如下的事情:

    3.1创建connector与container链接的桥梁CoyoteAdapter

tomcat源码阅读笔记二——初始化过程(下)

    3.2协议处理器初始化(Http11Protocol  Http11NioProtocol  Http11AprProtocol,可在server.xml中指定其中一种)

tomcat源码阅读笔记二——初始化过程(下)

    以默认的bio阻塞模式(Http11Protocl)为例:

    3.2.1 把此协议处理器注册到Registry中,3.2.2 初始化endPoint,及初始化一个ServerSocket,等待网络请求

    3.3初始化mapperListener (connector与主机地址host的映射)

tomcat源码阅读笔记二——初始化过程(下)

至此,所有的初始化完成,之后开始startInternal过程。