1. 程式人生 > >Tomcat目錄結構及Tomcat Server處理一個http請求的過程

Tomcat目錄結構及Tomcat Server處理一個http請求的過程

1.Tomcat的結構概述
Tomcat伺服器是由一系列可配置的元件構成,其核心元件是Catalina Servlet容器,它是所有其他Tomcat元件的頂層容器。Tomcat的元件可以在< CATALINA_HOME>/conf/server.xml檔案中進行配置,每個Tomcat的元件在server.xml檔案中對應一種配置元素.一下程式碼以XML的形式展示了各種Tomcat元件之間的關係:

< Server>
    < Service>
        < Connector/>
        < Engine>
            < Host
>
< Context> < /Context> < /Host> < /Engine> < /Service> < /Server>
在以上XML程式碼中,每個元素都代表一種Tomcat元件.這些元素分四類:
1.頂層類元素    頂層類元素包括<Server>元素和<Service>元素,他們位於整個配置檔案的頂層.
2.聯結器類元素    聯結器類元素代表了介於客戶與服務之間的通訊介面,負責將客戶的請求傳送給伺服器,並將伺服器的響應結果傳遞給客戶.
3.容器類元素    容器類元素代表處理客戶請求並生成響應結果的元件,有3種容器類元素,它們是Engine,Host和Context. Engine元件為特定的Service元件處理所有客戶請求,Host元件為特定的虛擬主機處理所有客戶請求,Context元件為特定的Web應用處理所有客戶請求.
4.巢狀類元素    巢狀類元素代表了可以加入到容器中的元件,如<Logger>元素、<Valve>元素和<Realm>元素,這些元素將在後面的做介紹。
下面,再對一些基本的Tomcat元素進行介紹。如果要了解這些元素,可以參考附錄A(Server.xml檔案)。
<Server>元素
代表了整個Catalina Servlet容器,它是Tomcat例項的頂層元素.可包含一個或多個<Service>元素.
<Service>元素
包含一個<Engine>元素,以及一個或多個<Connector>元素,這些<Connector>元素共享同一個<Engine>元素.
<Connector>元素
代表和客戶程式實際互動的元件,他負責接收客戶請求,以及向客戶返回響應結果.
<Engine>元素
每個<Service>元素只能包含一個<Engine>元素. <Engine>元素處理在同一個<Service>中所有<Connector>元素接收到的客戶請求.
<Host>元素
一個<Engine>元素中可以包含多個<Host>元素.每個<Host>元素定義了一個虛擬主機,它可以包含一個或多個Web應用.
<Context>元素
每個<Context>元素代表了執行虛擬主機上的但個Web應用.一個<Host>元素中可以包含多個<Context>元素.
  1. Tomcat的伺服器配置檔案server.xml
    Tomcat伺服器是由一系列可配置的元件構成,Tomcat的元件可以在\conf\server.xml檔案中進行配置,每個Tomcat元件和server.xml檔案中的一種配置元素對應.下面就一些常用的元素做了介紹.關於server.xml的更多資訊,可以參考Tomcat的文件:
    /webapps/tomcat-docs/config/index.html
    下面是一個server.xml檔案的樣例:
<!-- Example Server Configuration File -->

