tomcat7 源码学习笔记 1
tomcat7启动后,从启动,到对端口完成监听整个过程,如图:
其中Bootstrap为tomcat启动类,
调用顺序:
Bootstrap.start() --> 反射调用 Catalina.start() --> StandardServer.start() -->
StandardService.start() --> Connector.start()(启动两个,一个为 HTTP:一个为 AJP)
--> Http11Protocol.start() --> JIoEndpoint.start()
以上类之间的关联方式:
1.在Bootstrap的init()方法中:是采用反射的方式建立对 Catalina 的引用关系:
所以 StandardServer对Connector的引用关系也完成了初始化。
4.Connector中对Http11Protocol的实例化是这样进行的,在server.xml中配置了protocol="HTTP/1.1",然后在代码中有如下创建过程:
Class<?> clazz = Class.forName(protocolHandlerClassName); this.protocolHandler = (ProtocolHandler) clazz.newInstance();
5.Http11Protocol 对 JIoEndpoint 实例化在构造函数中直接新型,这也是,此条路径下来,唯一一个面向实例的,没有再面向接口的关联方法
public Http11Protocol() {
endpoint = new JIoEndpoint();
cHandler = new Http11ConnectionHandler(this);
((JIoEndpoint) endpoint).setHandler(cHandler);
setSoLinger(Constants.DEFAULT_CONNECTION_LINGER);
setSoTimeout(Constants.DEFAULT_CONNECTION_TIMEOUT);
setTcpNoDelay(Constants.DEFAULT_TCP_NO_DELAY);
}
这样看下来,在第3步中,对server.xml的解析,确实做的很好,关于这块应该再写一篇。