<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->
以下部署方式都是针对tomcat5.0 以上版本。
1.1 Context descriptors
Tomcat4 中的Manager 和Admin 管理工具其实就是利用它来部署的。在Tomcat5 中提出了Context descriptor 这个概念,且为其配置了一个专有目录,而不像Tomcat4 那样大杂烩一般地放置在$appBase 目录下。Context descriptor 是一个只包含Context 元素的xml 格式的部署文件,其中Context 元素与server.xml 中的Context 元素配置相同。对于一个给定的主机,Context descriptor 放置在$CATALINA_HOME/conf/[enginename]/[hostname]/ 目录下面。Tomcat5 默认安装时,在$CATALINA_HOME/conf/Catalina/localhost 目录中有admin.xml 和manager.xml ,是两个管理工具的部署描述符文件。而这两个文件在Tomcat4 中是放置在$CATALINA_HOME/webapps 目录下面的。
使用方法:
-
在$CATALINA_HOME/conf/[enginename]/[hostname]/ 目录下新建xxx.xml 文档
-
在xxx.xml 文档中配置如下
<Context docBase="${catalina.home}/server/webapps/host-manager"
privileged="true" antiResourceLocking="false" antiJARLocking="false">
</Context>
注:docBase 也可以设置为[eclipse 的workplace]/[project]/webroot
1.2 静态部署
静态部署是指在Tomcat 运行之前就把相关的Web 应用程序放置到合适的目录,在Tomcat 启动的时候自动来部署这些应用程序。
如果"deployOnStartup" 属性值为true ,那么在Tomcat 启动时,在$appBase 目录下的web 应用程序将被自动部署。部署的过程如下:
(1 ) Context 元素声明的Web 应用程序将被首先部署,这包括server.xml 和context descriptor 文件中的Context 元素所指的应用程序;
(2 ) 部署扩展目录形式的Web 应用程序;
(3 ) 部署WAR 形式的Web 应用程序;
Tomcat5 对于静态方式的部署的增强主要就是:
1 、对于context descriptor 方式的应用程序的部署。
2 、如果扩展目录方式的应用程序对应有一个WAR 文件,且WAR 是更新过的,扩展目录将被自动删除,Web 应用程序将被从WAR 文件中重新部署。而在Tomcat4 中,即使WAR 文件已更新也无法被重新部署,仍然会使用旧的扩展目录方式的Web 应用程序,除非你自己手动删除目录,而且还要重启Tomcat 。
1.3 动态部署
动态部署是指在Tomcat 已经运行以后在不重启服务器的情况下部署应用程序的方式。
如果虚拟主机的"autoDeploy" 属性值为true ,则主机会在需要的时候试图去部署和更新应用程序。这是由虚拟主机在后台运行的一个负责自动加载的处理线程来完成的,它的工作流程如下:
1 、部署新放入$appBase 目录的War 方式的应用程序。
2 、部署新放入$appBase 目录的扩展目录方式的应用程序。
3 、如果一个扩展目录方式的应用程序对应的War 文件更新了,则删除此目录,从War 文件中重新解开并部署。如果”unpackWARs” 属性值为false ,则不解开,从War 文件中直接运行。(记住:不用自己删除扩展目录,也不用重启服务器)
4 、如果应用程序的/WEB-INF/web.xml 文件被改变,则重新部署这个应用。
5 、如果应用程序对应的Context 元素配置发生了改变,则重新部署这个应用。这包括server.xml 或者上下文描述符文件中的Context 元素。
6 、如果$CATALINA_HOME/conf/[enginename]/[hostname]/ 目录下增加了上下文描述符文件,则重新部署这个应用。
看来Tomcat5 在动态部署上花费了不少功夫,其中的亮点主要就是如果我们修改了web.xml 、server.xml 配置文件,增加了上下文描述符文件,动态更新了War 文件时都可以实现应用程序的自动部署和更新,而不用重新启动Tomcat 服务器,在Tomcat4 中都是必须重新启动服务器的,这是一个非常喜人的变化。
2. tomcat 的配置方式
以下配置方式都是针对tomcat5.0 以上版本。
2.1 server.xml 元素详解
元素名 | 属性 | 解释 |
server | port | 指定一个端口,这个端口负责监听关闭 tomcat 的请求 |
shutdown | 指定向端口发送的命令字符串 | |
service | name | 指定 service 的名字 |
Connector( 表示客户端和 service 之间的连接 ) | port | 指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求 |
minProcessors | 服务器启动时创建的处理请求的线程数, 最小空闲连接线程数,用于提高系统处理性能,默认值为 10 | |
maxProcessors | 最大可以创建的处理请求的线程数, 最大连接线程数,即:并发处理的最大请求数,默认值为 75 | |
enableLookups | 如果为 true ,则可以通过调用 request.getRemoteHost() 进行 DNS 查询来得到远程客户端的实际主机名,若为 false 则不进行 DNS 查询,而是返回其 ip 地址 | |
redirectPort | 表示当请求被传输保密或完整性保护的内容时,非 SSL 请求将会被重定向的端口 . | |
acceptCount | 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理, 应大于等于 maxProcessors ,默认值为 100 | |
connectionTimeout | 网络连接超时,单位:毫秒。设置为 0 表示永不超时,这样设置有隐患的。通常可设置为 30000 毫秒。 | |
Debug | 表示该组件产生调试日志信息的详细级别 , 数字越大,产生的日志信息越详细 . 如果不指定 , 该属性值将被设置为 (0). 但是调试信息是否出现在日志中,还进一步取决于 log4j 类别 org.jboss.web.tomcat.tc5.Tomcat5 的 threshold | |
URIEncoding | 设置请求编码格式 | |
Engine( 表示指定 service 中的请求处理机,接收和处理来自 Connector 的请求 ) | defaultHost | 指定缺省的处理请求的主机名,它至少与其中的一个 host 元素的 name 属性值是一样的 |
Context( 表示一个 web 应用程序,通常为 WAR 文件,关于 WAR 的具体信息见 servlet 规范 ) | docBase | 应用程序的路径或者是 WAR 文件存放的路径 |
path | 表示此 web 应用程序的 url 的前缀,这样请求的 url 为 http://localhost:8080/path/**** | |
reloadable | 这个属性非常重要,如果为 true ,则 tomcat 会自动检测应用程序的 /WEB-INF/lib 和 /WEB-INF/classes 目录的变化,自动装载新的应用程序,我们可以在不重起 tomcat 的情况下改变应用程序 | |
host( 表示一个虚拟主机 ) | name | 指定主机名 |
appBase | 应用程序基本目录,即存放应用程序的目录 | |
unpackWARs | 如果为 true ,则 tomcat 会自动将 WAR 文件解压,否则不解压,直接从 WAR 文件中运行应用程序 | |
Logger( 表示日志,调试和错误信息 ) | className | 指定 logger 使用的类名,此类必须实现 org.apache.catalina.Logger 接口 |
prefix | 指定 log 文件的前缀 | |
suffix | 指定 log 文件的后缀 | |
timestamp | 如果为 true ,则 log 文件名中要加入时间,如下例 :localhost_log.2001-10-04.txt | |
Realm( 表示存放用户名,密码及 role 的数据库 ) | className | 指定 Realm 使用的类名,此类必须实现 org.apache.catalina.Realm 接口 |
Valve( 功能与 Logger 差不多,其 prefix 和 suffix 属性解释和 Logger 中的一样 ) | className | 指定 Valve 使用的类名,如用 org.apache.catalina.valves.AccessLogValve 类可以记录应用程序的访问信息 |
directory | 指定 log 文件存放的位置 | |
pattern | 有两个值, common 方式记录远程主机名或 ip 地址,用户名,日期,第一行请求的字符串, HTTP 响应代码,发送的字节数。 combined 方式比 common 方式记录的值更多 |
<Server> 元素
它代表整个容器 , 是 Tomcat 实例的顶层元素 . 由 org.apache.catalina.Server 接口来定义 . 它包含一个 <Service> 元素 . 并且它不能做为任何元素的子元素 .
<Server port="8005" shutdown="SHUTDOWN" debug="0">
-
className 指定实现 org.apache.catalina.Server 接口的类 . 默认值为 org.apache.catalina.core.StandardServer
-
port 指定 Tomcat 监听 shutdown 命令端口 . 终止服务器运行时 , 必须在 Tomcat 服务器所在的机器上发出 shutdown 命令 . 该属性是必须的 .
-
shutdown 指定终止 Tomcat 服务器运行时 , 发给 Tomcat 服务器的 shutdown 监听端口的字符串 .