tomcat讀取配置文件
最重要的配置文件:server.xml
要配置tomcat,基本上了解server.xml,context.xml和web.xml就可以了。在Tomcat中,都有這幾個文件的默認文件,如server.xml的內容如下:- <Server port=”8005” shutdown=”SHUTDOWN”>
- ...
- <Service name=”Catalina”>
- <Connector port=”8080” protocol=”HTTP/1.1”
- maxThreads=”150” connectionTimeout=”20000”
- redirectPort=”8443” />
- <Connector port=”8009” protocol=”AJP/1.3” redirectPort=”8443” />
- <Engine name=”Catalina” defaultHost=”localhost”>
- <Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
- resourceName=”UserDatabase”/>
- <Host name=”localhost” appBase=”webapps”
- unpackWARs=”true” autoDeploy=”true”
- xmlValidation=”false” xmlNamespaceAware=”false”>
- </Host>
- </Engine>
- </Service>
- </Server>
The Server Component
- <Server port=”8005” shutdown=”SHUTDOWN”>
屬性 | 描述 | 是否必須? |
className | 表示server的類,需要實現org.apache.catalina.Server接口。tocmat6默認值使用rg.apache.catalina.core.StandardServer | 否 |
port | 用來監聽shutdown屬性所對應的那個命令,實現關閉tomcat操作的TCP端口。tocmat會檢查連接是否來自同一臺機器,只有同一臺機器(物理地址)發來的消息才被接受。 | 是 |
shutdown | tomcat會監聽port所規定的端口,來接受這個屬性所規定的命令 | 是 |
屬性 | 描述 | 數量 |
<Service> | 包括一組和一個<Engine>相關聯的<Connector>。這些Connector可以併發地接收各種協議的請求,並交給<Engine>來處理 | 1 or more |
<Listener> | 用來監聽Server生命週期(start, stop, before start, after start, before stop, after stop)信息 | 0 or more |
<GlobalNamingResources> | 整個tomcat實例都可以使用的JNDI資源 | 0 or more |
The Service Component
屬性 | 描述 | 必需? |
className | service compoent所對應的java類,默認實現org.apache.catalina.core.StandServic | 否 |
name | service的name,通常在administration,management和logging中使用 | 是 |
子元素 | 描述 | 數量 |
Connector | 作用爲處理外部的連接請求並將其發送給Engine處理。一個Connector擁有幾個線程和相應資源來處理這些請求。 | 1 or more |
Engine | 常用類型有兩種,Catalina和Standalone。Engine是用來處理Connector發過來的請求的。 | 1 |
The Connector Component
- <Connector port=”8080” protocol=”HTTP/1.1”
- maxThreads=”150” connectionTimeout=”20000”
- redirectPort=”8443” />
- <Connector port=”8009” protocol=”AJP/1.3” redirectPort=”8443” />
The Engine Component
- <Engine name=”Catalina” defaultHost=”localhost”>
- ...
- </Engine>
屬性 | 描述 | 必需? |
className | Engine所對應的java類,默認使用org.apache.catalina.core.StandardEngine | 否 |
backgroundProcessDelay |
單位爲秒,在這個屬性所定義的時間之後,此Engine將進入後臺處理。如果該值爲負,則直接進入後臺處理。後臺處理一般用於處理低優先級的任務。
|
否 |
defaultHost | 當Engine找不到請求對應的host時,就使用這個host | 是 |
jvmRoute | 這是tomcat6在負載均衡中使用的標識符, | 否 |
name | Engine的名稱 | 是 |
子元素 | 描述 | 數量 |
Host | 每個<Host>元素都表示一個由Engine支配的虛擬主機(virtual host) | 1 or more |
Context | 一組屬性-元素的配置集合。在默認的context定義的屬性可以被Engine中所有的web應用程序所使用。 | 0 or 1 |
Realm | 用於身份驗證等安全機制,Engine和Context都可以由Realm。如果不指定,則使用Engine的Realm。 | 0 or 1 |
Valve | Standard Valve用於登陸日誌,請求過濾等 | 0 or more |
Listener | 用於tomcat生命週期控制 | 0 or more |
The Realm Component
- <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
- 內存(memory):使用在內存中存放的一個表格進行驗證。這個表格時在tomcat啓動時從一個xml文件加載到內存中的,在這個表格中的信息格式一般爲:用戶名/密碼/角色。這種方式一般只用於測試和開發階段,最終產品很少使用這種方式
- UserDatabase:實現了一個可以修改的、持久的memory Realm,可以向後兼容memory Realm。
- JDBC:使用一個關係數據庫存放用戶驗證數據
- DataSource:類似於JDBC Realm,使用JNDI的方式來從關係數據庫中拿用戶驗證數據,內容最終還是在一個關係數據庫裏。
- JNDI:使用JNDI來獲取Realm數據,這些數據一般存放在LDAP目錄下。
- JAAS: 使用JAAS來獲取用戶驗證信息
The Host Component
- <Host name=”localhost” appBase=”webapps”
- unpackWARs=”true” autoDeploy=”true”
- xmlValidation=”false” xmlNamespaceAware=”false”>
屬性 | 描述 | 必需? |
className |
默認爲org.
apache.catalina.core.StandardHost
|
否 |
appBase | web應用程序文件存放的位置,相對路徑爲CATALINA_HOMEM | 是 |
autoDeploy | 設爲true,則web.xml發生變化時,tomcat自動重新部署程序。實現這個功能必需允許後臺處理 | 否 |
name | virtual host的名稱 | 是 |
backgroundProcessingDelay | 跟Engine中的backgroundProcessingDelay類似 | 否 |
deployOnStartup | 若爲true,則當這個Engine啓動時,tomcat將自動部署這個host,默認爲true | 否 |
deployXML | 這個屬性的目的是爲了提高tomcat的安全性,控制web應用程序是否能使用META-INF/contex.xml。如果設爲false,則各應用程序只能訪問 $CATALINA_HOME/conf/<engine>/<host>/<app>.xml。默認值爲True。
|
否 |
errorReportValveClass | 定義host使用的error-reporting Valve,默認值爲 org.apache.catalina.valves.ErrorReportValve
|
否 |
unpackWARs | tomcat在webapps文件夾中發現war文件時,是否自動將其解壓 | 否 |
workdir | tomcat使用這個目錄來放工作着的servlet和jsp(以servlet形式),這裏面的servlet都是是編譯好的class文件。默認爲$CATALINA_HOME/work | 否 |
子元素 | 描述 | 數量 |
Context | 爲了實現服務器配置和應用程序配置的分離,一般不會在server.xml中設置這個標籤的內容。所有應用程序的配置都可以在$CATALINA_HOME/conf/<engine>/<host>目錄下維護,名稱爲:應用程序名.xml。程序員可以通過在META-INF目錄下維護自己的context.xml,這個context.xml會被自動以“應用程序名.xml”放到$CATALINA_HOME/conf/<engine>/<host> | 0 or more |
DefaultContext | 當host不知將請求發給哪個context時,就發給它 | 0 or 1 |
Realm | 這個Host所使用的Realm | 0 or 1 |
Web Application Context Definitions
默認context.xml文件
- <Context>
- <WatchedResource>WEB-INF/web.xml</WatchedResource>
- </Context>
屬性 | 描述 | 必需? |
className | Context的java類,默認爲org.apache.catalina.core.StandardContext | 否 |
allowLinking | 在像linux這種允許符號鏈接(symbolic link)的操作系統中,這個選項爲True則運行該文件被鏈接到web應用程序樹之外。在windows中,這個選項必需爲false。默認值爲false | 否 |
antiJARLocking | 使用特殊的類加載器來儘量避免JAR文件的鎖定,默認爲false。 | 否 |
antiResourceLocking | 使用特殊方法來儘量避免文件鎖定,默認爲false。 | 否 |
backgroundProcessDelay | 同其他backgroundProcessDelay | 否 |
catcheMaxSize | 設置資源代碼(resource code)的最大值,默認爲10240,單位爲KB | 否 |
catcheTTL | 驗證cache的間隔時間,單位爲微秒,默認值爲5000 | 否 |
cachingAllowed | 決定靜態資源(配置文件,圖片等)是否可以加載進cache中,默認爲true | 否 |
caseSensitive | 決定tocmat是否進行大小寫檢查,默認爲true | 否 |
cookies | 使用cookie來進行session管理,默認爲true。如果設爲false,則需要使用url重寫的方式維護session | 否 |
crossContext |
當使用ServletContext.getContext()方法時,允許同一個virtual host下的程序跨Context訪問,默認爲false
|
否 |
docBase |
在這個Context下運行的web應用程序的文檔根目錄,通常被稱爲Context root。如果web應用程序是以war文件的方式部署的,那麼這個屬性的默認值爲webapps/<name of war file>
|
否 |
override | 指示本地的context.xml(war中的META-INF/context.xml)是否可以覆蓋全局的context.xml(CATALINA_HOME/conf/context.xml),默認值爲false | 否 |
path | 表示web應用程序的context路徑。如果你想將這個web應用程序作爲此host的默認應用程序,使用這個值:“”;默認值爲docBase,war包名,或者應用程序Context文件名 | 否 |
privileged | 默認值爲false,大部分程序這個值設爲false就可以了 | 否 |
processTlds | 設置當Context啓動時對TLD進行預處理,默認爲true | 否 |
reloadable | 默認值爲false。設置tocmat是否應該監視/WEB-INF/classes和/WEB-INF/lib中的變化,如果有發生改變,則自動重新部署 | 否 |
swallowOutput | 默認爲false。設置System.out和System.error的內容是否應該記錄到日誌文件中 | 否 |
tldNamespacheAware | 設置tld的處理和驗證是否是namespace-aware,默認爲false | 否 |
unloadDelay | tomcat等待web應用程序卸載的微秒數,默認爲2000 | 否 |
unpackWAR | 默認爲true。設置tomcat自動解壓docBase中的war文件。 | 否 |
useNaming | 默認爲true。給web應用程序創建一個JavaEE-JNDI兼容的 InitialContext。如果web應用程序使用數據庫連接,這個選項是必需的 |
否 |
workdir | 爲在這個host中運行的servlet定義一個工作目錄。這個host下的應用程序可以通過javax.servlet.context.tempdir屬性來活動這個目錄的位置。默認爲CATALINA_HOME/work | 否 |
wrapperClass | 設置一個實現了org.apache.catalina.Wrapper接口的類r來包裝servlets | 否 |
子元素 | 描述 | 數量 |
Loader | 配置用於從一個web應用程序中加載類的ClassLoader | 0 or 1 |
Manager | 配置Context的session manager,Session Manager創建,維護並保持服務器端的session。 | 0 or 1 |
Realm | 這個Context中運行的web應用程序使用的Realm | 0 or 1 |
Resources | 用於獲取resource。使用實現org.apache.naming.resources.FileDirContext接口的類來實現。 | 0 or 1 |
WatchedResource | 當特定的資源發生改變時,用於通知AutoDeployer對web應用程序進行重新部署 | 0 or 1 |
身份驗證和tomcat-users.xml
tomcat-users.xml位於$CATALINA_HOME/conf文件夾下,tomcat6使用這個文件來對使用manager工具的用戶(也就是管理員)進行身份驗證。tomcat6使用UserDatabase Realm來具體實現這個功能。Realm允許修改加載的數據,並可以通過將這些修改寫回xml的方式來使這些修改持久化。默認的部署配置文件--web.xml
- <?xml version=”1.0” encoding=”ISO-8859-1”?>
- <web-app xmlns=”http://java.sun.com/xml/ns/j2ee”
- xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
- xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd”
- version=”2.4”>
默認Server上靜態資源的配置
- <servlet>
- <servlet-name>default</servlet-name>
- <servlet-class>
- org.apache.catalina.servlets.DefaultServlet
- </servlet-class>
- <init-param>
- <param-name>debug</param-name>
- <param-value>0</param-value>
- </init-param>
- <init-param>
- <param-name>listings</param-name>
- <param-value>true</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
默認目錄列表和其他用戶自定義配置
- <param-name>listings</param-name>
- <param-value>true</param-value>
參數 | 描述 |
listing | 當有到一個目錄的請求時,是否顯示目錄結構,一般設爲true。 |
readonly | 控制是否允許PUT,POST等HTTP寫命令 |
input | 讀取資源時的緩衝區大小,一般爲2KB |
output | 寫資源時的緩衝區大小,一般也爲2KB |
globalXsltFile/localXsltFile | 定義一個顯示目錄列表時使用的xslt。 |
sendfileSize | tomcat6支持基於某個具體操作系統平臺的異步sendfile()。這個值用來設置使用sendfile()方法的閥值,默認爲48KB。 |
配置invoker servlet
- <!--
- <servlet>
- <servlet-name>invoker</servlet-name>
- <servlet-class>
- org.apache.catalina.servlets.InvokerServlet
- </servlet-class>
- <init-param>
- <param-name>debug</param-name>
- <param-value>0</param-value>
- </init-param>
- <load-on-startup>2</load-on-startup>
- </servlet>
- -->
配置JspServlet(Jasper)
JspServlet的作用是將jsp文件轉爲servlet。這個servlet一般被人們成爲Jasper,Jasper的配置如下:
- JspServlet的作用是將jsp文件轉爲servlet。這個servlet一般被人們成爲Jasper,Jasper的配置如下:
- <servlet>
- <servlet-name>jsp</servlet-name>
- <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
- <init-param>
- <param-name>fork</param-name>
- <param-value>false</param-value>
- </init-param>
- <init-param>
- <param-name>xpoweredBy</param-name>
- <param-value>false</param-value>
- </init-param>
- <load-on-startup>3</load-on-startup>
- </servlet>
參數 | 描述 |
development | 默認值爲true,說明jsp文件還處於開發階段,因此Jasper應該按modificationTestInterval參數對jsp文件進行檢查,當jsp發生更改時,則對其進行重編譯 |
fork | 默認值爲true。指示使用不同的JVM編譯JSP,這樣可以消除資源競爭和在開發階段的類加載器衝突 |
checkInterval | 單位爲秒,規定Jasper按這個時間間隔檢查jsp是否需要重編譯,默認爲0,指示使用後臺程序處理 |
modificationTestInterval | 主要在development爲true時發揮作用,默認值爲4。Jasper將按這個頻率檢查jsp文件是否可以驗證是否修改過。 |
compiler | 讀取資源時使用的緩存大小,默認爲2KB |
classdebuginfo | 寫資源時使用的緩存大小,默認爲2KB |
keepgenerated | 默認值爲true。指示Jasper在兩次調用servlet之間在工作目錄中保留那個servlet,這樣可以大大提高tomcat的效率 |
mappedfilegenStrAsCharArray dumpSmaptrimSpaces supressSmap |
這些是jsp開發者使用的優化和調試選項。 |
scratchDir | Jasper在編譯jsp時使用的臨時文件夾,默認爲$CATALINA_HOME/work下的一個臨時文件夾 |
xpoweredBy | 默認爲false。功能爲生成X-Power-By頭(header) |
compilerTargetVM | 編譯生成的servlet的目標VM |
compilerSourceVM | 生成servlet的源VM |
SSL和CGI Servlet的配置
- <!--
- <servlet>
- <servlet-name>ssi</servlet-name>
- <servlet-class>org.apache.catalina.ssi.SSIServletServlet</servlet-class>
- <init-param>
- <param-name>buffered</param-name>
- <param-value>1</param-value>
- </init-param>
- <init-param>
- <param-name>debug</param-name>
- <param-value>0</param-value>
- </init-param>
- <init-param>
- <param-name>expires</param-name>
- <param-value>666</param-value>
- </init-param>
- <init-param>
- <param-name>isVirtualWebappRelative</param-name>
- <param-value>0</param-value>
- </init-param>
- <load-on-startup>4</load-on-startup>
- </servlet>
- -->
- <!--
- <servlet>
- <servlet-name>cgi</servlet-name>
- <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
- <init-param>
- <param-name>clientInputTimeout</param-name>
- <param-value>100</param-value>
- </init-param>
- <init-param>
- <param-name>debug</param-name>
- <param-value>6</param-value>
- </init-param>
- <init-param>
- <param-name>cgiPathPrefix</param-name>
- <param-value>WEB-INF/cgi</param-value>
- </init-param>
- <load-on-startup>5</load-on-startup>
- </servlet>
- -->
Servlet Mappings
- <servlet-mapping>
- <servlet-name>default</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>jsp</servlet-name>
- <url-pattern>*.jsp</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>jsp</servlet-name>
- <url-pattern>*.jspx</url-pattern>
- </servlet-mapping>
server.xml,context.xml和web.xml是如何一起協同工作的
SSI和CGI mappings
- <!--
- <servlet-mapping>
- <servlet-name>ssi</servlet-name>
- <url-pattern>*.shtml</url-pattern>
- </servlet-mapping>
- -->
- <!-- The mapping for the CGI Gateway servlet -->
- <!--
- <servlet-mapping>
- <servlet-name>cgi</servlet-name>
- <url-pattern>/cgi-bin/*</url-pattern>
- </servlet-mapping>
- -->
Session的超時配置
- <session-config>
- <session-timeout>30</session-timeout>
- </session-config>
- <mime-mapping>
- <extension>abs</extension>
- <mime-type>audio/x-mpeg</mime-type>
- </mime-mapping>
- <mime-mapping>
- <extension>ai</extension>
- <mime-type>application/postscript</mime-type>
- </mime-mapping>
- <mime-mapping>
- <extension>aif</extension>
- <mime-type>audio/x-aiff</mime-type>
- </mime-mapping>
- <mime-mapping>
- <extension>aifc</extension>
- <mime-type>audio/x-aiff</mime-type>
- </mime-mapping>
- ... more mime mappings...
- <mime-mapping>
- <extension>Z</extension>
- <mime-type>application/x-compress</mime-type>
- </mime-mapping>
- <mime-mapping>
- <extension>z</extension>
- <mime-type>application/x-compress</mime-type>
- </mime-mapping>
- <mime-mapping>
- <extension>zip</extension>
- <mime-type>application/zip</mime-type>
- </mime-mapping>
模擬Apache Web Server:首頁定義
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- <welcome-file>index.htm</welcome-file>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
catalina.policy:訪問控制文件
- grant <security principal> { permission list... };
- 下面是catalina.policy中的一個片段:
- // These permissions apply to javac
- grant codeBase “file:${java.home}/lib/-” {
- permission java.security.AllPermission;
- };
- // These permissions apply to all shared system extensions
- grant codeBase “file:${java.home}/jre/lib/ext/-” {
- permission java.security.AllPermission;
- };
- // These permissions apply to javac when ${java.home] points at $JAVA_HOME/jre
- grant codeBase “file:${java.home}/../lib/-” {
- permission java.security.AllPermission;
- };
- // These permissions apply to all shared system extensions when
- // ${java.home} points at $JAVA_HOME/jre
- grant codeBase “file:${java.home}/lib/ext/-” {
- permission java.security.AllPermission;
- };
- // These permissions apply to the daemon code
- grant codeBase “file:${catalina.home}/bin/commons-daemon.jar” {
- permission java.security.AllPermission;
- };
- // These permissions apply to the logging API
- grant codeBase “file:${catalina.home}/bin/tomcat-juli.jar” {
- permission java.security.AllPermission;
- };
- // These permissions apply to the server startup code
- grant codeBase “file:${catalina.home}/bin/bootstrap.jar” {
- permission java.security.AllPermission;
- };
- // These permissions apply to the servlet API classes
- // and those that are shared across all class loaders
- // located in the “lib” directory
- grant codeBase “file:${catalina.home}/lib/-” {
- permission java.security.AllPermission;
- };
- grant {
- // Required for JNDI lookup of named JDBC DataSource’s and
- // javamail named MimePart DataSource used to send mail
- permission java.util.PropertyPermission “java.home”, “read”;
- permission java.util.PropertyPermission “java.naming.*”, “read”;
- permission java.util.PropertyPermission “javax.sql.*”, “read”;
- / OS Specific properties to allow read access
- permission java.util.PropertyPermission “os.name”, “read”;
- permission java.util.PropertyPermission “os.version”, “read”;
- permission java.util.PropertyPermission “os.arch”, “read”;
- permission java.util.PropertyPermission “file.separator”, “read”;
- permission java.util.PropertyPermission “path.separator”, “read”;
- permission java.util.PropertyPermission “line.separator”, “read”;
- // JVM properties to allow read access
- permission java.util.PropertyPermission “java.version”, “read”;
- permission java.util.PropertyPermission “java.vendor”, “read”;
- permission java.util.PropertyPermission “java.vendor.url”, “read”;
- permission java.util.PropertyPermission “java.class.version”, “read”;
- permission java.util.PropertyPermission “java.specification.version”,
- “read”;
- permission java.util.PropertyPermission “java.specification.vendor”,
- “read”;
- permission java.util.PropertyPermission “java.specification.name”, “read”;
- permission java.util.PropertyPermission “java.vm.specification.version”,
- “read”;
- permission java.util.PropertyPermission “java.vm.specification.vendor”,
- “read”;
- permission java.util.PropertyPermission “java.vm.specification.name”,
- “read”;
- permission java.util.PropertyPermission “java.vm.version”, “read”;
- permission java.util.PropertyPermission “java.vm.vendor”, “read”;
- permission java.util.PropertyPermission “java.vm.name”, “read”;
- // Required for OpenJMX
- permission java.lang.RuntimePermission “getAttribute”;
- // Allow read of JAXP compliant XML parser debug
- permission java.util.PropertyPermission “jaxp.debug”, “read”;
- // Precompiled JSPs need access to this package.
- permission java.lang.RuntimePermission
- “accessClassInPackage.org.apache.jasper.runtime”;
- permission java.lang.RuntimePermission
- “accessClassInPackage.org.apache.jasper.runtime.*”;};
catalina.properties:更好的訪問控制
- package.access=sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,
- org.apache.jasper.,sun.beans.
- package.definition=sun.,java.,org.apache.catalina.,org.apache.coyote.,
- org.apache.tomcat.,org.apache.jasper.
- common.loader=${catalina.home}/lib,${catalina.home}/lib/*.jar
- server.loader=
- shared.loader=