天天看點

Tomcat配置檔案server.xml解析概述頂層元素(Top Level Elements)線程池(Eecutors)連接配接器(Connectors)容器(Containers)

目錄

  • 概述
  • 頂層元素(Top Level Elements)
    • 1. Server
    • 2. Service
  • 線程池(Eecutors)
    • 1. Executor
  • 連接配接器(Connectors)
    • 1. Http/1.1 Connector
  • 容器(Containers)
    • 1. Engine
    • 2. Host
    • 3. Context

概述

Tomcat安裝目錄中的conf/server.xml用于配置Tomcat Servlet/JSP容器的行為,本文介紹server.xml中的各配置元素的相關資訊。配置元素主要分為以下幾個種類:

  • 頂層元素

    <Server>

    是配置檔案的根元素,

    <Service>

    代表一組連接配接器(Connector)和與之關聯的一個引擎(Engine)的組合。
  • 連接配接器

    代表用戶端發送請求到的特定服務(Service)以及從服務擷取相應的接口。

  • 容器

    代表用于處理請求并産生相應響應的一類元件。一個引擎(Engine)處理所在服務(Service)的所有請求;一個虛拟主機(Host)處理該虛拟主機的所有請求,一個上下文(Context)處理該Web應用的所有請求。

  • 嵌套元件

    表示可以嵌套在容器内部的元素。有些元素可以嵌套在任何容器,有些隻能嵌套在Context元素内部。

頂層元素(Top Level Elements)

1. Server

1)簡介

Server元素表示整個Servlet容器。它是配置檔案的根元素,它的屬性代表整個servlet容器的特征。

2)公共屬性

屬性名 描述
className Server元件的具體實作對應的的Java類的名稱,它必須實作

org.apache.catalina.Server

接口,如果沒有配置該屬性,預設使用标準實作,Server的标準實作Java類為

org.apache.catalina.core.StandardServer

address 用于接收shutdwn指令的TCP/IP的位址,如果沒有配置該屬性,預設使用

localhost

port 用于接收shutdwn指令的TCP/IP的端口,設定為

-1

可以禁用關閉指令端口
shutdown 通過TCP/IP協定從特定端口接收的指令字元串,用于關閉Tomcat伺服器

2. Service

1)簡介

Service元素代表一個或多個Connector元件(用于接收請求)和與之關聯的一個Engine元件(用于處理請求)的組合。Server元素可以内嵌一個或多個Service元素。

2)公共屬性

屬性名 描述
className Service元件的具體實作對應的Java類的名稱,它必須實作

org.apache.catalina.Service

接口,如果沒有配置該屬性,預設使用标準實作,Service的标準實作Java類為

org.apache.catalina.core.StandardService

name Service元件的名稱,标準實作中會用于日志資訊。Server中每個Service名稱必須唯一

線程池(Eecutors)

1. Executor

1)簡介

Executor代表可以在Tomcat各元件之間共享的線程池。預設每個Connector會實作自己的線程池,但是現在允許各個Connector元件和其它支援線程池的元件共享線程池。Executor元素内嵌于Service元素,并且應該出現在Connector元素之前,以便被Connector元件選擇使用。

2)公共屬性

屬性名 描述
className Executor元件的具體實作對應的Java類的名稱,它必須實作

org.apache.catalina.Executor

接口,如果沒有配置該屬性,預設使用标準實作,Executor的标準實作Java類為

org.apache.catalina.core.StandardThreadExecutor

name 用于在server.xml中的其他位置引用此池的名稱。 該名稱是必需的且唯一的。

連接配接器(Connectors)

1. Http/1.1 Connector

1)簡介

HTTP Connector元素表示支援 HTTP/1.1協定的Connector元件,它使Catalina除作為Servlet/JSP容器外,還具備作為獨立的Web伺服器的功能。一個服務(Service)可以有一個或多個Connector,運作在伺服器端的每個Connector元件的實作監聽特定的TCP端口,将請求轉發到關聯的Engine元件進行處理并生成相應。

