天天看點

tomcat中間件入門學習(一)

之前沒有花太多的時間來仔細研究tomcat中間件是如何處理請求并響應給用戶端的,今天研究了一下,處女稿歡迎拍磚。

tomcat從高度抽象來看可以分為兩大部分,第一部分是負責對用戶端發出的請求的封包的解析等工作的Connector元件。第二部分是負責根據請求的内容進行相應的邏輯處理并響應結果給用戶端的Container元件。

處理流程:

Connector元件包含:Http11Protocol元件、Mapper元件和CoyoteAdaptor元件。Http11Protocol元件又包含JioEndpoint元件和Http11Processor元件。JioEndpoint元件包含了Acceptor元件和Excutor線程池

Container元件沒有明确的聲明,它包含了4個級别的元件是從大到小包含關系:分别是Engine元件、Host元件、Context元件和Wrapper元件。

1.當tomcat啟動後,Connector元件中的Acceptor元件将會監聽是否有用戶端套接字連接配接并接受Socket。

2.當監聽到用戶端連接配接後,把連接配接交由Executor處理交由Http11Processor元件和Mapper元件。

3.Http11Processor元件解析請求中的封包資訊,把對應的HTTP協定請求頭,請求體封裝成Request對象,進而可以使後續程式判斷從Request對象中拿到相關的資訊。

4.Mapper元件根據HTTP協定請求行的URL屬性和請求頭的Host屬性比對該請求應該交由哪個Host容器,哪個context容器和哪個Wrapper容器處理請求。其實就是根據請求确定好應該選擇程式中的哪個serverlet。并且把路由路徑也封裝到Request對象中,便于後續直接根據Request對象選擇對應的容器。

5.CoyoteAdaptor元件負責将Connector元件和Engine容器相連接配接,類似管道的模型傳遞之前封裝好的Request對象和Response對象。就是說到這裡請求的Request對象和Response對象已經執行個體化。

6.Engine容器會對請求進行層層過濾處理,在tomcat中的名詞叫做管道和閥門,經過層層閥門過濾後,最後執行EngineValve閥門調用Host容器的管道。Engine的功能包括處理Engine級别一些監聽,處理訪客記錄,叢集處理部分的使用者密碼權限資源認證等

7.Host容器也像Engine容器一樣的邏輯,經過層層閥門處理,最後調用基礎閥門HostValve調用Context容器。Host的功能包括處理Host級别一些監聽,處理訪客記錄,叢集處理部分的使用者密碼權限資源認證等。

8.Context容器也是經過過濾後通過ContextValve調用Wrapper容器的管道。Context的功能包括處理Context級别一些監聽,處理訪客記錄,叢集處理部分的使用者密碼權限資源認證等。還包含了維護回話的生成更新和銷毀。加載Web應用資源,不同應用的隔離處理。解析Tomcat配置檔案server.xml和Web應用的context.xml檔案,讀取到記憶體中。處理Serverlet映射,路由導航選擇。

9.Wrapper容器也是經過閥門過濾後,調用基礎閥門WrapperValve選擇對應的Servlet對象,經過部署的程式的業務邏輯處理後,把結果輸出到用戶端。每一個Wrapper其實就是程式中的每個serverlet。

繼續閱讀