摘要
应用Tomcat对于我们来讲实在是司空见惯了但是对于每个使用者来讲应该了解其运转的机制也是必不可少的本人在维护apache开源项目论坛时遇到此问题并略作研究望与大家共讨分享
一配置自动部署时的web应用加载顺序
当tomcat的serverxml中对虚拟主机(Host)配置中autoDeploy=true和unpackWARs=true时如
serverxml
<Host name=localhost debug= appBase=webapps
unpackWARs=true autoDeploy=true
xmlValidation=false xmlNamespaceAware=false>
下面的部署顺序在Tomcat启动时发生
任何具有上下文描述符(Context Descriptors)的web应用首先被部署tomcat在$CATALINA_HOME/conf/[enginename]/[hostname]/目录中罗列出所有的以xml为结尾的文件将其作为web应用的上下文描述符并按照文件名排序逐一部署
注意作为上下文描述符的文件名可以不为web应用名因为tomcat会读取其中的内容来判断但是改变上下文描述符的文件名会使部署的顺序发生变化
如
$CATALINA_HOME\conf\Catalina\localhost\devofferxml
<?xml version= encoding=utf?><Context docBase=E:/eclipseRC/workspace/devOfferProject/web path=/devoffer useNaming=false workDir=work\Catalina\localhost\devoffer></Context>
上面的上下文描述符说明了devoff这个web应用的docBase和部署的path以及其工作目录
另外位于$CATALINA_HOME/webapps/[webappname]/METAINF/目录中的contextxml也作为上下文描述符使用在处理了上文所说的位于$CATALINA_HOME/conf/[enginename]/[hostname]/目录中的上下文描述符后tomcat将部署这些在web应用的METAINF目录中的contextxml加载顺序按照应用名的字母顺序
没有上下文描述符的已经被展开的web应用将按照其应用名顺序逐个被部署如果其中的一个web应用关联着一个在appBase(一般为$CATALINA_HOME/webapps目录)中的WAR文件则当WAR文件比相对应的被展开的web应用新时那个被展开的web应用将被删除tomcat将WAR文件展开并部署作为替换旧的web应用
在执行了步后tomcat将部署在appBase中的WAR文件
请注意在每个应用被部署后tomcat为没有上下文描述符的web应用建立上下文描述符
二非自动部署配置下的应用加载顺序
此时完全按照在tomcat manager中人工部署顺序
三参考资源
doc/l