Tomcat中server.xml配置詳解


Tomcat中server.xml配置詳解

該文件描述了如何啟動Tomcat Server

<Server>
    <Listener />
    <GlobaNamingResources>
    </GlobaNamingResources>
    <Service>
        <Connector />
        <Engine>
            <Logger />
            <Realm />
                <host>
                    <Logger />
                    <Context />
                </host>
        </Engine>
    </Service>
</Server>

完整的server.xml

  1 <?xml version='1.0' encoding='utf-8'?>
  2 <!--
  3   Licensed to the Apache Software Foundation (ASF) under one or more
  4   contributor license agreements.  See the NOTICE file distributed with
  5   this work for additional information regarding copyright ownership.
  6   The ASF licenses this file to You under the Apache License, Version 2.0
  7   (the "License"); you may not use this file except in compliance with
  8   the License.  You may obtain a copy of the License at
  9 
 10       http://www.apache.org/licenses/LICENSE-2.0
 11 
 12   Unless required by applicable law or agreed to in writing, software
 13   distributed under the License is distributed on an "AS IS" BASIS,
 14   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 15   See the License for the specific language governing permissions and
 16   limitations under the License.
 17 -->
 18 <!-- Note:  A "Server" is not itself a "Container", so you may not
 19      define subcomponents such as "Valves" at this level.
 20      Documentation at /docs/config/server.html
 21  -->
 22 <Server port="8005" shutdown="SHUTDOWN">
 23   <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
 24   <!-- Security listener. Documentation at /docs/config/listeners.html
 25   <Listener className="org.apache.catalina.security.SecurityListener" />
 26   -->
 27   <!--APR library loader. Documentation at /docs/apr.html -->
 28   <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
 29   <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
 30   <Listener className="org.apache.catalina.core.JasperListener" />
 31   <!-- Prevent memory leaks due to use of particular java/javax APIs-->
 32   <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
 33   <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
 34   <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
 35 
 36   <!-- Global JNDI resources
 37        Documentation at /docs/jndi-resources-howto.html
 38   -->
 39   <GlobalNamingResources>
 40     <!-- Editable user database that can also be used by
 41          UserDatabaseRealm to authenticate users
 42     -->
 43     <Resource name="UserDatabase" auth="Container"
 44               type="org.apache.catalina.UserDatabase"
 45               description="User database that can be updated and saved"
 46               factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
 47               pathname="conf/tomcat-users.xml" />
 48   </GlobalNamingResources>
 49 
 50   <!-- A "Service" is a collection of one or more "Connectors" that share
 51        a single "Container" Note:  A "Service" is not itself a "Container",
 52        so you may not define subcomponents such as "Valves" at this level.
 53        Documentation at /docs/config/service.html
 54    -->
 55   <Service name="Catalina">
 56 
 57     <!--The connectors can use a shared executor, you can define one or more named thread pools-->
 58     <!--
 59     <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
 60         maxThreads="150" minSpareThreads="4"/>
 61     -->
 62 
 63 
 64     <!-- A "Connector" represents an endpoint by which requests are received
 65          and responses are returned. Documentation at :
 66          Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
 67          Java AJP  Connector: /docs/config/ajp.html
 68          APR (HTTP/AJP) Connector: /docs/apr.html
 69          Define a non-SSL HTTP/1.1 Connector on port 8080
 70     -->
 71     <Connector port="8080" protocol="HTTP/1.1"
 72                connectionTimeout="20000"
 73                redirectPort="8443" />
 74     <!-- A "Connector" using the shared thread pool-->
 75     <!--
 76     <Connector executor="tomcatThreadPool"
 77                port="8080" protocol="HTTP/1.1"
 78                connectionTimeout="20000"
 79                redirectPort="8443" />
 80     -->
 81     <!-- Define a SSL HTTP/1.1 Connector on port 8443
 82          This connector uses the BIO implementation that requires the JSSE
 83          style configuration. When using the APR/native implementation, the
 84          OpenSSL style configuration is required as described in the APR/native
 85          documentation -->
 86     <!--
 87     <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
 88                maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
 89                clientAuth="false" sslProtocol="TLS" />
 90     -->
 91 
 92     <!-- Define an AJP 1.3 Connector on port 8009 -->
 93     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
 94 
 95 
 96     <!-- An Engine represents the entry point (within Catalina) that processes
 97          every request.  The Engine implementation for Tomcat stand alone
 98          analyzes the HTTP headers included with the request, and passes them
 99          on to the appropriate Host (virtual host).