<Server port="8005"
shutdown="SHUTDOWN" debug="0">
<Service name="Catalina"> <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" /> <Engine name="Catalina" defaultHost="localhost" debug="0"> <Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt" timestamp="true"/> <Realm className="org.apache.catalina.realm.MemoryRealm"/> <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" > <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/> <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="localhost_log." suffix=".txt" timestamp="true"/> <Context path="/sample" docBase="sample" debug="0" reloadable="true"> <Resource name="jdbc/BookDB" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/BookDB"> <parameter> <name>factory</name> <vlaue>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter> <name>maxActive</name> <value>100</value> </parameter> <parameter> <name>maxIdle</name> <value>30</value> </parameter> <parameter> <name>maxWait</name> <value>10000</value> </parameter> <parameter> <name>username</name> <value>dbuser</value> </parameter> <parameter> <name>password</name> <value>1234</value> </parameter> <parameter> <name>driverClassName</name> <value>com.mysql.jdbc.Driver</value> </parameter> <parameter> <name>url</name> <value>jdbc:mysql://localhost:3306/BookDB?autoReconnect=true</value> </parameter> </ResourceParams> </Context> </Host> </Engine> </Service> <Service name="Apache"> <Connector prot="8009" enableLookups="false" redirectPort"8443" debug="0" protocol="AJP/1.3"/> <Engine name="Apache" defaultHost="localhost" debug="0"> <Logger className="org.apache.catalina.logger.FileLogger" prefix="apache_log." suffix=".txt" timestamp="true"/> <Realm className="org.apache.catalina.realm.MemoryRealm"/> </Engine> </Service> </Server>  

下面,對基本的Tomcat元素逐一介紹。
1. 配置Server元素

< Server>元素代表了整個Catalina Servler容器,它是Tomcat例項的頂層元素,由org.apache.catalina.Server介面來定義.< Server>元素中可以包含一個或者多個< Service>元素,但< Server>元素不能作為任何其他元素的子元素.範例程式碼中定義的< Server>元素如下:
< Server port=”8005” shutdown=”SHUTDOWN” debug=”0”>

< Server>屬性含義:

className  :指定實現org.apache.catalina.Server介面的類,預設值為org.apache.catalina.core.StandardServer.
port       :指定Tomcat伺服器監聽shutdown命令的埠.終止Tomcat服務執行時,必須在Tomcat伺服器所在的機器上發出Shutdown命令.該屬性是必須設定的.
shutdown   :指定終止Tomcat伺服器執行時,發給Tomcat伺服器的shutdown監聽埠的字串.該屬性是必須設定的.

2. 配置Service元素

< Service>元素由org.apache.catalina.Service介面定義,它把韓一個< Engine>元素,以及一個或多個< Connector>元素,這些< Connector>元素共享一個< Engine>元素. 例如,在範例檔案中配置了兩個< Service>元素

< Service name="Catalina">

name=”Apache”>
第一個< Service>處理所有直接由Tomcat伺服器接收的Web客戶請求,第二個< Service>處理由Apache伺服器轉發過來的Web客戶請求.

< Service < Service>屬性含義:

className  :指定實現org.apache.catalina.Service介面的類,預設值為org.apache.catalina.core.StandardService.
name       :定義Service的名字.

3. 配置Engine元素

< Engine>元素由org.apahe.catalina.Engine介面定義. 每個< Service>元素只能包括一個< Engine>元素. < Engine>元素處理在同一個< Service>中所有< Connector>元素接收到的客戶請求. 例如,在範例server.xml檔案中配置了一下的< Engine>元素:

<Engine name="Catalina" defaultHost="localhost" debug="0"> 

< Engine>屬性含義:

className  :指定實現org.apache.catalina.Engine介面的類,預設值為org.apache.catalina.core.StandardEngine.
name       :定義Engine的名字.

在<Engine>元素中可以包含如下的子元素:
    <Logger>
    <Realm>
    <Valve>
    <Host>

4. 配置Host元素

< Host>元素由org.apache.catalina.Host介面定義.一個< Engine>元素可以包含多個< Host>元素.每個< Host>元素定義了一個虛擬主機,它可以包含一個或多個Web應用. 例如,在樣例server.xml中配置了以下< Host>元素:

   <Host name="localhost" debug="0" appBase="webapps"
         unpackWARs="true" > 

以上程式碼定義了一個名為localhost的虛擬主機,Web客戶訪問它的URL為: http://localhost:8080/

< Host>屬性含義:

