部署这个术语描述的就是,将 Web 应用(第三方的 WAR 文件,或是你自己定制的 Web 应用)安装到 Tomcat 服务器上的整个过程。
在 Tomcat 服务器上,可以通过多种方法部署 Web 应用:
Tomcat Manager 是一种能交互使用(利用 HTML GUI)的 Web 应用,还可以利用编程的方式(通过基于 URL 的 API)来部署并管理 Web 应用。
依靠 Manager 这种 Web 应用,可以实施多种部署。Tomcat 为 Apache Ant 构建工具提供了多个任务。 Apache Tomcat Maven Plugin 工程则提供了与 Apache Maven 的集成。另外还有一种工具叫做客户端配置器 (Client Deployer,TCD),它通过命令行来使用,提供一些额外的功能,比如编译与验证 Web 应用,以及将 Web 应用打包成 Web 应用资源(WAR)文件。
静态部署 Web 应用时,并不需要附加的安装,因为 Tomcat 已经提供了这项功能。利用 Tomcat Manager 部署应用也不需要任何安装,不过需要进行一番配置,详见Tomcat Manager 手册。如果使用客户端配置器的话,就必须要进行安装了。
Tomcat 的核心分发版并不包括 TCD,必须从下载区独立下载它,下载文件通常冠名为:apache-tomcat-8.0.x-deployer。
要想使用 TCD,必须事先配置有 Apache Ant 1.6.2+ 以及 Java 安装。另外,还必须定义一个指向 ANT 安装根目录的 ANT_HOME 环境变量,以及一个指向 Java 安装目录的 JAVA_HOME 值。另外,还必须确保必须在操作系统所提供的命令 shell 中运行 ANT 的 ant 命令,以及 Java 的 javac 编译器命令。
在谈到 Web 应用的配置时,需要理解一下上下文(Context)这个概念。上下文在 Tomcat 中其实就是 Web 应用的意思。
为了在 Tomcat 中配置上下文,需要用到上下文描述符文件( Context Descriptor)。
上下文描述符文件其实就是一个 XML 文件,含有 Tomcat 与上下文相关的配置信息,例如命名资源或会话管理器配置信息。在 Tomcat 的早期版本中,上下文描述符文件配置的内容经常保存在 Tomcat 的主要配置文件 server.xml 中,但现在不再推荐采用这一方式(虽然目前它依然有效)。
上下文描述符文件不仅能帮助 Tomcat 了解如何配置上下文,而且其他工具(如 Manager 与 TCD)也经常会借助上下文描述符文件来正确履行它们的职责。
上下文描述符文件位于:
1.$CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml
2.$CATALINA_BASE/webapps/[webappname]/META-INF/context.xml
在目录 1 中的文件名为 [webappname].xml,但在目录 2 中,文件名为 context.xml。如果某个 Web 应用没有相应的上下文描述符文件,Tomcat 就会使用默认值配置该应用。
如果你对使用 Manager 或 TCD 不是很感兴趣,那就需要先把 Web 应用静态地部署到 Tomcat 中,然后再启动 Tomcat。
这种情况下应用部署的位置由 appBase 目录属性来决定,每台主机都指定有这样一个位置。该位置既可以放入未经压缩的 Web 应用资源文件(通常被称为 exploded web application,“膨胀 Web 应用”),也可以放置已压缩过的 Web 应用资源文件(.WAR 文件)。
再次解释一下,应用部署位置由主机(默认主机为 localhost)的 appBase 属性来指定。默认的 appBase 属性所指定的目录为 $CATALINA_BASE/webapps。只有当主机的 deployOnStartup 属性为 true, 应用才会在 Tomcat 启动时进行自动部署。
在以上情况下,当 Tomcat 启动时,部署的具体步骤如下:
除了静态部署之外,也可以在运行中的 Tomcat 服务器上进行应用部署。
如果主机的 autoDeploy 属性为 true,主机就会在必要时尝试着动态部署并更新 Web 应用。 例如,当把一个新 .WAR 文件放入 appBase 所指定的名录时。为了实现这种操作,主机就需要启用后台处理,当然这也是默认的配置。
当 autoDeploy 设置为 true 时,运行中的 Tomcat 服务器能够允许实现以下行为:
注意,如果在主机配置中,没有把 unpackWARs 属性设为 false,则 WAR 文件将不会膨胀,这时 Web 应用将部署为一个压缩文档。
注意,也可以在加载器中对 Web 应用的重新加载进行配置,在这种情况下,会跟踪已加载的类所产生的更改。
详情参看 Tomcat Manager 文档。
最后要介绍的是利用客户端部署器(TCD)对 Web 应用进行部署。客户端部署器可以实施的行为包括:验证并编译 Web 应用,将资源文件压缩成 .WAR 文件,并将 Web 应用部署到用于生产或开发环境的 Tomcat 服务器上。
一定要注意,该特性的实现需要使用 Tomcat Manager,而且目标 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 脚本, 其中包含以下目标。
为了能够配置部署,还需要在 TCD 安装的根目录下创建一个叫做 deployer.properties 的文件,并在该文件中的每行添加下列名值对:
除此之外,你还必须确定为 TCD 所使用的目标 Tomcat Manager 创建了一个用户,否则 TCD 就无法验证 Tomcat Manager,从而造成配置失败,详细信息参看 Tomcat Manager 文档。