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。

posted on 2015-07-21 14:09  小豆角  阅读(2267)  评论(0编辑  收藏  举报

导航