Tomcat(二):server.xml配置
一、server.xml詳解
Tomcat各組件關(guān)系圖
?
1、Server
? server.xml的最外層元素。
常用屬性:
? port:Tomcat監(jiān)聽shutdown命令的端口。
? shutdown:通過指定的端口(port)關(guān)閉Tomcat所需的字符串。修改shutdown的值,對shutdown.bat無影響
2. Listener
? Listener即監(jiān)聽器,負責(zé)監(jiān)聽特定的事件,當(dāng)特定事件觸發(fā)時,Listener會捕捉到該事件,并做出相應(yīng)處理。Listener通常用在Tomcat的啟動和關(guān)閉過程。Listener可嵌在Server、Engine、Host、Context內(nèi)
常用屬性:
? className:指定實現(xiàn)org.apache.catalina.LifecycleListener接口的類
3. GlobalNamingResources
? GlobalNamingResources用于配置JNDI
4. Service
? Service包裝Executor、Connector、Engine,以組成一個完整的服務(wù)
常用屬性:
? className:指定實現(xiàn)org.apache.catalina. Service接口的類,默認(rèn)值為org.apache.catalina.core.StandardService
? name:Service的名字
? Server可以包含多個Service組件
5. Executor
? Executor即Service提供的線程池,供Service內(nèi)各組件使用
常用屬性:
? className:指定實現(xiàn)org.apache.catalina. Executor接口的類,默認(rèn)值為org.apache.catalina.core. StandardThreadExecutor
? name:線程池的名字
? daemon:是否為守護線程,默認(rèn)值為true
? maxIdleTime:總線程數(shù)高于minSpareThreads時,空閑線程的存活時間(單位:ms),默認(rèn)值為60000,即1min
? maxQueueSize:任務(wù)隊列上限,默認(rèn)值為Integer.MAX_VALUE((2147483647),超過此值,將拒絕
? maxThreads:線程池內(nèi)線程數(shù)上限,默認(rèn)值為200
? minSpareThreads:線程池內(nèi)線程數(shù)下限,默認(rèn)值為25
? namePrefix:線程名字的前綴。線程名字通常為namePrefix+ threadNumber
? prestartminSpareThreads:是否在Executor啟動時,就生成minSpareThreads個線程。默認(rèn)為false
? threadPriority:Executor內(nèi)線程的優(yōu)先級,默認(rèn)值為5(Thread.NORM_PRIORITY)
? threadRenewalDelay:重建線程的時間間隔。重建線程池內(nèi)的線程時,為了避免線程同時重建,每隔threadRenewalDelay(單位:ms)重建一個線程。默認(rèn)值為1000,設(shè)置為負則不重建
6. Connector
? Connector是Tomcat接收請求的入口,每個Connector有自己專屬的監(jiān)聽端口
? Connector有兩種:HTTP Connector和AJP Connector
常用屬性:
? port:Connector接收請求的端口
? protocol:Connector使用的協(xié)議(HTTP/1.1或AJP/1.3)
? connectionTimeout:每個請求的最長連接時間(單位:ms)
? redirectPort:處理http請求時,收到一個SSL傳輸請求,該SSL傳輸請求將轉(zhuǎn)移到此端口處理
? executor:指定線程池,如果沒設(shè)置executor,可在Connector標(biāo)簽內(nèi)設(shè)置maxThreads(默認(rèn)200)、minSpareThreads(默認(rèn)10)
? acceptCount:Connector請求隊列的上限。默認(rèn)為100。當(dāng)該Connector的請求隊列超過acceptCount時,將拒絕接收請求
7. Engine
? Engine負責(zé)處理Service內(nèi)的所有請求。它接收來自Connector的請求,并決定傳給哪個Host來處理,Host處理完請求后,將結(jié)果返回給Engine,Engine再將結(jié)果返回給Connector
常用屬性:
? name:Engine的名字
? defaultHost:指定默認(rèn)Host。Engine接收來自Connector的請求,然后將請求傳遞給defaultHost,defaultHost 負責(zé)處理請求
? className:指定實現(xiàn)org.apache.catalina. Engine接口的類,默認(rèn)值為org.apache.catalina.core. StandardEngine
backgroundProcessorDelay:Engine及其部分子組件(Host、Context)調(diào)用backgroundProcessor方法的時間間隔。backgroundProcessorDelay為負,將不調(diào)用backgroundProcessor。backgroundProcessorDelay的默認(rèn)值為10
注:Tomcat啟動后,Engine、Host、Context會啟動一個后臺線程,定期調(diào)用backgroundProcessor方法。backgroundProcessor方法主要用于重新加載Web應(yīng)用程序的類文件和資源、掃描Session過期
? jvmRoute:Tomcat集群節(jié)點的id。部署Tomcat集群時會用到該屬性,
Service內(nèi)必須包含一個Engine組件
Service包含一個或多個Connector組件,Service內(nèi)的Connector共享一個Engine
8. Host
? Host負責(zé)管理一個或多個Web項目
常用屬性:
? name:Host的名字
? appBase:存放Web項目的目錄(絕對路徑、相對路徑均可)
? unpackWARs:當(dāng)appBase下有WAR格式的項目時,是否將其解壓(解成目錄結(jié)構(gòu)的Web項目)。設(shè)成false,則直接從WAR文件運行Web項目
? autoDeploy:是否開啟自動部署。設(shè)為true,Tomcat檢測到appBase有新添加的Web項目時,會自動將其部署
? startStopThreads:線程池內(nèi)的線程數(shù)量。Tomcat啟動時,Host提供一個線程池,用于部署Web項目,startStopThreads為0,并行線程數(shù)=系統(tǒng)CPU核數(shù);startStopThreads為負數(shù),并行線程數(shù)=系統(tǒng)CPU核數(shù)+startStopThreads,如果(系統(tǒng)CPU核數(shù)+startStopThreads)小于1,并行線程數(shù)設(shè)為1;startStopThreads為正數(shù),并行線程數(shù)= startStopThreads,startStopThreads默認(rèn)值為1
? startStopThreads為默認(rèn)值時,Host只提供一個線程,用于部署Host下的所有Web項目。如果Host下的Web項目較多,由于只有一個線程負責(zé)部署這些項目,因此這些項目將依次部署,最終導(dǎo)致Tomcat的啟動時間較長。此時,修改startStopThreads值,增加Host部署Web項目的并行線程數(shù),可降低Tomcat的啟動時間
Tomcat配置多Host可參考此文:http://grass51.blog.51cto.com/4356355/1123400
? 9. Context
? Context代表一個運行在Host上的Web項目。一個Host上可以有多個Context。將一個Web項目(D:\MyApp)添加到Tomcat,在Host標(biāo)簽內(nèi),添加Context標(biāo)簽
常用屬性:
path:該Web項目的URL入口。path設(shè)置為””,輸入http://localhost:8080即可訪問MyApp;path設(shè)置為”/test/MyApp”,輸入http://localhost:8080/test/MyApp才能訪問MyApp
? docBase:Web項目的路徑,絕對路徑、相對路徑均可(相對路徑是相對于CATALINA_HOME\webapps)
? reloadable:設(shè)置為true,Tomcat會自動監(jiān)控Web項目的/WEB-INF/classes/和/WEB-INF/lib變化,當(dāng)檢測到變化時,會重新部署Web項目。reloadable默認(rèn)值為false。通常項目開發(fā)過程中設(shè)為true,項目發(fā)布的則設(shè)為false
? crossContext:設(shè)置為true,該Web項目的Session信息可以共享給同一host下的其他Web項目。默認(rèn)為false
10. Cluster
? Tomcat集群配置。
11. Realm
Realm可以理解為包含用戶、密碼、角色的”數(shù)據(jù)庫”。Tomcat定義了多種Realm實現(xiàn):JDBC Database Realm、DataSource Database Realm、JNDI Directory Realm、UserDatabase Realm等
12. Valve
? Valve可以理解為Tomcat的攔截器,而我們常用filter為項目內(nèi)的攔截器。Valve可以用于Tomcat的日志、權(quán)限等。Valve可嵌在Engine、Host、Context內(nèi)
二、實例
規(guī)劃: 網(wǎng)站網(wǎng)頁目錄:/web/www 域名:www.test1.com 論壇網(wǎng)頁目錄:/web/bbs URL:bbs.test1.com/bbs 網(wǎng)站管理程序:$CATALINA_HOME/wabapps URL:manager.test.com 允許訪問地址:172.23.136.* conf/server.xml <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JasperListener" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> <!-- 全局命名資源,來定義一些外部訪問資源,其作用是為所有引擎應(yīng)用程序所引用的外部資源的定義 --!> <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> <!-- 定義的一個名叫“UserDatabase”的認(rèn)證資源,將conf/tomcat-users.xml加載至內(nèi)存中,在需要認(rèn)證的時候到內(nèi)存中進行認(rèn)證 --> <Service name="Catalina"> <!-- # 定義Service組件,同來關(guān)聯(lián)Connector和Engine,一個Engine可以對應(yīng)多個Connector,每個Service中只能一個Engine --!> <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <!-- 修改HTTP/1.1的Connector監(jiān)聽端口為80.客戶端通過瀏覽器訪問的請求,只能通過HTTP傳遞給tomcat。 --> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="test.com"> <!-- 修改當(dāng)前Engine,默認(rèn)主機是,www.test.com --> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> # Realm組件,定義對當(dāng)前容器內(nèi)的應(yīng)用程序訪問的認(rèn)證,通過外部資源UserDatabase進行認(rèn)證 <Host name="test.com" appBase="/web" unpackWARs="true" autoDeploy="true"> <!-- 定義一個主機,域名為:test.com,應(yīng)用程序的目錄是/web,設(shè)置自動部署,自動解壓 --> <Alias>www.test.com</Alias> <!-- 定義一個別名www.test.com,類似apache的ServerAlias --> <Context path="" docBase="www/" reloadable="true" /> <!-- 定義該應(yīng)用程序,訪問路徑"",即訪問www.test.com即可訪問,網(wǎng)頁目錄為:相對于appBase下的www/,即/web/www,并且當(dāng)該應(yīng)用程序下web.xml或者類等有相關(guān)變化時,自動重載當(dāng)前配置,即不用重啟tomcat使部署的新應(yīng)用程序生效 --> <Context path="/bbs" docBase="/web/bbs" reloadable="true" /> <!-- 定義另外一個獨立的應(yīng)用程序,訪問路徑為:www.test.com/bbs,該應(yīng)用程序網(wǎng)頁目錄為/web/bbs --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/www/logs" prefix="www_access." suffix=".log" pattern="%h %l %u %t "%r" %s %b" /> <!-- 定義一個Valve組件,用來記錄tomcat的訪問日志,日志存放目錄為:/web/www/logs如果定義為相對路徑則是相當(dāng)于$CATALINA_HOME,并非相對于appBase,這個要注意。定義日志文件前綴為www_access.并以.log結(jié)尾,pattern定義日志內(nèi)容格式,具體字段表示可以查看tomcat官方文檔 --> </Host> <Host name="manager.test.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- 定義一個主機名為man.test.com,應(yīng)用程序目錄是$CATALINA_HOME/webapps,自動解壓,自動部署 --> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="172.23.136.*" /> <!-- 定義遠程地址訪問策略,僅允許172.23.136.*網(wǎng)段訪問該主機,其他的將被拒絕訪問 --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/bbs/logs" prefix="bbs_access." suffix=".log" pattern="%h %l %u %t "%r" %s %b" /> <!-- 定義該主機的訪問日志 --> </Host> </Engine> </Service> </Server> conf/tomcat-users.xml <?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="manager-gui" /> <!-- 定義一種角色名為:manager-gui --> <user username="cz" password="manager$!!110" roles="manager-gui" /> <!-- 定義一個用戶的用戶名以及密碼,并賦予manager-gui的角色 --> </tomcat-users>總結(jié)
以上是生活随笔為你收集整理的Tomcat(二):server.xml配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java8 Map新增方法的使用
- 下一篇: mybatis中的#{}和${}区别,和