Tomcat 的配置文件並不多,由4個 xml 文件組成,分別是 context.xml、web.xml、server.xml、tomcat-users.xml 這幾個文件。每個文件都有自己的功能與配置方法,本文將逐一的詳細介紹這幾個配置文件。
一、context.xml 文件
Context.xml 是 Tomcat 公用的環境配置,tomcat 服務器會定時去掃描這個文件。一旦發現文件被修改(時間戳改變了),就會自動重新加載這個文件,而不需要重啓服務器。推薦在 $CATALINA_BASEconf/context.xml 中進行獨立的配置。因爲 server.xml
是不可動態重加載的資源,服務器一旦啓動了以後,要修改這個文件,就得重啓服務器才能重新加載,而context.xml 文件則不然。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
< Context path = "/eml" docBase = "eml" debug = "0" reloadbale = "true" privileged = "true" > < WatchedResource >WEB-INF/web.xml</ WatchedResource > < WatchedResource >WEB-INF/eml.xml</ WatchedResource > 監控資源文件,如果web.xml || eml.xml改變了,則自動重新加載改應用。 < Resource name = "jdbc/testSiteds" 表示指定的jndi名稱 auth = "Container" 表示認證方式,一般爲Container type = "javax.sql.DataSource" maxActive = "100" 連接池支持的最大連接數 maxIdle = "40" 連接池中最多可空閒maxIdle個連接 maxWait = "30000" 連接池中連接用完時,新的請求等待時間,毫秒 username = "txl" 表示數據庫用戶名 password = "123456" 表示數據庫用戶的密碼 driverClassName = "com.mysql.jdbc.Driver" 表示JDBC DRIVER url = "jdbc:mysql://localhost:3306/testSite" /> 表示數據庫URL地址 </ Context > |
context.xml 的三個作用範圍:
1. tomcat server 級別:
在$CATALINA_BASE/conf/context.xml 裏配置,如果你在這個地方配置、那麼這個配置文件將會被所有的webApp共享 。
2. Host 級別:
在 $CATALINA_BASE/conf/Catalina/${hostName} 裏添加 context.xml,繼而進行配置,這個配置將會被這個主機上的所有webapp共享。
3. web app 級別:
在 $CATALINA_BASE/conf/Catalina/${hostName} 裏添加 ${webAppName}.xml,繼而進行配置。
此時,path="", webAppName 即爲 path屬性的值,也就是訪問的虛擬目錄。
另:tomcat 服務器文件中的 $CATALINA_BASE/webapps 目錄下的所有文件夾都是一個應用。這個時候不需要自己動手配置,服務器默認將文件夾名映射成虛擬目錄名稱。還可以通過 $CATALINA_BASE/webapps/{App}/META-INF/context.xml 來配置,這個是在web應用中自己添加的,配置和其它一樣。
<context> 標籤是使用,見:
二、web.xml文件
Web應用程序描述文件,都是關於是Web應用程序的配置文件。所有Web應用的 web.xml 文件的父文件。
<web-app >
<filter></filter>
<filter-mapping></filter-mapping>
<servlet></servlet>
<servlet-mapping></servlet-mapping>
<session-config></session-config>
<mime-mapping></mime-mapping>
<welcome-file-list></welcome-file-list>
</web-app >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
<!-- filter 配置Servlet過濾器 filter-name 定義過濾器的名字。當有多個過濾器時,不能同名 filter-class 指定實現這一過濾的類,這個類負責具體的過濾事務 --> < filter > < filter-name >SampleFilter</ filter-name > < filter-class >mypack.SampleFilter</ filter-class > </ filter > <!-- filter-mapping 設定過濾器負責過濾的URL filter-name 過濾器名。這裏的名字一定要和filter中的過濾器名匹配 url-pattern 指定過濾器負責過濾的URL --> < filter-mapping > < filter-name >SampleFilter</ filter-name > < url-pattern >*.jsp</ url-pattern > </ filter-mapping > <!-- servlet 配置Servlet. servlet-name 定義Servlet的名字 servlet-class 指定實現這個servlet的類 init-param 定義Servlet的初始化參數和參數值,可有多個init-param。在servlet類中通過getInitParamenter(String name)方法訪問初始化參數 load-on-startup 指定當Web應用啓動時,裝載Servlet的次序。 當值爲正數或零時:Servlet容器先加載數值小的servlet,再依次加載其他數值大的servlet. 當值爲負或未定義:Servlet容器將在Web客戶首次訪問這個servlet時加載它 --> < servlet > < servlet-name >SampleServlet</ servlet-name > < servlet-class >mypack.SampleServlet</ servlet-class > < init-param > < param-name >initParam1</ param-name > < param-value >2</ param-value > </ init-param > < load-on-startup >1</ load-on-startup > </ servlet > <!-- 配置servlet映射(下面代碼爲SampleServlet指定的相對URL爲"/sample": servlet-name 指定servlet的名字,這裏的名字應該和<Servlet>元素中定義的名字匹配。 url-pattern 指定訪問這個servlet的URL。只需給出相對路徑。 --> < servlet-mapping > < servlet-name >SampleServlet</ servlet-name > < url-pattern >/sample</ url-pattern > </ servlet-mapping > <!--配置session session用來設定HttpSession的生命週期。單位(秒)--> < session-config > < session-timeout >30</ session-timeout > </ session-config > <!--配置Wel0come0文件清單--> < welcome-file-list > < welcome-file >login.jsp</ welcome-file > < welcome-file >index.htm</ welcome-file > </ welcome-file-list > |
該文件基本不用配置,Tomcat7 支持 Servlet3.0 註解定義,無需配置 web.xml。爲了使 Tomcat 能夠運行 CGI,必須把關於<servlet-name> CGI 的那段的註釋去掉。
更多細節請參考:http://blog.163.com/ny_lonely/blog/static/18892427320136925044357
三、server.xml文件
server.xml是對tomcat的設置,可以設置端口號,添加虛擬機這些的,是對服務器的設置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
< Server port = "8005" shutdown = "SHUTDOWN" > < Listener className = "org.apache.catalina.startup.VersionLoggerListener" /> < Listener className = "org.apache.catalina.security.SecurityListener" /> < 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 > <!-- 全局命名資源,來定義一些外部訪問資源,其作用是爲所有引擎應用程序所引用的外部資源的定義 --!> <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”的認證資源,將conf/tomcat-users.xml加載至內存中,在需要認證的時候到內存中進行認證 --> < Service name = "Catalina" > <!-- # 定義Service組件,同來關聯Connector和Engine,一個Engine可以對應多個Connector,每個Service中只能一個Engine --!> <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <!-- 修改HTTP/1.1的Connector監聽端口爲80.客戶端通過瀏覽器訪問的請求,只能通過HTTP傳遞給tomcat。還可以設置server與URIEncoding參數 --> < Connector port = "8009" protocol = "AJP/1.3" redirectPort = "8443" /> < Engine name = "Catalina" defaultHost = "test.com" > <!-- 修改當前Engine,默認主機是,www.test.com --> < Realm className = "org.apache.catalina.realm.LockOutRealm" > < Realm className = "org.apache.catalina.realm.UserDatabaseRealm" resourceName = "UserDatabase" /> </ Realm > # Realm組件,定義對當前容器內的應用程序訪問的認證,通過外部資源UserDatabase進行認證 < Host name = "test.com" appBase = "/web" unpackWARs = "true" autoDeploy = "true" > <!-- 定義一個主機,域名爲:test.com,應用程序的目錄是/web,設置自動部署,自動解壓 --> < Alias >www.test.com</ Alias > <!-- 定義一個別名www.test.com,類似apache的ServerAlias --> < Context path = "" docBase = "www/" reloadable = "true" /> <!-- 定義該應用程序,訪問路徑"",即訪問www.test.com即可訪問,網頁目錄爲:相對於appBase下的www/,即/web/www,並且當該應用程序下web.xml或者類等有相關變化時,自動重載當前配置,即不用重啓tomcat使部署的新應用程序生效 --> < Context path = "/bbs" docBase = "/web/bbs" reloadable = "true" /> <!-- 定義另外一個獨立的應用程序(虛擬主機),訪問路徑爲:www.test.com/bbs,該應用程序網頁目錄爲/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如果定義爲相對路徑則是相當於$CATALINA_HOME,並非相對於appBase,這個要注意。定義日誌文件前綴爲www_access.並以.log結尾,pattern定義日誌內容格式,具體字段表示可以查看tomcat官方文檔 --> </ Host > < Host name = "manager.test.com" appBase = "webapps" unpackWARs = "true" autoDeploy = "true" > <!-- 定義一個主機名爲man.test.com,應用程序目錄是$CATALINA_HOME/webapps,自動解壓,自動部署 --> < Valve className = "org.apache.catalina.valves.RemoteAddrValve" allow = "172.16.100.*" /> <!-- 定義遠程地址訪問策略,僅允許172.16.100.*網段訪問該主機,其他的將被拒絕訪問 --> < 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 > |
1、<Server>元素:
是整個配置文件的根元素。表示整個Catalina容器。
屬性:
className:實現了org.apache.catalina.Server接口的類名,標準實現類是org.apache.catalina.core.StandardServer類;
Port:Tomcat服務器監聽用於關閉Tomcat服務器的命令(必須);
Shutdown:發送到端口上用於關閉Tomcat服務器的命令;
2、<Connector>元素:
連接器,負責接收客戶的請求,以及向客戶端回送響應的消息。
HTTP連接器:
屬性:
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;
例如:
1
2
3
|
< Connector port = "8080" maxHttpHeaderSize = "8192" maxThreads = "150" minSpareThreads = "25" maxSpareThreads = "75" enableLookups = "false" redirectPort = "8443" acceptCount = "100" connectionTimeout = "20000" disableUploadTimeout = "true" /> |
AJP連接器:
用於將Apache與Tomcat集成在一起,當Apache接收到動態內容請求時,通過在配置中指定的端口號將請求發送給在此端口號上監聽的AJP連接器組件。
屬性:
backlog:當所有可能的請求處理線程都在使用時,隊列中排隊的請求最大數目。默認爲10,當隊列已滿,任何請求都將被拒絕;
maxSpareThread:允許存在空閒線程的最大數目,默認值爲50;
maxThread:最大線程數,默認值爲200;
minSpareThreads:設當連接器第一次啓動時創建線程的數目,確保至少有這麼多的空閒線程可用,默認值爲4;
port:服務端套接字的TCP端口號,默認值爲8089(必須);
topNoDelay:爲true時,可以提高性能,默認值爲true;
soTimeout:超時值;
例如:
1
2
|
<!—Define an AJP1.3 Connector on port 8089--> < Connector port = "8089" enableLookups = "false" redirectPort = "8443" protocol = "AJP/1.3" /> |
3、<Engine>元素:
爲特定的Service處理所有的請示。每個Service只能包含一個Engine元素,它負責接收和處理此Service所有的連接器收到的請求,向連接發回響應,並最終顯示在客戶端。<Engine>至少有一個<Host>元素,必須至少有一個<Host>屬性的名字與defaultHost指定的名字相匹配。
屬性:
className:實現org.apache.catalina.Engine接口,默認實現類爲org.apache.catalina.core.StandardEngine類;
defaultHost:默認主機名,值必須與<Service>的name值相匹配;
name:指定Engine的邏輯名字(必須);
jvmRoute:在負載勻衡中使用的標識符,必須唯一;
例如:
1
|
< Engine name = "Cataline" defaultHost = "localhst" > |
4、<Host>元素:
表示一個虛擬主機,爲特定的虛擬主機處理所有請求。
屬性:
appBase:設定應用程序的基目錄,絕對路徑或相對於%CATALINA_HOME%的路徑名;
autoDeploy:指示Tomcat運行時,如有新的WEB程序加開appBase指定的目錄下,是否爲自動佈署,默認值爲true;
className:實現了org.apache.catalina.Host接口的類,標準實現類爲org.apache.catalina.core.StandardHost類;
deployOnStartup:Tomcat啓動時,是否自動部署appBase屬性指定目錄下所有的WEB應用程序,默認值爲true;
name:虛擬主機的網絡名(必須);
標準Host實現類org.apahce.catalina.core.StandardHost支持的附加屬性:
deployXML:爲false將不會解析WEB應用程序內部的context.xml,默認值爲true;
unPackWARs:虛擬主機指定臨時讀寫使用的目錄的路徑名,不設,Tomcat會在%CATALINA_HOME%/work目錄下提供一個合適的目錄;
例如:
1
|
< Host name = "localhst" appBase = "webapps" unpackWARs = "true" autoDeploy = "true" xmlValidation = "false" xmlNamespaceAware = "false" > |
配置虛擬主機:
1
2
3
|
< Hostname = "xxx" appBase = "/test" > < Contentpath = " " docBase = "www/" /> </ Hostname > |
5、<context>元素:
一個WEB應用程序,處理當前WEB應用程序的所有請求,每一個<Context>必須使用唯一的上下文路徑。
屬性:
className:實現了org.apache.catalina.Context接口的類,標準實現類org.apache.catalina.core.StandardContext類;
cookies:是否將Cookie應用於Session,默認值爲true;
crossContext:是否允許跨域訪問,爲true時,在程序內調用ServletContext.getContext()方法將返回一個虛擬主機上其它web程序的請求調度器;默認值爲false,調 徑用getContext()返回爲null;
docBase:絕對路徑或相對於Host的appBase 屬性的相對路徑;
privileged:爲true,允許Web應用程序使用容器的Servlet;
path:指定上下文路徑。一個虛擬主機中,上下文路徑必須唯一;
reloadable:爲true,Tomcat運行時,如果WEB-INF/classes和WEB-INF/lib目錄中有改變,Tomcat會自動重新加載該WEB應用程序。雖方便,但開銷也大,默認值爲false,我們在調用可以打開,發佈後再關閉;
cacheMaxSize:靜態資源緩存最大值,以KB爲單位,默認值爲10240KB;
cachingAllowed:是否允許靜態資源緩存,默認爲true;
caseSensitive:默認爲true,資源文件名大小寫敏感,如果爲false大小寫不敏感;
unpackWAR:默認爲true;
workDir:爲WEB應用程序內部的Servlet指定臨時讀寫的目錄路徑名。如沒有設置,則Tomcat會在%CATALINA_HOME%/work目錄下提供一個合適的目錄;
一個 server 有一個 service,一個 service 裏有多個 connector 和一個 engine,不同的 connector 除了端口可能不同,協議也可能不同。多個connector 對應一個 engine。engine 代表我們應用程序的容器。一個 engine 中有一個到多個 host,一個host 代表我們的一個虛擬主機。host 裏又有一個到多個 context,一個 context 代表了一個應用程序的虛擬子站點。
四、tomcat-users.xml
關於用戶角色、管理員的信息都在這個配置文件中。登錄用戶默認是註釋掉的,把 <!– –>去掉才能生效。改文件已經在《Tomcat Manager用戶配置詳解》文章中,做了詳細的說明與配置,這裏就不在重複了。