Connector元件接收每個請求期間需要一個線程進行處理,如果并發請求數超過目前可用線程數,額外的線程将會被建立直到達到目前Connector元件允許建立的最大線程數(由maxThreads屬性設定,預設200,如果配置了線程池元件,該屬性将被忽略),如果仍有更多并發請求,它們将堆疊在目前Connector元件建立的server socket内(一個隊列),直到達到最大值(由acceptCount屬性設定,預設100),如果仍有更多并發請求,将會被拒絕。

2)公共屬性

屬性名 描述
allowTrace 設定是否支援請求方法Trace,預設為false
asyncTimeout 異步請求的逾時時間,機關為毫秒,預設為30000
maxHeaderCount 請求攜帶的請求頭最大數量,超出限制請求會被拒絕,設定為負數表示不限制數量,預設為100
maxParameterCount 請求攜帶的參數最大數量(GET和POST),超出請求會被拒絕,設定為負數表示不限制數量,預設為10000
port Connector元件建立伺服器套接字并等待連接配接的TCP端口,如果設定為0,Tomcat将會為此Connector随機選擇一個可用的端口号,這通常僅适用于嵌入式和測試應用程式
protocal 設定協定以處理傳入流量,預設值為HTTP / 1.1
redirectPort 如果此Connector支援非SSL請求,并且收到比對的請求需要SSL傳輸,則Catalina将自動将請求重定向到此處指定的端口号
connectionTimeout 用于設定建立連接配接後,Connector等待請求URI呈現的毫秒數

容器(Containers)

1. Engine

1)簡介

Engine元素表示對特定服務(Service)的全部請求的處理器。它從一個或多個連接配接器(Connector)接收請求并傳回完整的響應給連接配接器以便最終傳送給用戶端。Engine元素必須内嵌于Service元素中并跟随在Connector元素之後。

2)公共屬性

屬性名 描述
defaultHost 預設主機名,當發往本機的請求指定的host名稱不存在時,将使用defaultHost指定的host進行處理;是以,defaultHost的值,必須與Engine中的一個Host元件的name屬性值比對。
name Engine元件的邏輯名稱,用于日志和錯誤資訊,在整個Server中必須唯一

2. Host

1)簡介

Host元素表示虛拟主機,在Tomcat正在運作的伺服器(Server)和伺服器的網絡名稱(域名)之間建立關聯,使用戶端能夠通過域名通路伺服器。如通過www.baidu.com通路百度伺服器。

一個或多個Host元素内嵌于Engine元素中,Host元素可以内嵌Context元素(代表與此虛拟主機關聯的Web應用),至少有一個Host元素name屬性與Engine元素的defaultHost屬性比對。

用戶端通常通過主機名通路伺服器,主機名将會包含在HTTP請求頭中,Tomcat會截取此資訊用于比對伺服器上的虛拟主機,如果沒有找到,則使用預設主機處理請求。

2)公共屬性

屬性名 描述
appBase 此虛拟主機的xml基目錄,這是可能包含要在此虛拟主機上釋出的Web應用的檔案夾的路徑,可以是絕對路徑,也可以是相對路徑(相對于

$CATALINA_BASE

),預設值為"webapps"
xmlBase 這是可能包含要在此虛拟主機上釋出的Web應用的xml描述檔案的檔案夾的路徑,可以是絕對路徑,也可以是相對路徑(相對于

$CATALINA_BASE

),預設值為“conf/<engne_name>/<host_name>”
autoDeploy 此标志值訓示Tomcat是否應在Tomcat運作時定期檢查新添加的或更新的Web應用程式。 如果為true,則Tomcat會定期檢查appBase和xmlBase目錄,并部署找到的所有新添加的Web應用程式 和重新加載更新的Web應用程,預設值為true
deployOnStartup 此标志訓示Tomcat啟動時應自動釋出此虛拟主機的Web應用,預設值為true
name 虛拟主機的名稱,可以使用

*.domainname

(例如:

*.apache.org

),它會比對該域下所有主機名,除非有完全比對

2)标準實作屬性

