tomcat源码阅读笔记二——初始化过程(下)
一 .在StandardServer中,调用initInternal()方法。
在此过程,1.初始化了globalNamingResources(此globalNamingResources在catalina初始化的时候被加载到jvm),
作为全局的资源共享,里面保存的东西如图:
2.之后用向上找到URLClassLoader,用此URLClassLoader 加载所有jdk中的jar包,放到ExtendsionValidator中的containerManifestResources中。
3.然后启动所有的services
二.在service启动过程中,调用initInternal()方法,此方法做了如下事情:
1.启动此service所指向的Container(catalina初始化的时候用digester加载到jvm的StandardEngine),
及初始化StandardEngine,调用其initInternal方法,开启了一个可以异步执行操作的的线程池,供之后在startInternal()中启动StandardHos StandardContext StandardWrapper用,如图:
2.然后初始化StandardThreadExecutor,
3.初始化connectors
在connector初始化过程中,做了如下的事情:
3.1创建connector与container链接的桥梁CoyoteAdapter
3.2协议处理器初始化(Http11Protocol Http11NioProtocol Http11AprProtocol,可在server.xml中指定其中一种)
以默认的bio阻塞模式(Http11Protocl)为例:
3.2.1 把此协议处理器注册到Registry中,3.2.2 初始化endPoint,及初始化一个ServerSocket,等待网络请求
3.3初始化mapperListener (connector与主机地址host的映射)
至此,所有的初始化完成,之后开始startInternal过程。