目錄
1、Connector的設計
想要與Container配合實現完整的服務器功能,Connector需要實現如下功能:
- 監聽服務器端口,讀取來自客戶端的請求。(AbstractEndpoint)
- 將請求數據按照指定協議進行解析。(ProtocolHandler)
- 根據請求地址匹配正確的容器進行處理。(Processor處理 Mapper映射匹配)
- 將響應返回客戶端。
ProtocolHandler:表示一個協議處理器,針對不同協議和I/O方式,提供不同的實現
AbstractEndpoint:由ProtocolHandler所包含的,用於啓動Socket監聽,這個抽象類按照I/O方式進行分類。如,Nio2Endpoint標識非阻塞式Socket I/O。
Processor:按照指定協議讀取數據,並將請求交給容器處理。如Http11NioProcessor標識在NIO方式下HTTP請求的處理類。
Processor需要處理2件事情:
1、按照請求地址映射到具體容器。由Mapper類實現
2、監聽容器的註冊和銷燬。由MapperListener類實現
注:Tomcat7之前,Mapper由Connector維護,Tomcat8之後,Mapper由Service維護。
2、從Tomcat應用服務器的設計視角看Connector
如上圖所示,Tomcat通過適配器模式(Adapter)實現了Connector與Mapper、Container的解耦。Tomcat默認的Connector實現(Coyote)對應的適配器爲CoyoteAdapter。也就是說,如果你希望使用Tomcat的鏈接器方案,又想脫離Servlet容器,你只需要實現自己的Adapter即可。當然,你還需要按照Container的定義開發你自己的容器實現(這個實現不一定要遵從Servlet規範)。