Tomcat整體結構介紹

Tomcat作爲web容器廣爲人知,從我最開始學Java一直到現在工作,可以說是伴隨了我的整個編程生涯。

Tomcat的本質是一個Servlet容器。一個Servlet能做的事情是:處理請求資源,併爲客戶端填充response對象。Tomcat則負責載入我們編寫的Servlet類,調用Servlet的init()方法,對於一個request請求,創建一個servletRequest和一個servletResponse實例,調用該servlet的service()方法,將servletRequest和servletResponse作爲參數傳入,關閉該servlet時,調用destroy()並將其卸載。

接下來簡單介紹一下Tomcat整體的結構。

如圖,Tomcat最主要的爲兩個組件是連接器(connector)和容器(container)。多個connector和一個container組成一個service,service用於對外提供服務,而service的生命週期由server來控制。server屬於最頂層的抽象。

連接器(connector)用於處理網絡連接相關的事情,如socket連接,request封裝,連接線程池等工作。容器(container)主要處理 connector 接受的請求。Service 只是在 Connector 和 Container 外面多包一層,把它們組裝在一起,向外面提供服務,一個 Service 可以設置多個 Connector,但是只能有一個 Container 容器。所有組件的生命週期都使用lifecycle接口統一管理,裏面包含init,start,stop,destory方法。

最初的連接器(connector)只能設置成BIO模式,現在的高版本Tomcat默認的連接模式都是NIO,很大程度上了提升了請求的併發量。

容器(container)在tomcat中一共有4種形式,從頂至下依次是engine,host,context,wrapper。一個wrapper則對應一個servlet,一個context對應一個應用,一個host對應一個站點,engine是引擎,一個容器只有一個。容器之間的啓動都是使用

簡單介紹了下Tomcat整個的結構,下面就通過Tomcat一個請求的處理流程來加深理解。

假設請求爲:http://localhost:8080/test/index.jsp,那麼Tomcat的處理流程爲
1.請求被髮送到8080端口,被connector獲得。
2.connector把請求交給他所在的service的engine處理,等待engine迴應。
3.engine獲得請求地址,匹配虛擬主機host
4.engine匹配到名爲localhost的host,該host獲得請求爲 /test/index.jsp,匹配該host擁有的context
5.host匹配到路徑爲/test的context,若匹配不到則交給名爲“空的context處理
6.該context獲得請求/index.jsp,在映射文件中尋找對應的servlet
7.context匹配到模式爲*.jsp的servlet,找到對應JspServlet類(Jsp最終會轉換成Servlet)
8.構造htttpservletrequest和httpServletResponse對象,作爲參數調用JspServlet的doGet或doPost
9.context把response返回給host
10.host把response返回給engine
11.engine把response返回給connector
12.connector把response返回給用戶瀏覽器,請求結束

關於Tomcat更爲詳細的介紹可以參考Tomcat 系統架構與設計模式Tomcat設計模式分析Servlet 工作原理解析,本文大部分內容參考上面這些文章。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章