安装和启动一个新的网络程序,把它和特定的上下文路径
相连(这个上下文路径
不能被其他网络程序使用)。这个命令(指deploy)与/undeploy
命令在逻辑意义上相反。
有许多种不同的办法来使用deploy命令:
部署一个以前被部署过的网络程序版本
这可以用来部署一个以前版本的网络程序,这个程序曾被使用标志(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 path
。
一个上下文语境配置".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必须以一个slash符号开始。使用"/"代指ROOT网络应用程序。
- 上下文路径必须与目录名或WAR文件名相配
如果war文件或者目录被安装到主机的appBase目录上,并且主机被配置为autoDeploy=true 或者liveDeploy=true ,那么Context path 必须与目录名或不带有".war"扩展符的war文件名相配。
- 只有在主机网络程序目录里的web程序才能被安装
如果主机的deployXML旗标被设为false,要是试图部署位于主机appBase目录之外的网络程序目录或".war"文件,就会出现错误。