tomcat之Connector的結構
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
具體實現應用層協議處理請求的是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的結構