文章目录
部署WAR包
场景需求
假设我们刚安装了tomcat,并且未对其做过修改。
此时,配置文件CATALINA_BASE\conf\server.xml
中的Host
元素内容如下:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
其中,没有Context
子元素。
我们已经有WEB项目Hello-User
的WAR包hello-user-1.0.0.SNAPSHOT.war
。现在,要将它部署到tomcat,并且可以使用localhost:8080/user
来访问它。应该怎么办?
下面我们就一步一步,分析各种部署方案,并指出其痛点所在。
1. 直接把war包放到appBase目录
把war包直接放到webapps
目录,启动tomcat,浏览器输入localhost:8080/hello-user-1.0.0.SNAPSHOT
,即可访问。
下面具体介绍配置中Host
元素及其常见属性的含义。官方文档
Host 元素
Host
表示虚拟主机。
name
name
属性值,对应请求URL中的主机名部分。
可以使用通配符*
,比如*.apache.org
。
appBase
appBase
是部署应用的基本目录。
可选,如果删掉它,会使用默认值webapps
。
xmlBase
Context
XML 片段文件的基本目录。
可选,如果删掉它,会使用默认值conf\[EngineName]\[HostName]
unpackWARs
unpackWARs="true"
,表示部署WAR时,会自动解压包,并且解压到appBase
目录中。
可选,如果删掉它,会使用默认值true
。
autoDeploy
autoDeploy="true"
,表示自动部署。
在tomcat运行时,会定期自动检查appBase
目录,以及xmlBase
目录中的Context
配置片段,并自动卸载删除的项目,自动加载新加入的项目,或自动重新部署更新过的项目。
注意,只在tomcat运行过程中,项目有变动时,才自动部署。在启动tomcat时,该属性不起作用。
可选,如果删掉它,会使用默认值true
。
deployOnStartup
deployOnStartup="true"
,表示启动时自动部署。
在tomcat启动时,会自动检查appBase
目录,以及xmlBase
目录中的Context
配置片段,并加载其中未部署的项目。
注意,有时,项目会在
deployOnStartup="true"
起作用前,被部署。后面会介绍到。
可选,如果删掉它,会使用默认值true
。
综上所述,配置
<Host name="localhost" appBase="webapps"
unpackWARs="true"
autoDeploy="true" deployOnStartup="true">