Tomcat架構簡述
概述
Tomcat是一個web應用服務器,也可以稱作是jsp/servlet容器,Tomcat不僅可以相應web應用而且自身集成了http服務,是一個高效的web服務器。
Tomcat雖然本身的結構很復雜,但是同時Tomcat也高度的模塊化,所以從結構圖上來看Tomcat的設計非常的簡潔。
由上圖可以看出來一個應用服務器(Tomcat server)可以擁有多個service服務,一個service服務中有多個Connector組件和一個Container組件以及多個其他組件,例如日志,Session,命名等,其中Connector和Container這兩個組件是Tomcat的核心組件,下面將大致一一介紹每個組件的作用。
Server服務器
server服務器指Tomcat容器。
Service服務
service服務指的就是Server服務器能提供的服務,比如http服務,在Tomcat里就是指web服務。
Jasper
Jasper組件負責jsp頁面的解析,jsp屬性的驗證,同時也負責將jsp頁面動態轉換為java代碼並且編譯成class文件。
Naming
Naming組件負責管理相關資源,包括數據庫連接池,EJB,mail等通過JNDI獲取的內容。
Logging
Logging組件負責記錄相關日志,包含訪問錯誤信息等。
Session
Session組件負責session的管理,序列化反序列化等。
需要重點介紹的是Connector組件和Container組件
可以參照一張更全面的圖
Connector
由上面的圖我們可以看出來一個Service服務可以包含多個Connector,實際上Tomcat中包含了3個Connector,分別對應HTTP請求,HTTPS請求以及AJP請求。那么Connector在Tomcat中到底扮演了什么樣的角色呢?Tomcat中的Connector負責的任務就是接受請求,創建request和response,解析請求中數據,將數據封裝到request中,最后將request和response作為參數傳遞給Container對象!
由於不同協議規則不同,解析起來也是不一樣的,所以需要多個Connector。
Container
Container實際上只是容器的概稱。而Tomcat中包含有多個Container。那么Container的作用是什么呢?Container的作用就是接收Connector傳遞的request和response,對request和response進行了一些過濾封裝,同時調用對應的Servlet去處理該request,最后將處理完成后的結果封裝到response中返回給客戶端!
每個Container從大到小分別為Engine
-->Host
-->Context
-->Wrapper
-
Engine
容器代表整個Catalina servlet引擎 -
Host
容器表示一個虛擬主機,Tomcat自帶的是一個叫localhost的主機 -
Context
容器表示一個WEB應用程序 -
Wrapper
表示一個獨立的Servlet
對於一個Engine可以包含多個Host,Tomcat自帶了一個叫做localhost的Host容器,一個Host容器可以包含多個Context,一個Context可以包含多個Wrapper。
是不是感覺這幾個單詞很熟悉,是的!在Tomcat中我們可以使用Tomcat默認提供的這些容器,也可以在CATALINA_HOME/conf
下的server.xml
中配置,而這幾個單詞正是對應server.xml
中的各個配置選項的名稱!
在下面的幾個章節我們將逐漸深入到各個組件中去探索Tomcat是如何工作的。