Tomcat Web 应用程序部署
目录
简介
部署是指将 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 插件 项目提供了与 Apache Maven 的集成。还有一种名为客户端部署器的工具,它可以从命令行使用,并提供其他功能,例如编译和验证 Web 应用程序以及将 Web 应用程序打包到 Web 应用程序资源 (WAR) 文件中。
安装
静态部署 Web 应用程序不需要安装,因为 Tomcat 提供了开箱即用的功能。使用 Tomcat 管理器进行部署功能也不需要任何安装,尽管需要一些配置,如 Tomcat 管理器手册 中所述。但是,如果您希望使用 Tomcat 客户端部署器 (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 安装中,它可以提取到任何位置。
- 阅读 使用 Tomcat 客户端部署器
关于上下文的说明
在谈论 Web 应用程序的部署时,需要理解上下文的概念。上下文是 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 Manager 或 TCD,则需要将您的 Web 应用程序静态部署到 Tomcat,然后启动 Tomcat。您将 Web 应用程序部署到此类部署的 location 被称为 appBase
,它是在每个主机中指定的。您可以将所谓的展开的 Web 应用程序(即未压缩的)复制到此 location,也可以复制一个压缩的 Web 应用程序资源 .WAR 文件。
在 Tomcat 启动时,仅当主机的 deployOnStartup
属性为“true”时,才会部署主机(默认主机为“localhost”)的 appBase
属性(默认 appBase 为 "$CATALINA_BASE/webapps")指定的 location 中存在的 Web 应用程序。
在这种情况下,Tomcat 启动时将执行以下部署顺序
- 首先将部署所有上下文描述符。
- 然后将部署未被任何上下文描述符引用的展开 Web 应用程序。如果它们在 appBase 中具有关联的 .WAR 文件,并且该文件比展开的 Web 应用程序更新,则将删除展开的目录,并将从 .WAR 重新部署 Web 应用程序。
- 将部署 .WAR 文件。
在运行的 Tomcat 服务器上部署
可以将 Web 应用程序部署到正在运行的 Tomcat 服务器。
如果主机 autoDeploy
属性为“true”,则主机将尝试根据需要动态部署和更新 Web 应用程序,例如,如果将新的 .WAR 放入 appBase
中。要使此功能正常工作,主机需要启用后台处理,这是默认配置。
autoDeploy
设置为“true”以及正在运行的 Tomcat 允许
- 将复制到主机
appBase
中的 .WAR 文件部署。 -
将复制到主机
appBase
中的展开 Web 应用程序部署。 -
重新部署已从 .WAR 部署的 Web 应用程序,当提供新的 .WAR 时。在这种情况下,将删除展开的 Web 应用程序,并将再次扩展 .WAR。请注意,如果主机配置为不展开 .WAR,则不会发生扩展,其
unpackWARs
属性设置为“false”,在这种情况下,Web 应用程序将仅作为压缩存档重新部署。 - 如果更新 /WEB-INF/web.xml 文件(或定义为 WatchedResource 的任何其他资源),则重新加载 Web 应用程序。
- 如果更新了已部署 Web 应用程序的上下文描述符文件,则重新部署 Web 应用程序。
- 如果 Web 应用程序使用的全局或每个主机上下文描述符文件更新,则重新部署依赖的 Web 应用程序。
-
如果在
$CATALINA_BASE/conf/[enginename]/[hostname]/
目录中添加了上下文描述符文件(其文件名对应于先前部署的 Web 应用程序的上下文路径),则重新部署 Web 应用程序。 - 如果 Web 应用程序的文档库 (docBase) 被删除,则取消部署 Web 应用程序。请注意,在 Windows 上,这假设启用了反锁定功能(请参阅上下文配置),否则无法删除正在运行的 Web 应用程序的资源。
请注意,也可以在加载器中配置 Web 应用程序重新加载,在这种情况下,将跟踪加载的类的更改。
使用 Tomcat 管理器部署
Tomcat 管理器在其 自己的手册页 中有介绍。
使用客户端部署程序包部署
最后,可以使用 Tomcat 客户端部署器来部署 Web 应用程序。这是一个可以用来验证、编译、压缩为 .WAR 并将 Web 应用程序部署到生产或开发 Tomcat 服务器的软件包。需要注意的是,此功能使用 Tomcat 管理器,因此目标 Tomcat 服务器应该正在运行。
假设用户熟悉 Apache Ant 以使用 TCD。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
(默认):编译并验证 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
的文件。在此文件中,添加以下每行一个的名称=值对
此外,您需要确保已为目标 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 密码。