1. 程式人生 > >tomcat之Connector的結構

tomcat之Connector的結構

bstr pac 實現類 sso 內部類 使用 底層 nta sync

Connector的結構

Connector中具體用ProtocolHandler來處理請求的,不同的ProtocolHandler代表不同的連接類型(如Http11Protocol使用普通的Socket來連接,Http11NioProtocol使用NioSocket連接)

ProtocolHandler的三個重要組件:Endpoint(用於處理底層Socket的網絡連接,用來實現TCP/IP協議) Processor(用於將Endpoint接收到的Socket封裝成Request,用來實現HTTP協議) Adapter(用於將Request交給Container進行具體處理,即將請求適配到Servlet容器)

Endpoint的抽象實現AbstractEndpoint中定義了兩個內部類Acceptor(監聽請求)和AsyncTimeout(檢查異步request的超時)和一個接口Handler(處理接收到的Socket在內部調用Processor進行處理)

技術分享圖片

NioEndpoint繼承自AbstractEndpoint,新添加了Poller和SocketProcessor內部類(放在在上圖的Acceptor和Handler之間)

Processor的兩個抽象繼承類:

org.apache.coyote.AbstractProtocol(正常處理協議使用的)

org.apache.coyote.http11.upgrade.AbstractProtocol

(Servlet3.1後新增,用於處理HTTP的升級協議,指WebSocket協議)

具體實現應用層協議處理請求的是AbstractAjpProsessor和AbstractHttp11Prosessor中的process()方法

適配器Adapter只有一個實現類org.apache.catalina.connector.CoyoteAdapter

Processor的process()會調用Adapter的service()來處理請求,Adapter的service()主要調用Container管道中的invoke()方法來處理請求(管道將逐層調用各層容器中Value的invoke(),直到最後調用Wrapper管道中的BaseValue/StandardWrapperValue來處理Filter和Servlet)

tomcat之Connector的結構