屬性名 描述
copyXML 如果想要将嵌入在web應用内的context.xml檔案(位于/META-INF/context.xml)在應用首次啟動時複制到xmlBase中,設定為true。在随後啟動應用程式時,xmlBase中的context配置檔案将會優先被使用,即便web應用内有更新的context配置檔案。預設值為false。注意如果 deployXML設定為fasle,此屬性将無效
deployXML 如果要禁用解析嵌入在web應用内的context.xml檔案(位于/META-INF/context.xml),則設定為false。安全意識環境應将此設定為false以防止應用程式與容器的配置互動。然後,管理者将負責提供外部上下文配置檔案,并将其放在xmlBase屬性定義的位置。如果此标志為false,context配置檔案位于于/META-INF/context.xml,并且xmlBase中不存在context配置檔案,應用程式将無法啟動,因為context.xml可能包含安全部署的必要配置(例如RemoteAddrValve),不應該被忽視。預設值為true,如果啟用安全管理器,預設為false。在安全管理器下運作時,可以通過向web應用程式授予org.apache.catalina.security.DeployXmlPermission來基于每個Web應用程式啟用此功能。預設情況下,Manager和Host Manager應用程式被授予此權限,以便它們在安全管理器下運作時繼續工作。
workDir 臨時目錄檔案夾,預設為

$CATALINA_BASE/work

3)應用程式自動部署

當使用Host元件的标準實作與預設配置時,appbase中的Web應用程式和xmlbase中的context配置檔案指定的Web應用将會在Tomcat啟動時自動部署(Host元素的

deployOnStartup

屬性預設為true ),并且Tomcat運作時如果檢測到變化将會重新釋出或重新加載Web應用程式(Host元素的

autoDeploy

屬性預設為true )。

當使用自動部署時,虛拟主機appBase和xmlBase中的相關檔案(Web應用程式的context.xml檔案或.war檔案或檔案夾)必須符合期望的命名規則(後面會有具體介紹)。

自動部署過程使用以下搜尋順序識别新的或已修改的Web應用程式:

  • 在Host xmlBase中的配置檔案指向的Web應用程式
  • 在HostappBase中的還沒有被識别的war格式Web應用程式
  • 在Host appBase中的還沒有被識别的檔案夾格式Web應用程式

當Host元素的

autoDeploy

屬性為true時,自動部署程式将會監視web應用的變化。web應用程式将會被重新部署(re-deployed)會重新加載(reloaded),取決于監測到的變化情況。重新部署牽涉到建立新的web應用的情況,如果使用的是标準session manger,使用者session資訊将會丢失。重新加載使用存在的web應用,重新解析其web.xml檔案并重新加載class檔案,如果使用的是标準session manger,使用者session資訊不會丢失。

使用者可以添加檔案到自動部署程式監視的範圍(一旦這些檔案發生改變。會觸發web

應用reloaded),通過添加WatchedResources元素到context.xml 檔案。

當使用自動部署時context.xml中的docBase應在webApp之外,否則自動部署Web應用程式是可能會出問題,或者可能會部署應用程式兩次。

如果在Host元素内嵌Context元素,則應關閉自動部署或小心指定 deployIgnore屬性,否則可能會部署應用程式兩次并且這可能會導緻應用程式出現問題。

3. Context

1)簡介

Context元素代表一個運作在特定虛拟主機上的Web應用,每個Web應用展現為一個War格式檔案或是包含者未壓縮内容的檔案夾。

用于處理每個HTTP請求的Web應用程式由Catalina将Request URI的最長可能字首與每個定義的Context的路徑進行比對來選擇。 選擇後,該Context将根據Web應用程式定義的servlet映射選擇适當的servlet來處理傳入的請求。

可以根據需要定義任意數量的Context元素,每個Context元素必須有虛拟主機内唯一的Context名稱,但Context路徑可以不唯一(并行部署的情況)。可能存在一個Context的路徑是空字元串,此Context将作為此虛拟主機的預設應用,用于處理與虛拟主機内其它Context路徑均無法比對的請求。

2)并行部署