className    :指定實現org.apache.catalina.Host介面的類,預設值為org.apache.catalina.core.StandardHost.
appBase      :指定虛擬主機的目錄,可以指定絕對目錄,也可以指定相對於<CATALINA_HOME>的相對目錄. 如果此項沒有設定,預設值為<CATALINA_HOME>/webapps.
unpackWARs   :如果此項設為true,表示將把Web應用的WAR檔案先展開為開放目錄結構後再執行.如果設為false,將直接執行WAR檔案.
autoDeploy   :如果此項設為true,表示當Tomcat伺服器處於執行狀態時,能夠監測appBase下的檔案,如果有新的Web應用加入進來,會自動釋出這個Web應用.
alias        :指定虛擬主機的別名,可以指定多個別名.
deployOnStartup :如果此項設為true,表示Tomcat伺服器啟動時會自動釋出appBase目錄下的所有Web應用,如果Web應用在server.xml中沒有相應的<Context>元素,將採用Tomcat預設的Context. deployOnStartup的預設值為true.
name         :定義虛擬主機的名字.}

在<Host>元素中可以包含如下的子元素:
    <Logger>
    <Realm>
    <Valve>
    <Context>

5. 配置Context元素

< Context>元素由org.apache.catalina.Context介面定義. < Context>元素是使用最頻繁的元素. 每個< Context>元素代表了執行在虛擬主機上的單個Web應用. 一個< Host>元素中可以包含多個< Context>元素. 例如, 在樣例server.xml檔案中配置了以下< Context>元素:

           < Context path="/sample" docBase="sample" debug="0" reloadable="true">   

< Context>屬性含義:

className   :指定實現org.apache.catalina.Context介面的類,預設值為org.apache.catalina.core.StandardContext.
path        :指定訪問該Web應用的URL入口.
docBase     :指定Web應用的檔案路徑.可以給定絕對路徑,也可以給定相對於Host的appBase屬性的相對路徑. 如果Web應用採用開放目錄結構,那就指定Web應用的根目錄;如果Web應用是個WAR檔案,那就指定WAR檔案的路徑.
reloadable  :如果這個屬性設為true,Tomcat伺服器在執行狀態下會監視在WEB-INF/class和WEB-INF/lib目錄下CLASS檔案的改動.如果檢測到有calss檔案被更新,伺服器會自動重新載入Web應用.
cookies     :指定是否通過Cookie來支援Session,預設為true.
useNaming   :指定是否支援JNDI,預設為true.

在<Context>元素中可以包含如下的子元素:
    <Logger>
    <Realm>
    <Valve>
    <Resource>
    <ResourceParams>

6. 配置Connector元素

< Connector>元素由org.apache.catalina.Connector介面定義.< Connector>元素代表與客戶程式實際互動的元件,它負責接收客戶的請求,以及向客戶返回響應結果.例如, 在樣例server.xml檔案中配置了兩個< Connector>元素:



  prot="8009"
             enableLookups="false" redirectPort"8443" debug="0"
             protocol="AJP/1.3"/>      

第一個< Connector>元素定義了一個HTTP Connector,它通過8080埠接收HTTP請求;
第二個< Connector>元素定義了一個JK Connector,它通過8009埠接收由其他HTTP伺服器(如Apache伺服器)轉發過來的客戶請求.

所有的< Connector>元素都具有一些共同的屬性,這些屬性如下: <Connector  <Connector port="8080"
             maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
             enableLookups="false" redirectPort="8443" acceptCount="100"
             debug="0" connectionTimeout="20000" 
             disableUploadTimeout="true" /> 

< Connector>屬性含義(共同屬性):

className      :指定實現org.apache.catalina.Connector 介面的類,預設值為org.apache.catalina.core.StandardConnector.
enableLookups  :如果設為true,表示支援域名解析,可以把IP地址解析為主機名.Web應用呼叫request.getRemostHost方法將返回客戶的主機名.該屬性預設值為true.
redirectPort   :指定轉發埠.如果當前埠只支援non-SSL請求,在需要安全通訊的場合,將把客戶請求轉發到基於SSL的redirectPort的埠.

HttpConnector的屬性描述如下:

