转自:http://blog.csdn.net/jubincn/article/details/4856293
Tomcat 基本配置
tomcat读取配置文件
首先简单说一下tomcat是如何读取配置文件的。tomcat在启动时,首先找系统变量CATALINA_BASE,如果没有,则找CATALINA_HOME。然后找这个变量所指的目录下的conf文件夹,从中读取配置文件。
最重要的配置文件: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”>
顶层元素为,这个元素对应着Tomcat结构中的server部分。这一行的意思是让Tomcat在8005端口 监听关闭消息,如果使用telnet连接8005端口并输入SHUTDOWN,则tomcat就会关闭。为了安全,tomcat不会接受远程通过这个端口 发的消息。
属性 | 描述 | 是否必须? |
className | 表示server的类,需要实现org.apache.catalina.Server接口。tocmat6默认值使用rg.apache.catalina.core.StandardServer | 否 |
port | 用来监听shutdown属性所对应的那个命令,实现关闭tomcat操作的TCP端口。tocmat会检查连接是否来自同一台机器,只有同一台机器(物理地址)发来的消息才被接受。 | 是 |
shutdown | tomcat会监听port所规定的端口,来接受这个属性所规定的命令 | 是 |
属性 | 描述 | 数量 |
包括一组和一个 |
1 or more | |
用来监听Server生命周期(start, stop, before start, after start, before stop, after stop)信息 | 0 or more | |
整个tomcat实例都可以使用的JNDI资源 | 0 or more |
The Service Component
Service component包括一组Connector和一个Engine,这些Connector监听不同端口不同协议的请求,并且这些Connector是并 发执行的,Engine则被用来处理这些请求。在默认的server.xml中,service标签的内容如下:
属性 | 描述 | 必需? |
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
tomcat6提供了两种Connector,分别为HTTP/1.1和AJP/1.3。这两种Connector在默认的server.xml中的配置为:
- <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在server.xml中的代码如下:
- <Engine name=”Catalina” defaultHost=”localhost”>
- ...
- Engine>
一个Engine就是一个容器,servlet容器。一个Engine可以处理多个虚拟Host(apache中的概念)的请求。当Engine不知该将请求交给那个host时,Engine则将请求转给defaultHost来处理。
属性 | 描述 | 必需? |
className | Engine所对应的java类,默认使用org.apache.catalina.core.StandardEngine | 否 |
backgroundProcessDelay |
单位为秒,在这个属性所定义的时间之后,此Engine将进入后台处理。如果该值为负,则直接进入后台处理。后台处理一般用于处理低优先级的任务。
|
否 |
defaultHost | 当Engine找不到请求对应的host时,就使用这个host | 是 |
jvmRoute | 这是tomcat6在负载均衡中使用的标识符, | 否 |
name | Engine的名称 | 是 |
子元素 | 描述 | 数量 |
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
在默认的server.xml中,Engine中的第一个子标签就是了,其代码如下:
- <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
这段代码是对一个UserDatabase Realm的配置,它让默认的web应用程序(manager)加载tomcat-user.xml来进行用户验证。
Realm可以从很多其他数据源获取验证数据,而这也正是不同的Realm的不同之处。一般地,Realm可以从这些数据源获取用户验证数据:
- 内存(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”>
这段代码的意思是:定义一个名为localhost的虚拟主机,应用程序存放在CATALINA_HOME/webapps目录中。 unpackWARs=“true”让tomcat在webapps文件夹中发现war文件时,自动将其解压。解压的好处是可以使程序运行更快,不解压也 可以使用。
下图为virtual host的示意图
属性 | 描述 | 必需? |
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/ |
否 |
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/ |
0 or more |
DefaultContext | 当host不知将请求发给哪个context时,就发给它 | 0 or 1 |
Realm | 这个Host所使用的Realm | 0 or 1 |
Web Application Context Definitions
在tomcat6中,web应用程序的具体配置是在$CATALINA_HOME/conf//目录下的“应用程序名.xml”中定义的,在eclipse或netbeans中,用户可以在META-INF/context.xml 中做配置,这些IDE会自动在$CATALINA_HOME/conf//下创建“应用程序名.xml”文件。
在war包(或文件夹)的META-INF中的配置文件叫做嵌入式配置文件(embedded),默认tomcat在部署时使用这些配置文件,管理员可以通过修改deployXML属性来禁止解析这种嵌入式配置文件。
默认context.xml文件
在$CATALINA_HOME/conf目录下的context.xml是tomcat默认的context.xml文件,tomcat下所 有的应用程序都使用这个文件的配置。因为它是公共的,因此里面的内容必须是所有web应用程序通用的,默认的context.xml内容只有一行:
- <Context>
- <WatchedResource>WEB-INF/web.xmlWatchedResource>
- Context>
在这里的web.xml被Context的一个后台程序监视,一旦发生改变,将重新部署这个Context。
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/ |
否 |
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
根据servlet2.5的标准,任何一个servlet都必须在web.xml中注册,这个文件必须以web.xml放到web应用程序的WEB-INF目录下。这样可以这个web.xml就只对这个web应用程序有作用。
在$CATALINA_HOME/conf下也有一个web.xml,这个web.xml是这个tomcat实例下所有web应用程序都可以使 用的。不过可以在context中修改orverride属性,来决定各web应用程序的web.xml是否可以覆盖全局的web.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.xml不同,web.xml可以用schema进行验证。
默认Server上静态资源的配置
在下面的标签中,定义了一个默认的servlet。这个默认的servlet是用来处理所有web应用程序的静 态资源请求的,也可以提供目录展示(directory listing)服务。也就是说,这个servlet相当于一个像apache这样的http web server。
在默认的web.xml中对默认servlet的配置:
- <servlet>
- <servlet-name>defaultservlet-name>
- <servlet-class>
- org.apache.catalina.servlets.DefaultServlet
- servlet-class>
- <init-param>
- <param-name>debugparam-name>
- <param-value>0param-value>
- init-param>
- <init-param>
- <param-name>listingsparam-name>
- <param-value>trueparam-value>
- init-param>
- <load-on-startup>1load-on-startup>
- servlet>
默认目录列表和其他用户自定义配置
如果你不想提供用户列表功能,可以将下面代码段中的true改为false
- <param-name>listingsparam-name>
- <param-value>trueparam-value>
默认servlet(default servlet)还有这些属性:
参数 | 描述 |
listing | 当有到一个目录的请求时,是否显示目录结构,一般设为true。 |
readonly | 控制是否允许PUT,POST等HTTP写命令 |
input | 读取资源时的缓冲区大小,一般为2KB |
output | 写资源时的缓冲区大小,一般也为2KB |
globalXsltFile/localXsltFile | 定义一个显示目录列表时使用的xslt。 |
sendfileSize | tomcat6支持基于某个具体操作系统平台的异步sendfile()。这个值用来设置使用sendfile()方法的阀值,默认为48KB。 |
配置invoker servlet
invoker servlet是可以通过下面这种方式直接访问的servlet(没有参数)
http:////servlet/
因为这种方式可以直接访问servlet,因此存在一定的安全隐患,所以这种方式应该仅在开发和测试阶段使用,也正因为这个原因,在tomcat6的默认web.xml中invoker servlet这段配置被注释了起来: