Tomcat配置任意目录下的Web应用程序
每一个Web应用程序都有一个起始目录,在开发和部署Web应用程序时,通过上下文路径(Context path)来区分不同的Web应用程序。Tomcat默认的Web应用程序的起始目录(也称为上下文根)是%CATALINA_HOME%/webapps/ROOT,例如一个关于Hello World的Web应用程序的起始目录是%CATALINA_HOME%/webapps/ch08,这就意味着/ch08是关于Hello World的Web应用程序的上下文路径。那么如何配置任意目录下的Web应用程序呢?
我们知道,在Web服务器中可以配置虚拟目录,而虚拟目录所对应的真实目录可以在任意路径下。同样地,在Tomcat中,也有类似的配置,这主要通过在XML配置文件中设置<Context>元素来完成。一个<Context>元素就表示一个Web应用程序,运行在特定的虚拟主机中。
这里介绍一种在Tomcat中最常用的配置方法:可以为一个Web应用程序建立%CATALINA_HOME%/conf/[enginename]/[hostname]/XXX.xml文件。这里[enginename]表示的是在servlet.xml文件中设置的<Engine>元素的name属性值,具体到Tomcat,这个属性值就是Catalina;[hostname]表示的是在servlet.xml文件中设置的<Host>元素的name属性值,具体到Tomcat,这个属性值就是localhost。在这个XML文件中,<Context>元素的docBase属性通常是Web应用程序目录的绝对路径名,或者是Web应用程序归档文件的绝对路径名。
u 下面简要描述一下在配置Web应用程序时<Context>元素中常用的几个属性含义。
path:指定Web应用程序的上下文路径。在一个特定的虚拟主机中,所有的上下文路径都必须是唯一的。如果指定一个上下文路径为空字符串(””),则定义了这个虚拟主机的默认Web应用程序,负责处理所有的没有分配给其他Web应用程序的请求。
docBase:指定Web应用程序的文档根目录或者WAR文件的路径名。可以指定目录的或WAR文件的绝对路径名,也可以指定相对于Host元素的appBase目录的路径名。该属性是必须的。
reloadable:如果设置为true,Tomcat服务器在运行时,会监视WEB-INF/classes和WEB-INF/lib目录下类的改变,如果发现有类被更新,Tomcat服务器将自动重新加载该Web应用程序。这个特性在应用程序开发阶段非常有用,但是它需要额外的运行时开销,所以在产品发布时不建议使用。该属性的默认值是false。
在%CATALINA_HOME%/webapps目录下的Web应用程序,如果没有在任何文件中设置<Context>元素,那么Tomcat将为这个Web应用程序自动生成<Context>元素。自动生成的<Context>元素的上下文路径将以斜杠(/)开始,后面紧跟Web应用程序所在目录的名字,如果目录的名字是ROOT,那么上下文路径将是一个空字符串(””)。所以在%CATALINA_HOME%/webapps目录下的Web应用程序可以不经配置而直接使用。
u 下面举个例子来说明:
在计算机中关于Hello World的Web程序被放置在目录D:/workspace/ch8下面,为了可以直接在这个目录下运行Web应用程序,可以在%CATALINA_HOME%/conf/[enginename]/[hostname]/目录下,为Hello World这个Web应用程序建立一个XML文件,例如在笔者的机器上可以在D:/apache-tomcat-5.5.31/conf/Catalina/localhost/目录下新建ch08.xml文件,编辑这个文件,输入如下所示内容。
文件名:ch08.xml
<Context path=”/test” docBase=” D:/workspace/ch08” reloadable=”true”/>
这里有三个地方需要进一步说明一下,这三个地方分别是:
u 文件名:ch08.xml
u path=/test
u docBase=” D:/workspace/ch08”
这三个地方在有些书上被写成如下三种值ch08.xml、/ch08、” D:/workspace/ch08”,容易让人以为这三个值之间似乎存在某种联系从而造成误会,其实它们之间是没有联系的。现分别说明如下:
u 文件名:ch08.xml中的“ch08”将会影响将来用浏览器访问Web应用程序时地址栏中紧跟在http://localhost:8080后面的内容,如图1所示。
u path=/ch08中的“ch08”是Context上下文路径,在整个Web应用程序中,一个Servlet对应一个唯一的上下文路径,而这个名称只要唯一就行,至于是什么名称,没有限定。
u docBase=” D:/workspace/ch08”中的“ch08”是Web应用程序在计算机中存放的目录文件夹,由于是可以存放在任意目录下,所以这里可以是任意名称。
通过以上分析可以看出,这三个地方虽然有时候会出现同样的内容,但是它们之间是没有什么必然联系的,详细图解见图1。