calssName      :指定實現org.apache.catalina.Connector介面的類,預設值為org.apache.coyote.tomcat5.CoyoteConnector.
enableLookups  :同上.
redirectPort   :同上.
prot           :設定TCP/IP斷口號,預設為8080.
address        :如果伺服器有兩個以上IP地址,該屬性可以設定埠監聽的IP地址,預設情況下,埠會監聽伺服器上所有IP地址.
bufferSize     :設定由埠建立的輸入流的快取大小,預設值為2048byte.
protocol       :設定HTTP協議,預設值為HTTP/1.1.
maxThreads     :設定處理客戶請求的執行緒的最大數目,這個值也決定了伺服器可以同時響應客戶請求的最大數目,預設值為200.
acceptCount    :設定在監聽埠佇列中的最大客戶請求數,預設值為10. 如果佇列已滿,客戶請求將被拒絕.
connectionTimeout :定義建立客戶連線超時的時間,以毫秒為單位.如果設定為-1,表示不限制建立客戶連線的時間.

JK Connector 的屬性如下:

className      :指定實現org.apache.catalina.Connector介面的類,預設值為org.apache.coyote.tomact5.CoyoteCnnector.
enableLookups  :同上.
redirectPort   :同上.
port           :設定AJP埠號.
protocol       :必須設定為AJP/1.3協議

一個< Server>包含一個或多個< Service>,一個< Service>包含唯一一個< Engine>和一個或多個< Connector>,多個 < Connector>共享一個< Engine>;一個< Engine>包含多個< Host>,每個< Host>定義一個虛擬主機,包含一個或多個web應用< Context>; < Context>元素是代表一個在虛擬主機上執行的Web應用

假設來自客戶的請求為:
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

相關推薦

Tomcat目錄結構Tomcat Server處理一個http請求過程

1.Tomcat的結構概述 Tomcat伺服器是由一系列可配置的元件構成,其核心元件是Catalina Servlet容器,它是所有其他Tomcat元件的頂層容器。Tomcat的元件可以在< CATALINA_HOME>/conf/serv

Tomcat Server處理一個http請求過程

查詢資料的時候先這個,有點用,摘錄下來 假設來自客戶的請求為:  http://localhost:8080/wsota/wsota_index.jsp 1) 請求被髮送到本機埠8080,被在那裡偵聽的Coyote HTTP/1.1 Connector獲得  2) Conn

網站開發進階(四)Tomcat Server處理一個http請求過程

Tomcat Server處理一個http請求的過程   假設來自客戶的請求為: http://localhost:8080/wsota/wsota_index.jsp 1) 請求被髮送到本機埠8080,被在那裡偵聽的Coyote HTTP/1.1 Connector獲得

tomcat目錄結構配置檔案說明

啟動關閉tomcat  需要先配置JAVA_HOME 雙擊%CATALANA_HOME%\bin\startup.bat 雙擊%CATALANA_HOME%\bin\shutdown.bat

Tomcat處理一個HTTP請求過程

一、Tomcat的組成 (1)Server伺服器元素代表整個catalina servlet容器。是單例模式。 (2)ServiceService是這樣一個集合:它由一個或者多個Connector組成,以及一個Engine,負責處理所有Connector所獲得的客戶請求。

Tomcat伺服器處理一個http請求過程

Tomcat容器就是一個Servlet,理解Servlet的執行過程。 (1)請求被髮送到本機埠8080,被在那裡監聽的Coyoto Http/1.1 Connector獲得。 (2)Connector把該請求交給它所在的Service的Engine

Tomcat如何處理一個HTTP請求過程

Tomcat是一個基於元件的伺服器,它的構成元件都是可配置的,Tomcat的各個元件是在<TOMCAT_HOME>\conf\server.xml檔案中配置的。 server.xml檔案的基本組成結構如下: <Server>             

容器完整處理一個http請求過程

初學java web的朋友們應該都知道tomcat容器,但是tomcat是如何完成一次http請求的過程,這裡做一個記錄。 當用戶在客戶端點選一個連結,該連結的URL指向一個servlet,經過網路轉發到應用所在的web伺服器的,此時web伺服器不是直接把申請發給servlet本身,而是傳送給部署該s

