HTTP/1.1与AJP/1.3,只是监听不同的端口,大体上都是相同的。下面介绍HTTP/1.1
HTTP/1.1如下图,connector继承了LifecycleBase,所以执行LifecycleBase的start方法。

当前对象图如下。

1、setStateInternal(LifecycleState.STARTING_PREP, null,false),因为connector的ls的listeners为0,所以没有动作执行。
2、startInternal(),代码在connector中。

(1)、setState(LifecycleState.STARTING),因为connector的ls的listeners为0,所以没有动作执行。
(2)、protocolHandler.start()(在十四章介绍过对象赋值),调用父类AbstractProtocol的start方法,主要是记录日志和执行endpoint.start()(在十五章介绍过对象赋值)。
1)、执行JIoEndpoint的父类AbstractEndpoint的start方法,也就是调用startInternal()方法,如下图。

1))、createExecutor(),主要是创建一个线程池,并设置属性,设置名字,最小池子大小10个,最大池子大小200,存活时间60秒,优先级别5。如下图。

2))、initializeConnectionLatch(),创建一个新的LimitLatch,构造参数为200赋值给connectionLimitLatch。

3))、开启接受者的线程。主要是启动一个线程监听socket的消息,进行处理。

4))、开启管理超时的线程,主要是启动一个线程,处理超时socket。
(3)、mapperListener.start(),主要是调用父类LifecycleBase的start方法。
1)、setStateInternal(LifecycleState.STARTING_PREP,null, false),因为MapperListener的ls的listeners为0,所以没有动作执行。
2)、startInternal()

1))、setState(LifecycleState.STARTING),因为MapperListener的ls的listeners为0,所以没有动作执行。
2))、findDefaultHost(),主要是mapper.setDefaultHostName(defaultHost),defaultHost为localhost(server.xml中的host的name)。
3))、addListeners(engine)。主要是在container中增加containerListener和LifecycleListener,监听者为MapperListener。

4))、Container[]conHosts = engine.findChildren();,找到所有的host
5))、registerHost(host),后续介绍。
3)、setStateInternal(LifecycleState.STARTED,null, false),因为MapperListener的ls的listeners为0,所以没有动作执行。
3、setStateInternal(LifecycleState.STARTED, null, false),因为connector的ls的listeners为0,所以没有动作执行。
本文详细解析了HTTP/1.1服务启动流程,包括连接器、协议处理器、映射监听器等组件的启动过程及内部方法执行。
1084

被折叠的 条评论
为什么被折叠?



