1. 程式人生 > >(轉)關於Tomcat的點點滴滴(體系架構、處理http請求的過程、安裝和配置、目錄結構、設置壓縮和對中文文件名的支持、以及Catalina這個名字的由來……等)

(轉)關於Tomcat的點點滴滴(體系架構、處理http請求的過程、安裝和配置、目錄結構、設置壓縮和對中文文件名的支持、以及Catalina這個名字的由來……等)

https 設置 重啟 specific 調用 持久化數據 所在 original apps

轉自:http://itfish.net/article/41668.html 總結Tomcat的體系架構、處理http請求的過程、安裝和配置、目錄結構、設置壓縮和對中文文件名的支持、以及Catalina這個名字的由來……等。 Tomcat和JVM: 一個Tomcat只會啟動一個JVM,所有webapps公用一個JVM進程,所以System.exit()會導致影響同個Tomcat中的其他應用。Tomcat通過調用配置的JDK或JRE來啟動JVM。 體系結構: 技術分享 Server:A Server element represents the entire Catalina servlet container. (Singleton) Service
:它由一個或者多個Connector組成,以及一個Engine,負責處理所有Connector所獲得的客戶請求。 Connector
  • TOMCAT有兩個典型的Connector,一個直接偵聽來自browser的http請求,一個偵聽來自其它WebServer的請求
  • Coyote Http/1.1 Connector 在端口8080處偵聽來自客戶browser的http請求
  • Coyote JK2 Connector 在端口8009處偵聽來自其它WebServer(Apache)的servlet/jsp代理請求
Engine
  • Engine下可以配置多個虛擬主機Virtual Host,每個虛擬主機都有一個域名
  • 當Engine獲得一個請求時,它把該請求匹配到某個Host上,然後把該請求交給該Host來處理
  • Engine有一個默認虛擬主機,當請求無法匹配到任何一個Host上的時候,將交給該默認Host來處理
Host
  • 代表一個Virtual Host,虛擬主機,每個虛擬主機和某個網絡域名Domain Name相匹配
  • 每個虛擬主機下都可以部署(deploy)一個或者多個Web App,每個Web App對應於一個Context,有一個Context path
  • 當Host獲得一個請求時,將把該請求匹配到某個Context上,然後把該請求交給該Context來處理
  • 匹配的方法是“最長匹配”,所以一個path==”"的Context將成為該Host的默認Context
  • 所有無法和其它Context的路徑名匹配的請求都將最終和該默認Context匹配
Context
  • 一個Context對應於一個Web Application,一個Web Application由一個或者多個Servlet組成
  • Context在創建的時候將根據配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml載入Servlet類
  • 當Context獲得請求時,將在自己的映射表(mapping table)中尋找相匹配的Servlet類
  • 如果找到,則執行該類,獲得請求的回應,並返回
另外一個架構圖: 技術分享

Tomcat Server處理一個http請求的過程

假設來自客戶的請求為:

http://localhost:8080/wsota/wsota_index.jsp

1) 請求被發送到本機端口8080,被在那裏偵聽的Coyote HTTP/1.1 Connector獲得
2) Connector把該請求交給它所在的Service的Engine來處理,並等待來自Engine的回應
3) Engine獲得請求localhost/wsota/wsota_index.jsp,匹配它所擁有的所有虛擬主機Host
4) Engine匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因為該Host被定義為該Engine的默認主機)
5) localhost Host獲得請求/wsota/wsota_index.jsp,匹配它所擁有的所有Context
6) Host匹配到路徑為/wsota的Context(如果匹配不到就把該請求交給路徑名為”"的Context去處理)
7) path=”/wsota”的Context獲得請求/wsota_index.jsp,在它的mapping table中尋找對應的servlet
8) Context匹配到URL PATTERN為*.jsp的servlet,對應於JspServlet類
9) 構造HttpServletRequest對象和HttpServletResponse對象,作為參數調用JspServlet的doGet或doPost方法
10)Context把執行完了之後的HttpServletResponse對象返回給Host
11)Host把HttpServletResponse對象返回給Engine
12)Engine把HttpServletResponse對象返回給Connector
13)Connector把HttpServletResponse對象返回給客戶browser

安裝和配置:
  1. 下載:tomcat.apache.org(分Unix 和 windows版)
  2. 解壓到Windows或Unix目錄下
  3. 配置端口:server.xml
  4. 配置Tomcat登錄用戶名密碼:tomcat-user.xml,
    <tomcat-users>
    <user name="admin" password="admin" roles="admin-gui,manager-gui" />
    </tomcat-users>
  5. 配置好JDK,配置JAVA_HOME環境變量
  6. 修改端口:<Connector port="80" protocol="HTTP/1.1" ……/>
  • 啟動
    • Windows: startup.bat (可以在文件末尾加入pause指令,方便查看啟動結果)
    • Unix: ./startup.sh(觀察log:tail -f catalina.log)
  • 關閉
    • Windows: shutdown.bat
    • Unix: ./shutdown.sh
Tomcat目錄結構
bin --- 存放tomcat啟動關閉程序
conf --- 存放tomcat配置文件
lib --- tomcat運行需要jar包
logs --- tomcat日誌文件
webapps --- 網站發布目錄(所有網站可以發布到該目錄)
work --- 存放工程運行時,產生數據文件(JSP翻譯Servlet、Session持久化數據) 站點根目錄:
------- 靜態web資源、jsp
------- WEB-INF目錄
------- classes目錄 (保存,class文件)
-------- lib 目錄 (當前網站需要jar包)
-------- web.xml (網站配置文件)
* WEB-INF目錄不是必須的,沒有java動態程序代碼, 可以沒有WEB-INF 目錄
* WEB-INF目錄下資源不能被瀏覽器直接訪問 如何設置tomcat壓縮:
通過設置tomcat/conf/server.xml設置響應數據壓縮
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" compression="on" compressionMinSize="256" compressableMimeType="text/html,text/xml,application/javascript,text/css,text/plain,application/json"/>
註:compressionMinSize推薦值在150和1000之間 清除瀏覽器緩存,重啟tomcat 支持下載文件名為中文的文件: <Connector port="8080" URIEncoding="utf-8" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> Catalina這個名字的由來: The name "Catalina," according to Craig McClanahan, who designed the original architecture of the servlet container, can be attributed to three things: his love for Catalina Island (despite never having visited it), his cat‘s habit of hanging around the computer while he was writing the code, and the consideration, at an early stage of development, of building Tomcat on a server framework called Avalon, which is the name of a town on Catalina island. Catalina provides Tomcat‘s actual implementation of the servlet specification; when you start up your Tomcat server, you‘re actually starting Catalina.

(轉)關於Tomcat的點點滴滴(體系架構、處理http請求的過程、安裝和配置、目錄結構、設置壓縮和對中文文件名的支持、以及Catalina這個名字的由來……等)