1,tomcat应用部署时,可以通过在server.xml里配置,也可以在$CATALINA_HOME\conf\Catalina\localhost中添加一个xml文件,用来自定义应用部署。
这种部署可以指定应用访问路径。
经过测试,发现有以下几种情况
1,server.xml里如下配置
<Context path=”/abc” reloadable=”false” docBase=”/tomcat/apache-tomcat-8.0.50/webapps/ocdc.war” workDir=”/tomcat/apps/work”>
</Context>
path表示访问的url路径,docBase指定war包的路径。启动后,发现path生效,http://127.0.0.1:8080/abc已经是程序页面。
webapps下增加了一个ocdc目录,一个abc目录,这说明ocdc.war部署了两次。
2,server.xml里如下配置
<Context path=”” reloadable=”false” docBase=”/tomcat/apache-tomcat-8.0.50/webapps/ocdc.war” workDir=”/tomcat/apps/work”>
</Context>
path为空,docBase指定war包的路径。
启动后,发现path没有生效,访问http://127.0.0.1:8080/显示的是tomcat的欢迎页面。
3,server.xml里如下配置
<Context path=”” reloadable=”false” docBase=”/tomcat/apache-tomcat-8.0.50/webapps/ocdc” workDir=”/tomcat/apps/work”>
</Context>
把webapps下的war包删除,ocdc目录保留,发现没有war包,ocdc路径也自动删除了。
测试时发现Tomcat会定时扫描webapps目录,如果没有对应的war包就会删除项目目录。如果想要不把war包放到目录下,则可以在tomcat停止时把ocdc.war包移出webapps目录,这样ocdc目录不会被删除。如果有war包,则会自动部署项目。
在webapps/ocdc目录不存在的情况下,context配置了这个目录,则tomcat都无法启动,而不只是应用不能启动。
4,server.xml里如下配置
<Context path=”” reloadable=”false” docBase=”/tomcat/apache-tomcat-8.0.50/webapps/ocdc” workDir=”/tomcat/apps/work”>
</Context>
webapps/ocdc目录存在,启动tomcat后,path生效,访问http://127.0.0.1:8080/显示的是应用页面。
5,尝试删除ROOT和ocdc目录,
<Context path=”” reloadable=”false” docBase=”/tomcat/apache-tomcat-8.0.50/webapps/ocdc.war” workDir=”/tomcat/apps/work”>
启动tomcat后,
http://197.1.25.30:8080/访问的是应用的页面。
但是查看webapps目录,发现ROOT文件夹和ocdc文件夹里面的内容一样
怀疑是删除了ROOT,又把应用的上下文根设置为/,这样会造成应用在ROOT目录下部署一遍。
结论:
应用部署,注册上下文根优先级:
Server.xml设置了context,且项目已经解压>ROOT应用>Server.xml设置了context,项目还是war包,还没有部署
如果想要让应用抢到ROOT的上下文根,则需要在server.xml里docBase指定的为已经解压的目录
,且设置path为空。