100          Documentation at /docs/config/engine.html -->
101 
102     <!-- You should set jvmRoute to support load-balancing via AJP ie :
103     <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
104     -->
105     <Engine name="Catalina" defaultHost="localhost">
106 
107       <!--For clustering, please take a look at documentation at:
108           /docs/cluster-howto.html  (simple how to)
109           /docs/config/cluster.html (reference documentation) -->
110       <!--
111       <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
112       -->
113 
114       <!-- Use the LockOutRealm to prevent attempts to guess user passwords
115            via a brute-force attack -->
116       <Realm className="org.apache.catalina.realm.LockOutRealm">
117         <!-- This Realm uses the UserDatabase configured in the global JNDI
118              resources under the key "UserDatabase".  Any edits
119              that are performed against this UserDatabase are immediately
120              available for use by the Realm.  -->
121         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
122                resourceName="UserDatabase"/>
123       </Realm>
124 
125       <Host name="localhost"  appBase="webapps"
126             unpackWARs="true" autoDeploy="true">
127 
128         <!-- SingleSignOn valve, share authentication between web applications
129              Documentation at: /docs/config/valve.html -->
130         <!--
131         <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
132         -->
133 
134         <!-- Access log processes all example.
135              Documentation at: /docs/config/valve.html
136              Note: The pattern used is equivalent to using pattern="common" -->
137         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
138                prefix="localhost_access_log." suffix=".txt"
139                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
140 
141       </Host>
142     </Engine>
143   </Service>
144 </Server>

 

<\Server>元素

它代表整個容器,是Tomcat實例的頂層元素.由org.apache.catalina.Server接口來定義.它包含一個元素.並且它不能做為任何元素的子元素.

<!--一個“Server”是一個提供完整的JVM的獨立組件,它可以包含一個或多個“Service”實例。服務器在指定的端口上監聽shutdown命令。--> 注意:一個“Server”自身不是一個“Container”(容器),因此在這里你 不可以定義諸如“Valves”或者“Loggers”子組件--> <!-- 啟動Server 在端口8005處等待關閉命令 如果接受到"SHUTDOWN"字符串則關閉服務器-->

 <Server port="8005" shutdown="SHUTDOWN" debug="0">

1>className指定實現org.apache.catalina.Server接口的類.默認值為org.apache.catalina.core.StandardServer

2>port指定Tomcat監聽shutdown命令端口.終止服務器運行時,必須在Tomcat服務器所在的機器上發出shutdown命令.該屬性是必須的.

3>shutdown指定終止Tomcat服務器運行時,發給Tomcat服務器的shutdown監聽端口的字符串.該屬性必須設置

<\Service>元素

該元素由org.apache.catalina.Service接口定義,它包含一個元素,以及一個或多個,這些Connector元素共享用同一個Engine元素

<!-- 一個“Service”是一個或多個共用一個單獨“Container”(容器)的“Connectors”
組合(因此,應用程序在容器中可見)。通常,這個容器是一個“Engine”
(引擎),但這不是必須的。-->

注意:一個“Service”自身不是一個容器,因此,在這個級別上你不可定義
諸如“Valves”或“Loggers”子組件。

Tomcat的Standalone Service
Service是一組Connector的集合
它們共用一個Engine來處理所有Connector收到的請求

**<Service name="Catalina"\>**
**<Service name="Apache"\>**
第一個<Service>處理所有直接由Tomcat服務器接收的web客戶請求.
第二個<Service>處理所有由Apahce服務器轉發過來的Web客戶請求 .
1>className 指定實現org.apahce.catalina.Service接口的類.默認為org.apahce.catalina.core.StandardService
2>name定義Service的名字

<\Connector>元素

由Connector接口定義.元素代表與客戶程序實際交互的給件,它負責接收客戶請求,以及向客戶返回響應結果.

<!-- 一個“Connector”(連接器)代表一個請求被接收和應答所需要的端點。每個連
接器通過相關的“Container”(容器)處理請求。-->

<!-- 默認情況下,一個非SSL的HTTP/1.1的連接器被綁定在端口8080。你也可以通過
根據后面的使用說明並取消第二個連接器入口的注釋,在端口8443上建立一個
SSL HTTP/1.1的連接器。開放SSL支持需要下面幾步(參見Tomcat 5文檔中怎樣
配置SSL的說明以取得更多的詳細信息):
    * 如果你的JDK是1.3或1.3以前的版本,下載安裝JSSE 1.0.2或以后版本,並放
置JAR文件到“$JAVA_HOME/jre/lib/ext”目錄下。
    * 帶一個“changeit”的口令值執行:
%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA (Windows)
$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA (UNIX)
來生成它自己的證書私鑰。

默認情況下,當一個web應用程序調用請求時,DNS查詢是可行的。這將對性能造
成一些不利的影響,因此,你可以將“enableLookups”設置為“false”來關閉DNS
查詢。當DNS查詢被關閉時,request.getRemoteHost()將返回包含遠程客戶IP地
址的字符串。-->

