查看文章
 
Tomcat 6.0服务器server.xml配置文件
2009年09月17日 星期四 18:13

使用Tomcat,如果对它的配置不能深入地理解,在实际工作中可能会遇到一些问题。

当安装完Tomcat 6.0以后,默认的conf/server.xml文件,去掉注释以后,如下所示:

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
    <Connector port="8085" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
      <Host name="localhost" appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      </Host>
    </Engine>
</Service>
</Server>

下面基于这样一个基础的配置并结合Tomcat的体系结构,来说明各个配置元素的含义。关于Tomcat的体系结构,可以参考文档docs/architecture/overview.html。

<Server> 元素

<Server>元素表示的是整个Catalina Servlet容器,在conf/server.xml中是最顶层的配置元素,也就是说,使用Tomcat WEB服务器是基于这样一个容器的,能够容纳各种资源、连接、虚拟主机等等。当然,如果你实现了org.apache.catalina.Server接口,也可以在server.xml中配置<Server>元素,是启动容器为自己实现的,这需要在<Server>元素中配置指定的属性。

实现org.apache.catalina.Server接口,必须支持该接口定义的三个属性:className、port、shutdown。

className属性

指明实现org.apache.catalina.Server接口的类,如果在<Server>元素中没有指定className的值,就会默认指定className="org.apache.catalina.core.StandardServer",使用标准的实现类。

port属性

指定TCP/IP端口号,通过该端口号可以与Tomcat服务器进行通信,比如执行shutdown命令来关闭Tomcat服务器。

shutdown属性

通过为sutdown指定一个字符串,可以通过发送该字符串作为消息来关闭Tomcat服务器。

对于上面的配置文件中,<Server>元素配置如下:

<Server port="8005" shutdown="SHUTDOWN">

显然省略了className属性,使用默认的org.apache.catalina.core.StandardServer,端口号为8005,通过建立的TCP/IP连接,可以使用命令向端口8085发送消息,来影响Tomcat服务器的行为,例如关闭服务器。shutdown="SHUTDOWN",如果Tomcat在启动以后,接收到端口8085发送的消息为SHUTDOWN,则开始执行关闭的动作。

<Service>元素

<Server>元素是<Service>元素的顶层配置,从<Server>元素的含义来看,<Service>元素表示存活于一个顶层的Catalina Servlet容器中的组件,其中,一个<Server>元素中可以配置一个或者多个<Service>元素。作为组件,应该通过某种方式来提供一定的服务。

其中,作为一个服务组件,必须实现org.apache.catalina.Service 接口。默认,Tomcat实现了一个标准的服务器组件,具体实现类为org.apache.catalina.core.StandardService。一个<Server>元素可以配置两个属性:

className属性

默认使用Tomcat实现了标准服务组件,当然可以定义自己的服务组件,并在<Server>元素中配置指定。

name属性

用来标识在<Server>元素中唯一的一个服务组件。

从上面的配置文件可以看到,<Server>元素的配置块:

<Service name="Catalina">
    <Connector port="8085" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
      <Host name="localhost" appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      </Host>
    </Engine>
</Service>

<Connector>元素

<Connector>元素表示连接器,是容器与外部进行交互信的桥梁。该元素定义的连接器是在一个<Service>元素表示的组件中,一个<Service>元素中可以配置多个连接器<Connector>元素,表示提供服务的组件通过不同的连接方式与容器外部进行通信,从而完成一定的操作。

通过上面配置可以看到,配置了两个连接器,一个是基于HTTP协议的连接器,一个是基于AJP协议的连接器。

上面<Connector>元素属性包括port、protocol、redirectPort、connectionTimeout,分别表示端口号、通信协议、重定向端口号、连接超时时间。

<Connector>元素可以配置的属性非常多,这是由连接的特点所决定的,可以对连接的状态进行详细设置。可以参考Tomcat文档docs/config/http.html。

<Engine>元素

