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