Coyote HTTP/1.1 Connector

className : 該Connector的實現類是org.apache.coyote.tomcat4.CoyoteConnector

port : 在端口號8080處偵聽來自客戶browser的HTTP1.1請求.如果把8080改成80,則只要輸入http://localhost/即可
protocol:設定Http協議,默認值為HTTP/1.1
minSpareThreads: 該Connector先創建5個線程等待客戶請求,每個請求由一個線程負責
maxSpareThread:設定在監聽端口的線程的最大數目,這個值也決定了服務器可以同時響應客戶請求的最大數目.默認值為200
    acceptCount : 當現有線程已經達到最大數75時,為客戶請求排隊.當隊列中請求數超過100時,后來的請求返回Connection refused錯誤
redirectport : 當客戶請求是https時,把該請求轉發到端口8443去
   enableLookups:如果設為true,表示支持域名解析,可以把IP地址解析為主機名.WEB應用中調用request.getRemoteHost方法返回客戶機主機名.默認值為true
   connectionTimeout:定義建立客戶連接超時的時間.如果為-1,表示不限制建立客戶連接的時間
allowTrace:是否允許HTTP的TRACE方法,默認為false
emptySessionPath:如果設置為true,用戶的所有路徑都將設置為/,默認為false。
enableLookups:調用request、getRemoteHost()執行DNS查詢,以返回遠程主機的主機名,如果設置為false,則直接返回IP地址。
maxPostSize:指定POST方式請求的最大量,沒有指定默認為2097152。
protocol:值必須為HTTP1.1,如果使用AJP處理器,該值必須為AJP/1.3
proxyName:如這個連接器正在一個代理配置中被使用,指定這個屬性,在request.getServerName()時返回
redirectPort:如連接器不支持SSL請求,如收到SSL請求,Catalina容器將會自動重定向指定的端口號,讓其進行處理。
scheme:設置協議的名字,在request.getScheme()時返回,SSL連接器設為”https”,默認為”http”
secure:在SSL連接器可將其設置為true,默認為false
URIEncoding:用於解碼URL的字符編碼,沒有指定默認值為ISO-8859-1
useBodyEncodingForURI:主要用於Tomcat4.1.x中,指示是否使用在contentType中指定的編碼來取代URIEncoding,用於解碼URI查詢參數,默認為false
xpoweredBy:為true時,Tomcat使用規范建議的報頭表明支持Servlet的規范版本,默認為false
acceptCount:當所有的可能處理的線程都正在使用時,在隊列中排隊請求的最大數目。當隊列已滿,任何接收到的請求都會被拒絕,默認值為10
bufferSize:設由連接器創建輸入流緩沖區的大小,以字節為單位。默認情況下,緩存區大的大小為2048字節
compressableMimeType:MIME的列表,默認以逗號分隔。默認值是text/html,text/xml,text/plain
compression:指定是否對響應的數據進行壓縮。off:表示禁止壓縮、on:表示允許壓縮(文本將被壓縮)、force:表示所有情況下都進行壓縮,默認值為off
connectionTimeout:設置連接的超時值,以毫秒為單位。默認值為60000=60秒
disableUploadTimeOut:允許Servlet容器,正在執行使用一個較長的連接超時值,以使Servlet有較長的時間來完成它的執行,默認值為false
maxHttpHeaderSize:HTTP請求和響應頭的最大量,以字節為單位,默認值為4096字節
maxKeepAliveRequest:服務器關閉之前,客戶端發送的流水線最大數目。默認值為100
maxSpareThreads:允許存在空閑線程的最大數目,默認值為50
minSpareThreads:設當連接器第一次啟協創建線程的數目,確保至少有這么多的空閑線程可用。默認值為4
port:服務端套接字監聽的TCP端口號,默認值為8080(必須)
socketBuffer:設Socket輸出緩沖區的大小(以字節為單位),-1表示禁止緩沖,默認值為9000字節
toNoDelay:為true時,可以提高性能。默認值為true
threadPriority:設JVM中請求處理線程優先級。默認值為NORMAL-PRIORITY

AJP連接器:

用於將Apache與Tomcat集成在一起,當Apache接收到動態內容請求時,通過在配置中指定的端口號將請求發送給在此端口號上監聽的AJP連接器組件。

屬性:

backlog:當所有可能的請求處理線程都在使用時,隊列中排隊的請求最大數目。默認為10,當隊列已滿,任何請求都將被拒絕
maxSpareThread:允許存在空閑線程的最大數目,默認值為50
maxThread:最大線程數,默認值為200
minSpareThreads:設當連接器第一次啟動時創建線程的數目,確保至少有這么多的空閑線程可用,默認值為4
port:服務端套接字的TCP端口號,默認值為8089(必須)
topNoDelay:為true時,可以提高性能,默認值為true
soTimeout:超時值