<Engine>元素表示Catalina Servlet容器中针对</Service>元素定义的服务,执行请求处理的一个引擎。当然作为这样一个引擎,它可能将通过<Connector>元素配置的不同连接方式,接收容器外部请求的数据,经过处理,将处理后的数据,再通过连接器传送给容器外部执行请求的载体,例如用户。

可见,存在一个或者多个连接器绑定在一个引擎上,相互协调完成特定服务定义的功能。

<Engine>元素可以配置的属性有:

className属性

className属性指定引擎的实现类,可以实现自定义引擎,但是必须实现org.apache.catalina.Engine 接口,Tomcat同样实现了默认的标准引擎,通过org.apache.catalina.core.StandardEngine类定义的。

defaultHost属性

指定默认主机。在一个<Engine>元素中可以配置多个虚拟主机,每个虚拟主机都通过name属性来识别,但是在<Engine>元素中必须指定一个在其中存在的主机配置,通过defaultHost来默认指定。

name属性

用来标识该引擎的逻辑名称。

通过从上面的配置可以看到,name="Catalina",defaultHost="localhost",而且localhost已经在<Engine>元素中存在的<Host>元素中配置。没有指定className属性,表示默认使用org.apache.catalina.core.StandardEngine引擎。

<Host>元素

<Host>元素表示对虚拟主机进行配置,可以在一个<Engine>元素中配置多个<Host>元素,也就是指定多个虚拟主机。虚拟主机就是通过域名这样的逻辑名,来定位到物理存在的主机,或者主机上的目录。

同样,如果想自定义主机实现类,可以实现org.apache.catalina.Host 接口,否则使用默认的标准主机实现org.apache.catalina.core.StandardHost类。

上面对<Host>元素的配置如下:

      <Host name="localhost" appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

属性说明如下:

className属性

指定主机实现类。这里使用默认的标准主机,可以省略。

name属性

虚拟主机名称,也就是一个逻辑域名标识符,例如localhost,如果连接器<Connector>配置元素指定了HTTP协议和8085端口,则可以通过浏览器使用前缀http://localhost:8085来进行通信;如果你将本地IP地址127.0.0.1绑定到任意一个域名,例如www.shirdrn.org上,可以通过浏览器使用前缀http://www.shirdrn.org:8080来与容器进行本地交互。

appBase属性

appBase属性表示应用程序的根目录,也就是通过虚拟主机可以访问的资源所在的基路径,例如,上面appBase="webapps",因为使用Tomcat部署应用程序,默认部署到webapps目录下面,这种情况是,你只能将应用程序部署后存放到webapps目录下,其实通过<Host>元素的子元素<Context>元素的docBase来指定实际应用程序的位置,也就是在物理文件系统中的位置(不一定就是在webapps目录下)。

<Host>元素还有很多属性,可以参考docs/config/host.html。

<Context>元素

在<Host>元素中可以配置一个或者多个<Context>元素。如果配置多个的话,必须使得每个<Context>元素对应一个唯一的path。每个<Context>元素表示一个Web应用程序,可以在该元素中来对指定的Web应用程序详细配置。

例如,存在这样的一个主机配置中,包含了<Context>元素:

<Host name="beta.shirdrn.org" appBase="/usr/local/tomcat/webapps"
unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context path="/" docBase="/home/javaApp/myApps" workDir="/usr/local/tomcat/work" reloadable="true">
    <Logger className="org.apache.catalina.logger.FileLogger"
     directory="logs" prefix="appLog." suffix=".txt" timestamp="true" />
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
     prefix="test_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
</Context>
</Host>

虚拟主机逻辑名称为beta.shirdrn.org,实际我的项目应用程序目录docBase为/home/javaApp/myApps,应用程序部署基路径appBase为/usr/local/tomcat/webapps,path设置为“/”表示前缀是“/”,从根目录请求,通过HTTP连接器,指定端口为8085,可以通过浏览器使用前缀http://beta.shirdrn.org:8085来访问虚拟主机上的资源。


类别:Servers||添加到搜藏 |分享到i贴吧|浏览(9278)|评论 (0)
 
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu