安装和启动一个新的网络程序,并把它和特定的上下文路径相连(着个上下文路径不能被其他网络程序使用)。这个命令(指install)与/remove 命令在逻辑意义上相反。 /remove
有许多种不同的办法来使用安装(install)命令:
安装一个以前被部署过的网络程序版本
这可以用来部署一个以前版本的网络程序,这个程序曾被使用标志(tag)属性部署过。注意,管理员程序的工作目录必须包含以前部署过的WARs;删除它会使得这里的部署失败。
 |  |  |
 | http://localhost:8080/manager/deploy?path=/footoo&tag=footag |  |
 |  |  |
通过URL安装一个目录或者WAR
安装Tomcat服务器上的网络程序目录或者".war"文件。如果没有指定路径(path),那么目录名称或者不带有.war 扩展名的WAR文件名称就被当作路径。网络应用程序档案(war)参数为每个目录或WAR文件指定了URL(包括文件: scheme)。关于URL指向WAR文件的语法在Javadocs页面java.net.JarURLConnection class里有描述。只能使用那些指向全部(entire)WAR文件的URL。
在下面的这个例子里,位于Tomcat服务器/path/to/foo目录里的网络程序被安装为一个名叫/footoo 的网络程序context。
 |  |  |
 | http://localhost:8080/manager/deploy?path=/footoo&war=file:/path/to/foo |  |
 |  |  |
在下面的这个例子里,位于Tomcat服务器上的".war"文件/path/to/bar.war被安装为一个名叫/bar 的网络程序context。注意,这里没有路径(path)参数,所以在默认的情况下,context path指向不带有".war"扩展名的网络应用程序档案文件。
 |  |  |
 | http://localhost:8080/manager/deploy?war=jar:file:/path/to/bar.war!/ |  |
 |  |  |
在主机的appBase安装一个目录或War文件
在主机的appBase目录里安装一个网络程序目录或".war"文件。如果没有指定路径(path),那么目录名称或者不带有".war"扩展名的WAR文件名称就被当作路径。
在下面的这个例子里,位于Tomcat服务器主机appBase目录下的子目录foo里面的网络程序被安装为叫作/foo 的网络程序context。注意,这里没有路径(path)参数,所以在默认的情况下,context path指向网络程序目录名。
 |  |  |
 | http://localhost:8080/manager/deploy?war=foo |  |
 |  |  |
在下面的这个例子里,位于Tomcat服务器主机appBase目录里的".war"文件bar.war被安装为名叫/bartoo 的网络程序context。
 |  |  |
 | http://localhost:8080/manager/deploy?path=/bartoo&war=bar.war |  |
 |  |  |
使用上下文语境配置".xml"文件安装
如果主机(Host) deployXML旗标被设置为正确(true),你可以用上下文语境配置".xml"文件,或者".war"文件,或者程序目录来安装你的网络程序。当使用上下文语境配置".xml"文件来安装网络程序时,不需要使用context路径。
一个上下文语境配置".xml"文件可包括有效的网络程序上下文XML文件,就象在Tomcat server.xml 配置文件里被配置过一样。下面是个示例:
 |  |  |
 | <Context path="/foobar" docBase="/path/to/application/foobar"
debug="0">
<!-- Link to the user database we will get roles from -->
<ResourceLink name="users" global="UserDatabase"
type="org.apache.catalina.UserDatabase"/>
</Context> |  |
 |  |  |
当可任选的网络应用程序档案(war)参数被设置指向一个web程序的".war"文件或目录的URL时,它会取代任何在上下文配置".xml"文件里配置的docBase 。
这里的例子是使用上下文语境配置".xml"文件来安装一个应用程序。
 |  |  |
 | http://localhost:8080/manager/deploy?config=file:/path/context.xml |  |
 |  |  |
这个例子是使用上下文语境配置".xml"文件和一个位于服务器上的".war"文件来安装一个应用程序。
 |  |  |
 | http://localhost:8080/manager/deploy?config=file:/path/context.xml&war=jar:file:/path/bar.war!/ |  |
 |  |  |
安装注意事项
如果主机(Host)配置为unpackWARs=true ,并且你安装了一个war文件,那么,这个war文件就会被unpacked到主机的appBase目录上。
如果war文件或者目录被安装到主机的appBase目录上,并且主机被配置为autoDeploy=true 或者liveDeploy=true ,那么Context path 必须与目录名或不带有".war"扩展符的war文件名相配。
因为安全原因,当不可靠用户来管理网络程序时,主机的deployXML旗标可以设置为false 。这就使不可靠用户不能够使用配置XML文件来安装web程序,也不能安装位于主机appBase之外的目录或".war"文件。
安装回应
如果安装和启动成功,你会收到象下面这种回应:
 |  |  |
 | OK - Deployed application at context path /foo |  |
 |  |  |
否则,回应(response)将是以FAIL为首的一段错误消息。产生错误的可能原因包括:
- 应用程序已经存在于path /foo
当前运行的网络程序的context paths 必须是独特的。因此,你必须删除或取消部署现有的使用这个context path的网络程序,或者为新程序选择一个不同的context path 。更新(update)参数必须指定为URL上的一个参数,为避免错误,把参数值设为true 。这样,在部署新程序前会对现有程序执行取消部署。
- 文档base不存在或者是一个不可读取的目录
由网络应用程序档案(war)参数指定的URL必须识别这个服务器上包含"unpacked"版本的网络程序目录,或者包含这个程序的网络应用程序档案(WAR)的绝对URL。修正这个网络应用程序档案(war)参数指定值。
- 遇到异常
当试图启动新程序时,遇到了异常。详细问题去查看Tomcat 5日志(logs),不过通常的解释多为在语法分析(parsing)/WEB-INF/web.xml 文件时遇到问题,或者是在初始化程序事件(event)监听器(listeners)或过滤器(filters)遇到了缺失的类(missing
classes)。
- 指定的程序URL无效
你为目录或网络程序指定的URL是无效的。这样的URL必须以“file:”开始,为WAR文件提供的URL必须以".war"结束。
- 指定的上下文路径是无效的
上下文路径(context path)必须以"/"字符开始,除非你是指ROOT网络程序。
- 上下文路径必须与目录名或WAR文件名相配
如果war文件或者目录被安装到主机的appBase目录上,并且主机被配置为autoDeploy=true 或者liveDeploy=true ,那么Context path 必须与目录名或不带有".war"扩展符的war文件名相配。
- 只有在主机网络程序目录里的web程序才能被安装
如果主机的deployXML旗标被设为false,要是试图安装位于主机appBase目录之外的网络程序目录或".war"文件,就会出现错误。