例:

<!—Define an AJP1.3 Connector on port 8089--> <Connector port=”8089” enableLookups=”false” redirectPort=”8443” protocol=”AJP/1.3” /> <Connector port="8080" maxThread="50" minSpareThreads="25" maxSpareThread="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" /> <Connection port="8009" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3" />

第一個Connector元素定義了一個HTTP Connector,它通過8080端口接收HTTP請求;

第二個Connector元素定義了一個JD Connector,它通過8009端口接收由其它服務器轉發過來的請求.

 

<\Engine>元素

每個Service元素只能有一個Engine元素.處理在同一個中所有元素接收到的客戶請求.由org.apahce.catalina.Engine接口定義.

<!-- 一個“Engine”(引擎)代表處理每個請求的入口點(在Catalina內)。這個Tomcat
         的標准獨立引擎實現分析包含在請求中的HTTP頭信息,並將請求傳送到適當的主機
         或虛擬主機上。-->
<!-- Engine用來處理Connector收到的Http請求
         它將匹配請求和自己的虛擬主機,並把請求轉交給對應的Host來處理
         默認虛擬主機是localhost
         -->

<Engine name="Catalina" defaultHost="localhost" debug="0">
1>className指定實現Engine接口的類,默認值為StandardEngine
2>defaultHost指定處理客戶的默認主機名,在<Engine>中的<Host>子元素中必須定義這一主機
3>name定義Engine的名字
<Engine>可以包含如下元素<Logger>, <Realm>, <Value>, <Host>

<\Host>元素

它由Host接口定義.一個Engine元素可以包含多個元素.每個的元素定義了一個虛擬主機.它包含了一個或多個Web應用.

<!-- 定義默認的虛擬主機
           注意:XML模式確認將不能與Xerces 2.2同工作。
      -->


<!-- 虛擬主機localhost
           appBase : 指 定虛擬主機的目錄,可以指定絕對目錄,也可以指定相對於<CATALINA_HOME>的相對目錄.如果沒有此項,默認 為<CATALINA_HOME>/webapps. 它將匹配請求和自己的Context的路徑,並把請求轉交給對應的Context來處 理
              autoDeploy:如果此項設為true,表示Tomcat服務處於運行狀態時,能夠監測appBase下的文件,如果有新有web應用加入進來,會自運發布這個WEB應用
              unpackWARs:如果此項設置為true,表示把WEB應用的WAR文件先展開為開放目錄結構后再運行.如果設為false將直接運行為WAR文件
              alias:指定主機別名,可以指定多個別名
              deployOnStartup:如果此項設為true,表示Tomcat服務器啟動時會自動發布appBase目錄下所有的Web應用.如果Web應用 中的server.xml沒有相應的<Context>元素,將采用Tomcat默認的Context
           -->

<Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true"><Host>元素中可以包含如下子元素
<Logger>, <Realm>, <Value>, <Context>

<\Context>元素

它由Context接口定義.是使用最頻繁的元素.每個<context元素代表了運行在虛擬主機上的單個web應用.一個可以包含多個元素.每個web應用有唯一
的一個相對應的Context代表web應用自身.servlet容器為第一個web應用創建一個

<!-- Context,對應於一個Web App
             path : 該Context的路徑名是"",故該Context是該Host的默認Context
             docBase : 該Context的根目錄是webapps/mycontext/
                reloadable:如果這個屬性設為true, Tomcat服務器在運行狀態下會監視在WEB-INF/classes和Web-INF/lib目錄CLASS文件的改運.如果監視到有class文件 被更新,服務器自重新加載Web應用
                useNaming:指定是否支持JNDI,默認值為了true 
                cookies指定是否通過Cookies來支持Session,默認值為true
             -->

<Context path="" docBase="mycontext" debug="0"/>
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

 

 

 

 

 

 

 

<!-- 一個“Engine”(引擎)代表處理每個請求的入口點(在Catalina內)。這個Tomcat 的標准獨立引擎實現分析包含在請求中的HTTP頭信息,並將請求傳送到適當的主機 或虛擬主機上。--><!-- Engine用來處理Connector收到的Http請求 它將匹配請求和自己的虛擬主機,並把請求轉交給對應的Host來處理 默認虛擬主機是localhost --><Engine name="Catalina" defaultHost="localhost" debug="0"> 1>className指定實現Engine接口的類,默認值為StandardEngine 2>defaultHost指定處理客戶的默認主機名,在<Engine>中的<Host>子元素中必須定義這一主機 3>name定義Engine的名字 在<Engine>可以包含如下元素<Logger>, <Realm>, <Value>, <Host>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM