Tomcat Web应用程序部署
目录
简介
部署是将Web应用程序(无论是第三方WAR包还是您自己的自定义Web应用程序)安装到Tomcat服务器中的过程。
Web应用程序部署可以通过Tomcat服务器中的多种方式完成。
- 静态方式;Web应用程序在Tomcat启动前设置好
- 动态方式;通过直接操作已部署的Web应用程序(依赖于自动部署功能)或通过使用Tomcat Manager Web应用程序进行远程操作
Tomcat Manager是一个Web应用程序,可以交互式(通过HTML GUI)或程序化(通过基于URL的API)地用于部署和管理Web应用程序。
有多种部署方式依赖于Manager Web应用程序。Apache Tomcat 为 Apache Ant 构建工具提供了任务。Apache Tomcat Maven Plugin 项目提供了与 Apache Maven 的集成。还有一种名为客户端部署器(Client Deployer)的工具,可以从命令行使用,并提供额外的功能,例如编译和验证Web应用程序以及将Web应用程序打包成Web应用程序资源(WAR)文件。
安装
Tomcat开箱即用地提供了Web应用程序的静态部署,因此不需要任何安装。Tomcat Manager的部署功能也不需要任何安装,但需要进行一些配置,具体细节请参见Tomcat Manager手册。但是,如果您希望使用Tomcat客户端部署器(TCD),则需要进行安装。
TCD未随Tomcat核心分发包一起打包,因此必须从下载区域单独下载。下载包通常标记为apache-tomcat-11.0.x-deployer。
TCD的先决条件是Apache Ant 1.6.2+和Java安装。您的环境应定义一个指向Ant安装根目录的ANT_HOME环境变量,以及一个指向Java安装的JAVA_HOME变量。此外,您应确保Ant的ant命令和Java的javac编译器命令可以从操作系统提供的命令shell中运行。
- 下载TCD分发包
- TCD包无需解压到任何现有的Tomcat安装中,它可以解压到任何位置。
- 阅读使用Tomcat客户端部署器
关于上下文(Context)
在谈论Web应用程序部署时,需要理解Context的概念。Context是Tomcat对Web应用程序的称呼。
为了在Tomcat中配置一个Context,需要一个Context描述符。Context描述符只是一个XML文件,其中包含与Context相关的Tomcat配置,例如命名资源或会话管理器配置。在早期版本的Tomcat中,Context描述符配置的内容通常存储在Tomcat的主配置文件server.xml中,但现在不鼓励这样做(尽管目前仍然有效)。
Context描述符不仅帮助Tomcat了解如何配置Context,Tomcat Manager和TCD等其他工具也经常使用这些Context描述符来正确执行其职责。
Context描述符的位置是:
- $CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml
- $CATALINA_BASE/webapps/[webappname]/META-INF/context.xml
(1)中的文件名为[webappname].xml,而(2)中的文件名为context.xml。如果未为某个Context提供Context描述符,Tomcat将使用默认值配置该Context。
Tomcat 启动时部署
如果您不打算使用Tomcat Manager或TCD,那么您需要将Web应用程序静态部署到Tomcat,然后启动Tomcat。这种部署类型的Web应用程序部署位置称为appBase
,它是按主机指定的。您可以将所谓的exploded Web应用程序(即未压缩的)复制到此位置,也可以复制一个压缩的Web应用程序资源.WAR文件。
只有当主机的deployOnStartup
属性为"true"时,存在于主机(默认主机为"localhost")appBase
属性(默认appBase为"$CATALINA_BASE/webapps")指定位置的Web应用程序才会在Tomcat启动时被部署。
在这种情况下,Tomcat启动时将发生以下部署序列:
- 任何Context描述符将首先被部署。
- 然后,未被任何Context描述符引用的展开式Web应用程序将被部署。如果它们在appBase中有一个关联的.WAR文件且该文件比展开式Web应用程序更新,则展开的目录将被删除,并且Web应用程序将从.WAR重新部署。
- .WAR 文件将被部署。
在运行中的Tomcat服务器上部署
可以将Web应用程序部署到正在运行的Tomcat服务器。
如果主机的autoDeploy
属性为"true",则主机将根据需要动态部署和更新Web应用程序,例如当新的.WAR文件被放入appBase
时。为此,主机需要启用后台处理,这是默认配置。
autoDeploy
设置为"true"且Tomcat正在运行允许:
- 部署复制到主机
appBase
中的.WAR文件。 - 部署复制到主机
appBase
中的展开式Web应用程序。 - 当提供了新的.WAR文件时,重新部署已经从.WAR文件部署的Web应用程序。在这种情况下,展开的Web应用程序将被删除,并且.WAR文件将再次展开。请注意,如果主机配置为
unpackWARs
属性设置为"false"而不展开.WAR文件,则不会发生展开,Web应用程序将简单地作为压缩归档文件重新部署。 - 如果 /WEB-INF/web.xml 文件(或任何其他定义为 WatchedResource 的资源)被更新,Web 应用程序将重新加载。
- 如果部署Web应用程序的Context描述符文件被更新,则Web应用程序将重新部署。
- 如果Web应用程序使用的全局或每主机Context描述符文件被更新,则依赖的Web应用程序将重新部署。
- 如果一个Context描述符文件(其文件名与先前部署的Web应用程序的Context路径相对应)被添加到
$CATALINA_BASE/conf/[enginename]/[hostname]/
目录,则Web应用程序将重新部署。 - 如果Web应用程序的文档基础(docBase)被删除,则Web应用程序将被卸载。请注意,在Windows上,这假定已启用防锁定功能(参见Context配置),否则无法删除正在运行的Web应用程序的资源。
请注意,Web应用程序的重新加载也可以在加载器中配置,在这种情况下,已加载的类将跟踪更改。
使用Tomcat Manager部署
Tomcat Manager在其自己的手册页面中有所介绍。
使用客户端部署器包部署
最后,Web应用程序的部署可以通过Tomcat客户端部署器实现。这是一个可以用于验证、编译、压缩为.WAR,并将Web应用程序部署到生产或开发Tomcat服务器的软件包。需要注意的是,此功能使用Tomcat Manager,因此目标Tomcat服务器应该正在运行。
使用TCD时,假定用户熟悉Apache Ant。Apache Ant是一个脚本化的构建工具。TCD预先打包了一个构建脚本供使用。只需对Apache Ant有适度的了解即可(如本页前面所列的安装,以及熟悉使用操作系统命令行和配置环境变量)。
TCD包括Ant任务、用于JSP编译的Jasper页面编译器,以及一个验证Web应用程序Context描述符的任务。验证器任务(类org.apache.catalina.ant.ValidatorTask
)只允许一个参数:展开式Web应用程序的基本路径。
TCD使用展开的Web应用程序作为输入(参见下面使用的属性列表)。通过部署器以编程方式部署的Web应用程序可以在/META-INF/context.xml
中包含Context描述符。
TCD包含一个即用型Ant脚本,具有以下目标:
-
compile
(默认):编译并验证Web应用程序。这可以单独使用,不需要运行中的Tomcat服务器。编译后的应用程序只能在关联的Tomcat X.Y.Z服务器版本上运行,并且不保证能在其他Tomcat版本上工作,因为Jasper生成的代码依赖于其运行时组件。还应注意的是,此目标还将自动编译Web应用程序/WEB-INF/classes
文件夹中的任何Java源文件。 -
deploy
:将Web应用程序(已编译或未编译)部署到Tomcat服务器。 undeploy
:卸载Web应用程序start
:启动Web应用程序reload
:重新加载Web应用程序stop
:停止Web应用程序
为了配置部署,在TCD安装目录的根目录下创建一个名为deployer.properties
的文件。在此文件中,每行添加以下name=value对:
此外,您需要确保已为目标Tomcat Manager(TCD使用它)设置了用户,否则TCD将无法通过Tomcat Manager进行身份验证,部署将失败。要做到这一点,请参阅Tomcat Manager页面。
-
build
:使用的构建文件夹,默认情况下为${build}/webapp/${path}
(${build}
默认指向${basedir}/build
)。在compile
目标执行结束后,Web应用程序的.WAR文件将位于${build}/webapp/${path}.war
。 -
webapp
:包含将被编译和验证的展开式Web应用程序的目录。默认情况下,该文件夹是myapp
。 -
path
:Web应用程序的部署上下文路径,默认为/myapp
。 -
url
:指向正在运行的Tomcat服务器的Tomcat Manager Web应用程序的绝对URL,该URL将用于部署和卸载Web应用程序。默认情况下,部署器将尝试访问在localhost上运行的Tomcat实例,地址为http://localhost:8080/manager/text
。 -
username
:Tomcat Manager用户名(用户应具有manager-script角色) password
:Tomcat Manager密码。