Tomcat配置与优化( 三 )


其中,appBase属性指定Web应用所在的目录,默认值是webapps,这是一个相对路径,代表Tomcat根目录下的webapps文件夹 。
xmlBase属性指定Web应用的XML配置文件所在的目录,默认值为conf/Catalina/<engine_name><engine_name>,例如上面例子中,主机localhost的xmlBase的默认值是$TOMCAT_HOME/conf/Catalina/localhost 。

(3)检查WEB应用更新
一个Web应用可能包含以下文件:xml配置文件,WAR包,以及一个应用目录;其中XML配置文件位于xmlBase指定的目录,WAR包和应用目录位于appBase指定的目录 。
Tomcat按照如下的顺序进行扫描,来检查应用更新:
  1. 扫描虚拟主机指定的xmlBase下的xml配置;
  2. 扫描虚拟主机指定的appBase下的WAR文件;
  3. 扫描虚拟主机指定的appBase下的应用目录;
(4)<Context>元素的配置
Context元素最重要的属性是docBase和path,此外reloadable属性也比较常用 。
docBase指定了该Web应用使用WAR包路径,或应用目录 。需要注意的是:在自动部署场景下(配置文件位于xmlBase中),docBase不在appBase目录中,才需要指定;如果docBase指定的WAR包或应用目录就在appBase中,则不需要指定 。因为Tomcat会自动扫描appBase中的WAR包和应用目录,制定了反而造成问题 。
path指定了访问该Web应用上下文路径,当请求到来时,Tomcat根据Web应用的path属性与URL匹配程度来选择Web应用处理相应请求 。例如:Web应用app1的path属性是"/app1",Web应用app2的path属性是"/app2",那么请求/app1/index.html会交由app1来处理;而请求/app2/index.html会交由app2来处理 。如果一个Context元素的path属性为"",那么这个Context是虚拟主机的默认的Web应用;当请求的uri与所有的path都不匹配时,使用该默认Web应用来处理 。
但是,需要注意的是,在自动部署场景(配置文件位于xmlBase中),不能指定path属性,path属性由配置的文件的文件名,WAR文件的文件名或应用目录的名称自动推导出来 。如扫描Web应该时,发现xmlBase目录下的app1.xml,或appBase目录下的app1.WAR或app1应用目录,则该Web用于的path属性是"app1" 。如果名称不是app1而是ROOT,则该Web应用时虚拟主机默认的Web应用,此时path属性推导为"" 。
reloadable属性指示tomcat是否在运行时监控在WEB-INF/classes和WEB-INF/lib目录下class文件的改动 。如果值为true,那么当class文件改动时,会重新web应用的重新加载 。在开发环境下,reloadable设置为ture便于调试;但是在生产环境中设置为true会给服务器带来性能压力,因此reloadable参数的默认值为false 。
<Context docBase="D:Program Filesapp1.war" reloadable="true"></Context>在该例子中,docBase位于Host的appBase目录之外;path属性没有指定,而是根据app1.xml自动推导为"app1" 。
(5)自动部署举例
最典型的自动部署,就是当我们安装完Tomcat后,$TOMCAT_HOME/webapps目录有如下目录:
Tomcat配置与优化

文章插图
 
当我们启动tomcat后,可以使用http://localhost:8080/来访问Tomcat,其实访问的就是ROOT对应的Web应用;我们也可以通过http://localhost:8080/docs来访问docs应用 。
(6)server.xml中静态部署Web应用
除了自动部署,我们也可以在server.xml通过<Context>元素部署Web应用 。静态部署与自动部署是可以共存的 。但是静态部署中server.xml是不可动态重加载的资源,服务器一旦启动,要修改这个文件,就得重启服务器才能重新加载 。
server.xml中使用Context元素配置web应用,Context元素位于Host元素中 。
<Server port="8005" shutdown="SHUTDOWN"><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost"><Host name="localhost" appBase="webapp" unpackWARs="true" autoDeploy="true"><Context path="" docBase="/app/tomcat/webapps/xxx" reloadable="true" workDir="/app/tomcat/work" ></Context></Host></Engine></Service></Server>