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的名字。
<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等
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
Host負責管理一個或多個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的啓動時間。
Tomcat配置多Host可參考此文:http://grass51.blog.51cto.com/4356355/1123400
<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 方式記錄的值更多。