Server.xml:
默认配置中: <Server port="8005" shutdown="SHUTDOWN">告诉tomcat启动server的实例对象时监听8005端口的关闭服务器命令,关闭服务器的命令要包含文本"SHUTDOWN"。server节点的属性包括className(not necessary,default is org.apache.catalina.core.StandardServer),port(监听关闭服务器命令的端口,tomcat会检查连接来自本地机器),shutdown(指定关闭服务器命令文本)。Server节点的子节点可以包括:Service(由多个connector和一个engine构成),Linstner(非必须),GlobalNamingResources(非必须)。
Service节点:Service的主要作用是把处理请求的engine和它配置的处理协议和并发的connectors组合在一起。Service节点的属性包括className(指定Service组件的java类,默认情况下是org.apache.catalina.core.StandardService),name(该service组件的名字,用于输出log等,当一个server中包含多个service组件时,必须要给service命名)。Service节点可以包含的子节点:Connector(至少一个),Engine(一个)。
Connector节点:在了解Connector节点之前,先要知道tomcat有两种运行的模式,一种是tomcat以独立服务器的形式接收处理包含静态和动态的所有请求,另外一种是tomcat以应用服务器的形式接收请求,在前端安装apache,iis等web 服务器接收静态内容和cgi请求等。以第一种模式启动的tomcat使用tomcat 6内置的http连接器,这个http连接器因为安全和性能等原因不能在生产环境中使用,但是在开发场景下,由于能够很好得支持静态和动态的请求,可以使用。为了提高效率,web server和tomcat之间的通信协议不是HTTTP,而是AJP协议。
在默认的server.xml文件中提供的两个connector,一个是HTTP1.1和AJP1.3,对应的配置分别为 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />和<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />。HTTP1.1的Connector接收通过HTTP1.1协议来自浏览器或者web服务的请求并交给Engine处理。AJP的Connector是tomcat为了接收来自web服务器(apache等)的请求,这种情况下,web服务器处理静态内容的请求,而tomcat则处理jsp和servlet等动态内容的请求。所以,tomcat提供了支持包括HTTP1.0,HTTP1.1,HTTPS/SSL等协议的HTTP连接器和一个AJP连接器。
Engine节点:Engine代表了一个处理servlet请求处理器的实例。Engine节点可以包含的子节点包括:className(engine实例的类名,不必填,默认是org.apache.catalina.core.StandardEngine),backgroundProcessDelay(单位为秒,在这个属性所定义的时间之后,此Engine将进入后台处理。如果该值为负,则直接进入后台处理。后台处理一般用于处理低优先级的任务,不必填,默认为10S),defaultHost(Engine把请求路由给指定的Host,如果找不到Host,则把请求路由给这个defaultHost,必填),jvmRoute(不必须,在tomcat负载均衡时使用),name(Engine的名字,用于输出日志和后台应用管理,必填)。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 |
在server.xml文件中,Engine节点之后的配置为<Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/>,这个配置声明了一个UserDatabase的realm,它会加载tomcat-user.xml中的内容来做tomcat默认应用的权限控制。
接着是host节点,它定义了tomcat服务器中的一个虚拟主机,一个host指明了一个请求的目的地,一个Engine中可以包含多个Host虚拟主机。默认的server.xml文件中的配置为:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"xmlValidation="false" xmlNamespaceAware="false">,再设置另外一个Host
<Host name="localhost2" appBase="test"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
只要把应用的war包放在$catalina_home/test目录下,使用localhost:8080/appname/**来访问就可以。
appBase属性指定了该host下的应用放在$catalina_home/webapps目录下。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/<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 |
Context描述文件:
在tomcat6中,web应用程序的具体配置是在$CATALINA_HOME/conf/<engine name>/<host name>目录下的“应用程序名.xml”中定义的。在war包(或文件夹)的META-INF中的配置文件叫做嵌入式配置文件(embedded),默认tomcat在部署时使用这些配置文件,管理员可以通过修改deployXML属性来禁止解析这种嵌入式配置文件。
在$CATALINA_HOME/conf目录下的context.xml是tomcat默认的context.xml文件,tomcat下所有的应用程序都使用这个文件的配置。因为它是公共的,因此里面的内容必须是所有web应用程序通用的,默认的context.xml内容只有一行:
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</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 cache)的最大值,默认为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兼容的 |
否 |
workdir |
为在这个host中运行的servlet定义一个工作目录。这个host下的应用程序可以通过javax.servlet.context.tempdir属性来活动这个目录的位置。默认为CATALINA_HOME/work |
否 |
wrapperClass |
设置一个实现了org.apache.catalina.Wrapper接口的类r来包装servlets |
否 |
Context可以包含的子元素为:
子元素 |
描述 |
数量 |
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-user.xml:用于给tomcat的管理工具做权限验证。在tomcat中,用户只有被赋了manager权限才能访问manager应用程序。
Web.xml:在servlet2.5规范中,所有的应用程序在WEB-INF目录下都必须有一个web.xml文件用与应用程序的部署描述。在CATALINA_HOME/CONF下的web.xml文件为所有应用配置共有的默认属性。
以下的配置指定了名为default的servlet在tomcat以独立服务器的模式启动时处理静态文件,并且提供目录展示:
<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>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Listings设置为false表示不支持目录结构的显示,设置为true时,可以想apache一样访问应用的文件和目录结构(应用的WEB-INF目录除外)。
配置一个invoker servlet可以用于直接访问servlet,也就是说可以访问web.xml文件中没有配置mapping的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配置,jspServlet用于解析jsp至servlet。
<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>
Jspservlet还可以配置的参数包括:
参数 |
描述 |
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 |
这些是jsp开发者使用的优化和调试选项。 |
scratchDir |
Jasper在编译jsp时使用的临时文件夹,默认为$CATALINA_HOME/work下的一个临时文件夹 |
xpoweredBy |
默认为false。功能为生成X-Power-By头(header) |
compilerTargetVM |
编译生成的servlet的目标VM |
compilerSourceVM |
生成servlet的源VM |
以下的url mapping配置指定了相应的url将触发的先前配置过的不同servlet:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</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>
先前配置的Invoker servlet,需要在本处指定url-pattern才可以访问到,因为默认情况下,invoker servlet相关的配置由于安全原因是被注释掉的。
接下来的是session超时的配置:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
它指定了服务器端维持session的时间,在session没有被持久化的情况下,网站管理员需要在session消失导致服务器超载的可能和存储过多的session之间做平衡。