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之间做平衡。