首先,他是一個軟體,一個容器,承載項目的容器,那麼這個容器的定位和用途是幹什麼的呢?
背景:JSP出現後,阿帕奇項目組為了提供一個相容JSP和Servlet而開發的容器,最初名字叫做 “CALATINA”
===========================================================================
Tomcat啟動後,當使用者代理向Tomcat發送請求,請求到達Tomcat,會被Tomcat檢測到,流程如下:
在tomcat的配置檔案conf裡面存在着一個server.xml檔案,其配置了Tomcat了的工作流程,tomcat啟動後會一直運作着該檔案!
server:
用來監聽和關閉所有敢于Tomcat的請求和指令,也是所有 元件标簽 的大标簽,相當于元件容器
元件标簽如下:
Service:
命名Tomcat的名稱,一般不做任何變動,為什麼叫catalina是因為Tomcat的前身名稱就是catalina
Connector:
指定端口,http協定版本,逾時時間,重定向端口,請求的外來編碼,處理請求的線程數(最大/最小),
逾時時間等配置,用于接收使用者代理與tomcat的連接配接
可以有多個Connector存在
Engine:
處理引擎,用于指定那個接受請求的Tomcat所在的主機名,其本質是一個Servlet引擎,當請求到達
此處後,會調用servlet程式進行調用轉發,唯一一個引擎
Realm:作為處理引擎中的子元件,負責安全上下文的處理,并比對到對應的context中
Host:在引擎裡面存在着Host元件标簽,可以簡單了解每一個 Host元件标簽 都是一個處理程式的 模闆,而
Engine在指定defaultHost時候至少要跟其中一個Host元件标簽裡的name保持一緻,代表指定處理
該模闆!一個Host就是一個虛拟機
Conext:每一個Context都代表了一個Web項目,配置了該項目的虛拟路徑,實體路徑,是否熱加載等功能
docBase:實體路徑,表示該web應用程式的路徑或者是WAR檔案存放的路徑
path:虛拟路徑,表示此web應用程式的url的字首,組成固定的HTTP請求:http://localhost:8080/path/xxx
reloadable: 決定Tomcat是否會自動檢測web程式的/WEB-INF/lib 和/WEB-INF/classes目錄,實作熱部署,布爾值
Value:實作檔案和請求的過濾功能
Logger: 用于記錄Tomcat的運作日志
className 指定logger使用的類名,此類必須實作org.apache.catalina.Logger 接口
prefix 指定log檔案的字首 , suffix 指定log檔案的字尾
timestamp 如果為true,則log檔案名中要加入時間
運作流程如下:
Tomcat啟動後,Service元件會一直監聽着維護(關閉)的端口。當有請求到達Connect的時候(8080),那麼Connector就會接受并判斷是否符合。如果符合則接通并轉發給Engine這Servlet引擎。引擎的子子產品會其進行上下文處理,檔案過濾等, 然後根據引擎維護的host參數連接配接向對應的Host元件标簽。Host标簽根據維護的Context進入項目,一個Context就是一個項目!由Context負責接收客戶請求和響應請求,這個過程中Context根據請求比對到對應的Servlet類,然後由這個Servlet類并構造HttpServletResponse和HttpServletRequest給到Servlet的doPost/doGet方法,執行完成後再原路把response容器傳回給tomcat!tomcat原路傳回給使用者代理!
注意:Service監聽的端口不是請求到達的端口而是tomcat關閉的端口
===========================================================================
Tomcat的實體結構
|---bin 用于存放啟動和關閉tomcat腳本
|---conf 存放不同的配置檔案(server.xml和web.xml和tomcat_users.xml)
|---doc:存放Tomcat文檔(英文)
|---lib/japser/common:存放Tomcat運作需要的庫檔案(JARS);
|---logs:存放Tomcat執行時的LOG檔案;
|---src:存放Tomcat的源代碼,一般的安裝包不會提供
|---webapps:Tomcat的主要Web釋出目錄(編譯後的項目),Context指向的地方,ROOT是程式未啟動三角貓首頁圖檔等資訊的地方
|---work:存放jsp編譯後産生的class檔案;
|---temp:使用者存放tomcat在運作過程中産生的臨時檔案