SpringMVC:處理一個http請求的完整過程

SpringMVC是一個基於DispatcherServlet的MVC框架,每一個請求最先訪問的都是DispatcherServlet,DispatcherServlet負責轉發每一個Request請求給相應的Handler,Handler處理以後再返回相

tomcat原始碼解析第6課-一次http請求過程

目錄 1、啟動8080埠監聽http請求時序圖 2、啟動8080埠監聽http請求程式碼解析 3、http請求時序圖 4、http請求request和response的封裝 5、查詢自定義過濾器和servlet 6、自定義的過濾器和servlet呼叫 一、啟

nginx 如何處理一個HTTP請求

基於名字的虛擬主機 Nginx首先選定由哪一個虛擬主機來處理請求。讓我們從一個簡單的配置(其中全部3個虛擬主機都在埠*:80上監聽)開始: server { listen 80; server_name example.org www.exa

tomcat目錄結構修改端口號

應用 out proto emp tomcat 新的 啟動tomcat 目錄 訪問 一、Tomcat 服務器文件壓縮成功後,將會出現7個文件夾,Tomcat目錄下的文件結構,如下: Tomcat   (1)bin --------------------保存啟動與監控Tom

Tomcat的工程目錄結構原始部署方法

Tomcat目錄結構 複製到Tomcat的webapps目錄下去執行的web工程,其目錄結構都必須遵守一定的標註。Tomcat的一般目錄結構為: 各目錄下包含的檔案介紹: - test下:WEB-INF資料夾、JSP檔案、HTML檔案以及一些圖片

tomcat目錄結構、web應用的目錄結構相關應用

tomcat的目錄結構 —–簡單說 /bin:存放啟動和關閉tomcat的指令碼檔案; /conf:存放tomcat的各種配置檔案,比如:server.xml /server/lib:存放tomcat伺服器所需要的各種jar檔案(jar檔案只可被tomc

Tomcat內部結構請求原理(轉)

周期 成了 authent 代碼 部分 min 它的 war ace Tomcat Tomcat是一個JSP/Servlet容器。其作為Servlet容器,有三種工作模式:獨立的Servlet容器、進程內的Servlet容器和進程外的Servlet容器。 Tomcat的組織

zbb20171108 tomcat目錄結構

apps 刪除 訪問 日誌文件 web-inf trigge win trigger 文件夾 Tomcat8.0的目錄結構:/bin:存放windows或Linux平臺上啟動和關閉Tomcat的腳本文件,startup.bat,shutdown.bat,可以直接開啟關閉to

Tomcat 目錄結構以及基本配置

路勁 運行 system 工作 tom 地址 class文件 我們 webapps   1 Tomcat 目錄層次結構    ① bin:存放啟動和關閉tomcat 的腳本文件② conf: 存放配置文件 server.xml:該文件用於配置和ser

Tomcat結構工作原理

Tomcat 工作原理 Tomcat下有一個Server服務器,裏面有多個service服務,每個service服務有兩個核心組件:Connector和Container——工作原理(處理請求的過程) 用戶點擊網頁內容,請求被發送到本機端口8080,被在那裏監聽的Coyote HTTP/1.1 Co

Tomcat目錄結構詳解

不能 虛擬 進制 應用 其他 詳解 其中 use 執行 1.bin:   該目錄下存放的是二進制可執行文件,如果是安裝版,那麽這個目錄下會有兩個exe文件:tomcat6.exe、tomcat6w.exe,前者是在控制臺下啟動Tomcat,後者是彈出UGI窗口啟動Tomc

tomcat整體結構元件介紹

tomcat核心由聯結器(Connector)元件和容器(Container)元件組成: 1,Connector元件負責在伺服器端處理客戶端連線,包括接收客戶端連線,接收客戶端訊息報文以及訊息報文的解析工作 2,Container元件負責對客戶端請求進行邏輯處理,並把結果返回給客戶端