tomcat配置檔案server.xml含義說明
tomcat的配置檔案一般都在conf資料夾裡,主要有server.xml,context.xml,tomcat_user.xml,web.xml四個常用配置檔案,server.xml主要是伺服器設定的,例如埠設定,路徑設定。
下面對server.xml中tomcat的預設配置進行說明,瞭解含義之後,就可以根據自己的實際情況進行修改。
各元件關係圖:
<Server port="8005" shutdown="SHUTDOWN">
<Server>
Server即Catalina servlet元件,它是server.xml的最外層元素。
port="8005"——指定8005埠負監聽tomcat的請求。若設定為-1,則禁止通過埠關閉Tomcat,同時shutdown.bat也不能使用。
shutdown="SHUTDOWN"——收到字串"SHUTDOWN"表示關閉,修改shutdown的值,對shutdown.bat無影響。
<!-- Security listener. Documentation at /docs/config/listeners.html <Listener className="org.apache.catalina.security.SecurityListener" /> --> <!--APR library loader. Documentation at /docs/apr.html --> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --> <Listener className="org.apache.catalina.core.JasperListener" /> <!-- Prevent memory leaks due to use of particular java/javax APIs--> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
Listener即監聽器,負責監聽特定的事件,當特定事件觸發時,Listener會捕捉到該事件,並做出相應處理。Listener通常用在Tomcat的啟動和關閉過程。Listener可嵌在Server、Engine、Host、Context內。
className=""——指定實現org.apache.catalina.LifecycleListener介面的類。
<GlobalNamingResources> <!-- Editable user database that can also be used by UserDatabaseRealm to authenticate users --> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources>
GlobalNamingResources用於配置JNDII(Java Naming and Directory Interface,Java命名和目錄介面)。
<Service name="Catalina">
</Service>
Service包裝Executor、Connector、Engine,以組成一個完整的服務。
className——指定實現org.apache.catalina. Service介面的類,預設值為org.apache.catalina.core.StandardService。
name———Service的名字。
Server可以包含多個Service元件。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
Connector是Tomcat接收請求的入口,每個Connector有自己專屬的監聽埠。port:"8080"——Connector監聽客戶服務的埠:8080。
protoco="HTTP/1.1"——Connector使用的協議(HTTP/1.1或AJP/1.3)。
connectionTimeout="20000"——每個請求的最長連線時間20000ms。
redirectPort="8443"——伺服器正在處理Http請求時,為收到的SSL(Secure Sockets Layer 安全套接層)處理重定位埠:8443。
<Engine name="Catalina" defaultHost="localhost">
</Engine>
Service內必須包含一個Engine元件,Service包含一個或多個Connector元件,Service內的Connector共享一個Engine。
Engine負責處理Service內的所有請求。它接收來自Connector的請求,並決定傳給哪個Host來處理,Host處理完請求後,將結果返回給Engine,Engine再將結果返回給Connector。
name:"Catalina"——Engine的名字。
defaultHost="localhost"——指定預設處理請求的虛擬主機名:localhost。要求和Host name定義一致。<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
Realm可以理解為包含使用者、密碼、角色的”資料庫”。Tomcat定義了多種Realm實現:JDBC Database Realm、DataSource Database Realm、JNDI Directory Realm、UserDatabase Realm等
className:""——指定Realm 使用的類名,此類必須實現org.apache.catalina.Realm 介面
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
Host負責管理一個或多個Web專案.
name="localhost"——指定預設虛擬主機名:localhost。appBase="webapps"——預設Web原始碼存放目錄,可以是war檔案或目錄。(絕對路徑、相對路徑均可)unpackWARS="true"——是否自動將war檔案解壓,true-自動解壓,false-直接從WAR檔案執行Web專案。autoDeploy="true"——是否開啟自動部署。設為true,Tomcat檢測到appBase有新新增的Web專案時,會自動將其部署。其他屬性:
startStopThreads-執行緒池內的執行緒數量。Tomcat啟動時,Host提供一個執行緒池,用於部署Web專案。
startStopThreads為0,並行執行緒數=系統CPU核數。
startStopThreads為負數,並行執行緒數=系統CPU核數+startStopThreads,如果(系統CPU核數+startStopThreads)小於1,並行執行緒數設為1。
startStopThreads為正數,並行執行緒數= startStopThreads。
startStopThreads預設值為1。
startStopThreads為預設值時,Host只提供一個執行緒,用於部署Host下的所有Web專案。如果Host下的Web專案較多,由於只有一個執行緒負責部署這些專案,因此這些專案將依次部署,最終導致Tomcat的啟動時間較長。此時,修改startStopThreads值,增加Host部署Web專案的並行執行緒數,可降低Tomcat的啟動時間。
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log."
suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
Valve可以理解為Tomcat的攔截器,而我們常用filter為專案內的攔截器。Valve可以用於Tomcat的日誌、許可權等。Valve可嵌在Engine、Host、Context內。
className=""——指定Valve 使用的類名,如用org.apache.catalina.valves.AccessLogValve 類可以記錄應用程式的訪問資訊。
directory="logs"——指定log 檔案存放的位置。
prefix=""——指定log 檔案的字首。
suffix=""——指定log 檔案的字尾。
pattern=""——有兩個值,common 方式記錄遠端主機名或ip 地址,使用者名稱,日期,第一行請求的字串,HTTP 響應程式碼,傳送的位元組數。combined 方式比common 方式記錄的值更多。