可能會同時出現部署同一個應用程式多個版本的情況,它們的Context路徑相同,用于将請求與Context版本進行比對的規則如下:

  • 如果該請求沒有session資訊,将比對最新版本;
  • 如果該請求有session資訊,那麼檢查每個版本的session manager進行session比對,比對成功則使用該版本;
  • 比對失敗則使用最新版本。

3)命名

當Host的

autoDeploy

deployOnStartup

屬性設定為true時,Context的名稱和路徑來源于定義web 應用的檔案的名稱。是以,context的路徑可能沒有在web應用程式中嵌入的META-INF/context.xml中定義的情況下,Context的名稱、路徑、版本和定義web應用的檔案的基檔案名(檔案名去除.war或者.xml字尾)具有緊密的聯系。

如果沒有版本資訊,Context名稱和路徑總是相同的,如果Context路徑為空字元串,那麼基檔案名為ROOT,否則基檔案名為Context路徑去除首個

/

并将後面的

/

替換為

#

如果具有版本資訊,Context路徑不變,Context名稱和基檔案名應在末尾添加

##

+版本資訊。一些命名慣例如下圖:

Tomcat配置檔案server.xml解析概述頂層元素(Top Level Elements)線程池(Eecutors)連接配接器(Connectors)容器(Containers)

如果想要使用和基檔案名無關的Context路徑部署web應用,那麼需要使用以下方法之一避免重複釋出:

- 設定autoDeploy和 deployOnStartup為false并且在server.xml中定義Context

- 将應用程式檔案夾或war包放在虛拟主機appBase目錄之外,并且在context.xml中通過docBase屬性指向該目錄。

3)定義Context

不建議将Context元素直接定義在server.xml中,因為這使修改Context配置更有侵入性,因為不重新開機Tomcat的情況下無法重新加載server.xml。預設Context元素将會覆寫任何server.xml中的context元素的配置,将context元素的屬性 override 設定為true可以避免。

單個web應用的Context元素可以通過如下方式定義:

- 應用程式内部獨立的/META-INF/context.xml檔案。根據Host元素的copyXML屬性,此檔案可能被複制到$CATALINA_BASE/conf/[enginename]/[hostname]/目錄并且重命名為基檔案名加".xml"擴充名

- $CATALINA_BASE/conf/[enginename]/[hostname]/檔案夾内的獨立的xml檔案,Context的路徑和版本來源于此檔案的基檔案名。此路徑下的xml檔案優先級高于web應用程式内部META-INF檔案夾的context.xml檔案

- conf/server.xml檔案中Host元素内嵌入Context元素

預設Context元素可能被定義用于比對多個web應用:

$CATALINA_BASE/conf/context.xml

檔案中的Context元素配置将被所有應用程式加。

$CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default

檔案中的Context元素資訊将會被目前虛拟主機的所有應用程式加載。

2)屬性

屬性名 描述
docBase 指定應用程式的實體位置,可以是絕對路徑,也可以是相對路徑(相對于虛拟主機的appBase)。除非Context元素定義在server.xml中或者web應用的實體位置不在Host的appBase,否則這個屬性值不能被設定。如果docBase屬性值包含符号連結,當符号連結改變時,隻有重新開機伺服器或重新部署Context才能生效,重新加載Context是無效的
override 設定為true以忽略全局或主機預設context.xml中的任何設定。 預設情況下,将使用預設context.xml中的設定,但可以通過為Context明确設定相同屬性來覆寫這些設定
path 設定web應用的上下文路徑,用于比對request URI來選擇正确的web應用處理請求。該屬性值隻有在Context元素定義在server.xml中時才可能設定,其他情況将會由Context的xml配置檔案名或docBase推斷。即使是通過server.xml靜态部署Context,隻有在docBase不是Host 的appBase時或者deployOnStartup和autoDeploy 均設定為false時才設定該屬性,否則可能會導緻重複部署
reloadable 設定為true時Catalina将會監視 /WEB-INF/classes/ 和WEB-INF/lib 中的classes的變化,并自動重新加載應用程式,預設值為false

未完待續…