由上章內(nèi)容我們大致可以知道一個請求發(fā)送到Tomcat之后碎浇,首先經(jīng)過Service然后會交給我們的Connector,Connector用于接收請求并將接收的請求封裝為Request和Response來具體處理奴璃,Request和Response封裝完之后再交由Container進行處理苟穆,Container處理完請求之后再返回給Connector唱星,最后在由Connector通過Socket將處理的結(jié)果返回給客戶端跟磨,這樣整個請求的就處理完了!
Connector最底層使用的是Socket來進行連接的哎榴,Request和Response是按照HTTP協(xié)議來封裝的仑濒,所以Connector同時需要實現(xiàn)TCP/IP協(xié)議和HTTP協(xié)議偷遗!
Tomcat既然處理請求,那么肯定需要先接收到這個請求喉酌,接收請求這個東西我們首先就需要看一下Connector泵喘!
四、Connector架構(gòu)分析
Connector用于接受請求并將請求封裝成Request和Response相速,然后交給Container進行處理鲜锚,Container處理完之后在交給Connector返回給客戶端。
因此旺隙,我們可以把Connector分為四個方面進行理解:
首先看一下Connector的結(jié)構(gòu)圖骏令,如下所示:
Connector就是使用ProtocolHandler來處理請求的榔袋,不同的ProtocolHandler代表不同的連接類型,比如:Http11Protocol使用的是普通Socket來連接的妥粟,Http11NioProtocol使用的是NioSocket來連接的聪黎。
其中ProtocolHandler由包含了三個部件:Endpoint备恤、Processor锦秒、Adapter。
(1)Endpoint用來處理底層Socket的網(wǎng)絡(luò)連接惭笑,Processor用于將Endpoint接收到的Socket封裝成Request生真,Adapter用于將Request交給Container進行具體的處理。
(2)Endpoint由于是處理底層的Socket網(wǎng)絡(luò)連接川蒙,因此Endpoint是用來實現(xiàn)TCP/IP協(xié)議的长已,而Processor用來實現(xiàn)HTTP協(xié)議的,Adapter將請求適配到Servlet容器進行具體的處理康聂。
(3)Endpoint的抽象實現(xiàn)AbstractEndpoint里面定義的Acceptor和AsyncTimeout兩個內(nèi)部類和一個Handler接口胞四。Acceptor用于監(jiān)聽請求,AsyncTimeout用于檢查異步Request的超時氓侧,Handler用于處理接收到的Socket游昼,在內(nèi)部調(diào)用Processor進行處理。
至此载庭,我們應(yīng)該很輕松的回答(1)(2)(3)的問題了廊佩,但是(4)還是不知道,那么我們就來看一下Container是如何進行處理的以及處理完之后是如何將處理完的結(jié)果返回給Connector的顽铸?
請看下一章料皇。