tomcat配置文件server.xml中,Host标签中可以配置Context标签。我们在实际项目使用中,配置不对,会遇到服务重复部署的问题。原因是tomcat默认解压webapps的war包并部署。如果我们通过配置Context,指定的war包也在webapps目录下,那就有可能会存在重复拉起服务的问题。而对Context的配置,主要涉及到appBase和docBase这两个参数的使用。
现说明一下参数的使用。
为了解决重复拉起问题,我们只需要把拉起的服务的war包,不放到默认的webapps目录下,然后通过使用docBase参数指定地址就可以,如下所示:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="/" docBase="../wars/demo.war" reloadable="true" crossContext="true" />
</Host>
appBase是默认情况下,是相对于tomcat根目录的。这个参数也会决定解压war到的目录。这里appBase等于webapps,war包会被解压到webapps的目录下,解压具体路径,再根据Context标签里面的path路径决定,有两个情况,一种情况是path有值并且不是/,比如说下面这种情况
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="/add" docBase="../wars/demo.war" reloadable="true" crossContext="true" />
</Host>
这种情况,war包会被解压到目录webapps/add。
另外一种情况是/,这种情况下会被解压到webapps/ROOT目录。
如果appBase="",则解压到tomcat根目录下的path指定的路径下,path等于/的情况,就解压到tomcat根目录下的ROOT目录下。