Tomcat Web应用部署
目录 |
· 简介 · 安装 · Contexts片言只语 · Tomcat启动部署 · Tomcat运行中部署 · 使用Tomcat管理器部署 · 使用客户端部署包部署 |
简介 |
部署是把web应用安装到Tomcat服务器上的流程的术语(要么事第三方WAR或您自己定制的web应用)。 Web应用部署就Tomcat服务器而言可以用多种方法来完成。 · 静态部署; web应用在Tomcat启动之前设置the web application is setup before Tomcat is started · 动态部署; 通过直接操作已经部署的web应用(依赖于自动部署特性)或使用Tomcat管理器web应用远程操作 Tomcat 管理器 是一个交互式(通过HTML GUI)或程序式(通过基于URL的API)的web应用,它可以部署和管理web应用。 依靠管理器web应用,有许多方法可以执行应用的部署。Apache Tomcat提供了Ant构建工具的任务。Apache Tomcat Maven Plugin 工程提供了和Apache Maven集成的方法。还有一种工具叫做客户端部署器,它可以通过命令行使用,并且提供了额外的功能,例如编译、验证、打包web应用。 |
安装 |
对于静态部署是不需要安装的,因为静态部署是直接可以使用的。使用Tomcat Manager部署某个功能也不需要安装,尽管Tomcat Manager手册也指出需要一些配置。无论如何,如果您要使用Tomcat客户端部署器(TCD)来部署应用,还是需要安装的。 TCD在Tomcat核心发布包中是没有的,它必须单独从下载页面下载。下载的标签一般是apache-tomcat-6.0.x-deployer。 要使用TCD,必须先安装Apache Ant1.6.2+和Java。您的开发环境中需要定义ANT_HOME环境变量,它指向Ant安装的根目录。已经JAVA_HOME环境变量,它指向Java安装的位置。您必须确保Ant的ant命令可用,以及Java的javac命令可以从命令行运行。 1. 下载TCD的发布包 2. TCD的包不需要解压到Tomcat的安装目录,它可以解压到任何位置。 3. 阅读《使用Tomcat 客户端部署器 》 |
Contexts简介 |
当谈论部署web应用时,必须知道context的概念。Context对于Tomcat来说就是一个web应用。 配置Tomcat的Context需使用Context描述符。Context描述符就是一个简单的XML文件,它包含了TomcatContext相应的配置,例如资源或session管理器配置。在Tomcat的早期版本中,Context描述符配置经常保存在Tomcat的主配置文件server.xml中,现在已经不推荐这么做了(尽管这么做还是可以奏效的)。 Context 描述符不仅帮助Tomcat理解如何配置Contexts,还帮助理解如何配置其它的工具,例如Tomcat Manager和TCD经常使用Context描述符来合理地执行它们的角色。 Context 描述符的位置为: 1. $CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml 2. $CATALINA_BASE/webapps/[webappname]/META-INF/context.xml (1)中的文件名称为 [webappname].xml 但 (2)中的文件名为context.xml。 如果没有提供Context描述符,Tomcat会使用缺省值配置Context。 |
重启Tomcat的部署 |
如果您不想使用Tomcat Manager, 或者TCD, 那么您需要静态的部署web应用,并需重启Tomcat。这种部署方式的部署位置叫做appBase,这对每个主机的独立的。您既可以拷贝一份解压的web应用,也可以拷贝压缩的web应用资源.WAR文件到这个位置。 Host里appBase指定的位置的web应用只有在Host的deployOnStartup属性是true的时候才会在启动时部署到Tomcat中。下面就是这种部署方式在Tomcat启动时的执行顺序: 1. 任何Context描述符都将最先被部署。 2. 然后部署的是解压的并且没有被Context描述符引用的web应用。 如果有关联的.WAR文件在appBase目录,并且它比解压的web应用版本更新,那么已经解压的应用会被移除然后重新从.WAR文件部署。 3. .WAR 最后部署。 注意每个部署的web应用将会创建一个Context描述符,除非原来已经存在了。 |
在运行中的Tomcat服务器上部署 |
在运行着的Tomcat服务器上部署web应用也是可以的。 如果Host的autoDeply属性为true,主机会尝试动态部署和更新web应用,如果需要,例如如果一个新的.WAR被放置到了appBase所指的位置。为了使动态部署能够工作,主机必须能执行后台处理,这在Tomcat里是缺省配置。 把autoDeploy设成true再运行Tomcat,从而可以完成下面的功能: · 把.WAR文件拷贝到Host 的appBase目录实现部署。 · 把解压的web应用拷贝到Host的appBase目录实现部署。 · 当提供了一个更新的.WAR文件时,重新部署web应用。在这种情况下,已经解压的web应用会被移除,然后重新解压.WAR文件。注意,如果Host中的unpackWARs属性为false,.WAR文件就不会被解压,在这种情况下web应用仅仅会作为一个压缩的包重新部署。 · 当web应用的/WEB-INF/web.xml(或者任何作为监控资源的资源)更新后重新部署应用。 · 当已部署的web应用的Context描述文件更新后,重新部署应用。 · 当Context描述符文件(和前一个部署的web应用的Context路径对应的文件名)加入到$CATALINA_BASE/conf/[enginename]/[hostname]/目录后,重新部署应用。 · 当文档根目录(docBase)被删除后,取消部署web应用。注意在windows系统中,假定anti-locking特性是打开的(参考Context配置),否则无法再一个运行的web应用中删除这些资源。 注意,web应用的重新加载也可以在加载器中配置,在这种情况下所有的已加载的class的修改都会被跟踪。 |
使用Tomcat Manager部署 |
Tomcat Manager在它自己的手册页中描述。 |
使用客户端部署器包 |
最后,部署web应用也可以通过Tomcat客户端部署器实现。这个包可用来验证、编译、压缩成.WAR和把web应用部署成生产态或开发Tomcat服务器。需要注意的是,这个特性使用了Tomcat Manager并且Tomcat服务器必须运行着。 要使用TCD,我们假定用户是熟悉Apache Ant的。 Apache Ant是一个脚本构建工具。TCD是在打包前用一个构建脚本来使用的。只需要了解Ant的最基本的用法就可以使用TCD了(如何安装在本页手册前面描述描述过了,需要熟悉操作系统的命令行和配置环境变量)。 TCD包括一些Ant任务,它们是Jasper页面编译器,用于在部署前编译JSP页面,以及验证web应用Context描述符。验证器任务(org.apache.catalina.ant.ValidatorTask)只有一个参数:web应用的解压根路径。 TCD使用解压后的web应用作为输入(参考下面使用的属性列表)。使用部署器由程序自动部署的web应用在/META-INF/context.xml中包含了Context描述符。 TCD包含了直接可用的Ant脚本,包含下面的targets: · compile (default): 编译和验证web应用。它可以单独使用,不需要运行Tomcat服务器。编译过的应用智能在Tomcat6.0.x版本上运行,不能确保在其它Tomcat版本上也能运行, 因为Jasper产生的代码依赖于运行时组件。同时还需注意,这个target还会自动编译所有放在/WEB-INF/classes文件夹下的所有源代码文件。 · 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}。在compile target执行完成的时候,web应用的WAR文件会放在${build}/webapp/${path}.war。 · webapp: 包含解压后的web应用,它将把编译和验证。缺省情况下该目录是myapp。 · path: 部署后的web应用的context path,缺省为/myapp。 · url: 运行着的Tomcat服务其中的Tomcat manager应用的绝对URL,它用于部署和取消部署web应用。缺省情况下,部署器会访问运行在localhost的Tomcat实例,缺省值为http://localhost:8080/manager。 · username: Tomcat Manager用户名(用户名需要有manager-script角色) · password: Tomcat Manager 密码 |