`Connector`分析

Connector用于接受请求并将请求封装成RequestResponse来具体处理,最底层是使用Socket来进行连接的,RequestResponse是按照HTTP协议来封装的,所以Connector同时实现了TCP/IP协议和HTTP协议。

RequestResponse封装之后交给Container进行处理。Container就是Servlet的容器。

Container处理完之后返回给Connector,最后Connector使用Socket将处理结果返回给客户端,这样整个请求就处理完了。

Connector的结构

Connector中具体是用ProtocolHandler来处理请求的,不同的ProtocolHandler代表不同的连接类型。

ProtocolHandler里面有3个非常重要的组件:EndpointProcessorAdapter
- Endpoint用于处理底层Socket的网络连接 - 用来实现TCP/IP协议
- Processor用于将Endpoint接收到的Socket封装成Request - 用来实现HTTP协议
- Adapter用于将封装好的Request交给Container进行具体处理 - 将请求适配到Servlet容器进行具体处理

Endpoint的抽象实现AbstractEndpoint里面定义的AcceptorAsyncTimeout两个内部类和一个Handler接口。Acceptor用于监听请求,AsyncTimeout用于检查异步request的超时,Handler用于处理接收到的Socket,在内部调用了Processor进行处理。

Connector的使用方法是通过Connector标签配置在conf/server.xml文件中,所以Connector是在Catalinaload方法中根据conf/server.xml配置文件创建Server对象时创建的。Connector的生命周期方法是在Service中调用的。

Connector的创建过程主要是初始化ProtocolHandlerserver.xml配置文件中Connector标签的protocol属性会设置到Connector构造函数的参数中。

Connector的生命周期处理方法中主要调用了ProtocolHandler的相应生命周期方法。
- 在initInternal方法中首先新建了一个Adapter并设置到ProtocolHandler中,然后对ProtocolHandler进行初始化;
- 在startInternal方法中首先判断设置的端口是否小于0,如果小于0就抛出异常,否则就调用ProtocolHandlerstart方法来启动;
- 在stopInternal方法中先设置了生命周期状态,然后调用了ProtocolHandlerstop方法;
- 在destroyInternal方法中除了调用ProtocolHandlerdestroy方法,还会将当前的ConnectorService中剔除并调用父类的destroyInternal方法。

Endpoint用于处理具体连接和传输数据

2016/2/2 posted in  tomcat