Tomcat配置任意目录下的Web应用程序

    每一个Web应用程序都有一个起始目录,在开发和部署Web应用程序时,通过上下文路径(Context path)来区分不同的Web应用程序。Tomcat默认的Web应用程序的起始目录(也称为上下文根)是%CATALINA_HOME%/webapps/ROOT,例如一个关于Hello WorldWeb应用程序的起始目录是%CATALINA_HOME%/webapps/ch08,这就意味着/ch08是关于Hello WorldWeb应用程序的上下文路径。那么如何配置任意目录下的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:如果设置为trueTomcat服务器在运行时,会监视WEB-INF/classesWEB-INF/lib目录下类的改变,如果发现有类被更新,Tomcat服务器将自动重新加载该Web应用程序。这个特性在应用程序开发阶段非常有用,但是它需要额外的运行时开销,所以在产品发布时不建议使用。该属性的默认值是false

%CATALINA_HOME%/webapps目录下的Web应用程序,如果没有在任何文件中设置<Context>元素,那么Tomcat将为这个Web应用程序自动生成<Context>元素。自动生成的<Context>元素的上下文路径将以斜杠(/)开始,后面紧跟Web应用程序所在目录的名字,如果目录的名字是ROOT,那么上下文路径将是一个空字符串(””)。所以在%CATALINA_HOME%/webapps目录下的Web应用程序可以不经配置而直接使用。

u      下面举个例子来说明:

在计算机中关于Hello WorldWeb程序被放置在目录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中的“ch08Context上下文路径,在整个Web应用程序中,一个Servlet对应一个唯一的上下文路径,而这个名称只要唯一就行,至于是什么名称,没有限定。

u       docBase=” D:/workspace/ch08”中的“ch08Web应用程序在计算机中存放的目录文件夹,由于是可以存放在任意目录下,所以这里可以是任意名称。

    通过以上分析可以看出,这三个地方虽然有时候会出现同样的内容,但是它们之间是没有什么必然联系的,详细图解见图1

图1 访问Web应用程序时地址栏中的内容

   

在任意目录下面配置Web应用程序的时候,类的包名也很重要,因为它会影响类在应用程序中的存放目录以及应用程序在被访问时的路径。

如图2所示,4中的SimpleHello.java文件有一个包名WZY.li,在编译该文件时使用如下命令

javac -d . D:/workspace/ch08/src/SimpleHello.java

u       回车运行后,会在C:/Documents and Settings/Administrator(这里Administrator可以是当前系统登录用户名)目录下生成/WZY/li/SimpleHello.class文件如图25所示,这里就看到使用-d选项,会按照Java源文件中定义的包的层次生成对应的目录层次。

u       Web应用程序所在目录中新建一个文件夹命名为WEB-INF,将配置文件web.xml放入其中,并在该文件夹中新建一个class文件夹,将前面生成的目录/WZY/li/SimpleHello.class一并拷贝到class文件夹下面。

经过上面两步就配置好了Web应用程序,就可以在浏览器地址栏中输入

http://localhost:8080/[localhost文件夹下XXX.xml文件名]/[web.xml文件中元素<url-pattern>内容]

这里还需要记住一点,在web.xml文件中对带有包名的Servlet class进行配置时,元素<servlet-class>内容中的类名称千万要写出完整的包名如图28所示,否则Web应用程序会报错HTTP Status 500,说无法找到相关的类。

 

 

2 Web应用程序配置中的包

   

</article>

    每一个Web应用程序都有一个起始目录,在开发和部署Web应用程序时,通过上下文路径(Context path)来区分不同的Web应用程序。Tomcat默认的Web应用程序的起始目录(也称为上下文根)是%CATALINA_HOME%/webapps/ROOT,例如一个关于Hello WorldWeb应用程序的起始目录是%CATALINA_HOME%/webapps/ch08,这就意味着/ch08是关于Hello WorldWeb应用程序的上下文路径。那么如何配置任意目录下的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:如果设置为trueTomcat服务器在运行时,会监视WEB-INF/classesWEB-INF/lib目录下类的改变,如果发现有类被更新,Tomcat服务器将自动重新加载该Web应用程序。这个特性在应用程序开发阶段非常有用,但是它需要额外的运行时开销,所以在产品发布时不建议使用。该属性的默认值是false

%CATALINA_HOME%/webapps目录下的Web应用程序,如果没有在任何文件中设置<Context>元素,那么Tomcat将为这个Web应用程序自动生成<Context>元素。自动生成的<Context>元素的上下文路径将以斜杠(/)开始,后面紧跟Web应用程序所在目录的名字,如果目录的名字是ROOT,那么上下文路径将是一个空字符串(””)。所以在%CATALINA_HOME%/webapps目录下的Web应用程序可以不经配置而直接使用。

u      下面举个例子来说明:

在计算机中关于Hello WorldWeb程序被放置在目录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中的“ch08Context上下文路径,在整个Web应用程序中,一个Servlet对应一个唯一的上下文路径,而这个名称只要唯一就行,至于是什么名称,没有限定。

u       docBase=” D:/workspace/ch08”中的“ch08Web应用程序在计算机中存放的目录文件夹,由于是可以存放在任意目录下,所以这里可以是任意名称。

    通过以上分析可以看出,这三个地方虽然有时候会出现同样的内容,但是它们之间是没有什么必然联系的,详细图解见图1

图1 访问Web应用程序时地址栏中的内容

   

在任意目录下面配置Web应用程序的时候,类的包名也很重要,因为它会影响类在应用程序中的存放目录以及应用程序在被访问时的路径。

如图2所示,4中的SimpleHello.java文件有一个包名WZY.li,在编译该文件时使用如下命令

javac -d . D:/workspace/ch08/src/SimpleHello.java

u       回车运行后,会在C:/Documents and Settings/Administrator(这里Administrator可以是当前系统登录用户名)目录下生成/WZY/li/SimpleHello.class文件如图25所示,这里就看到使用-d选项,会按照Java源文件中定义的包的层次生成对应的目录层次。

u       Web应用程序所在目录中新建一个文件夹命名为WEB-INF,将配置文件web.xml放入其中,并在该文件夹中新建一个class文件夹,将前面生成的目录/WZY/li/SimpleHello.class一并拷贝到class文件夹下面。

经过上面两步就配置好了Web应用程序,就可以在浏览器地址栏中输入

http://localhost:8080/[localhost文件夹下XXX.xml文件名]/[web.xml文件中元素<url-pattern>内容]

这里还需要记住一点,在web.xml文件中对带有包名的Servlet class进行配置时,元素<servlet-class>内容中的类名称千万要写出完整的包名如图28所示,否则Web应用程序会报错HTTP Status 500,说无法找到相关的类。

 

 

2 Web应用程序配置中的包

   

猜你喜欢

转载自blog.csdn.net/qq_37070419/article/details/82823676
今日推荐