读书人

tomcat7 源码学习札记 1

发布时间: 2013-02-27 10:48:11 作者: rapoo

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的解析,确实做的很好,关于这块应该再写一篇。

读书人网 >编程

热点推荐