tomcat的配置文件server.xml详解

zjfjava      2022-02-10     173

关键词:

server.xml位于$TOMCAT_HOME/conf目录下,作为整个tomcat 服务器最核心的配置文件,server.xml的每一个元素都对应了tomcat中的一个组件,通过对xml中元素的配置,实现对tomcat中的各个组件和端口的配置。通常初学者可以直接使用默认配置即可,但当你本机由于各种原因(如分布式、多IDE等)需要配置多个tomcat时,就需要对server.xml的配置有一定了解。

1. server.xml配置实例

下面是实际开发环境中的tomcat7,端口保持默认,增加了本版本默认删除的<Context />元素。

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
  <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
  <Listener className="org.apache.catalina.core.JasperListener"/>
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>

  <GlobalNamingResources>
    <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
  </GlobalNamingResources>

  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1" connectionTimeOut="20000" redirectPort="8443"/>
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

    <Engine defaultHost="localhost" name="Catalina">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>

      <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
      
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt"/>

        <Context docBase="cas-server-webapp" path="/cas" reloadable="true" source="org.eclipse.jst.j2ee.server:cas-server-webapp"/>
        <Context docBase="portal" path="/portal" reloadable="true" source="org.eclipse.jst.jee.server:portal"/>
        
      </Host>
    </Engine>
  </Service>
</Server><?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
  <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
  <Listener className="org.apache.catalina.core.JasperListener"/>
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>

  <GlobalNamingResources>
    <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
  </GlobalNamingResources>

  <Service name="Catalina">
    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

    <Engine defaultHost="localhost" name="Catalina">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>

      <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
      
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt"/>

        <Context docBase="cas-server-webapp" path="/cas" reloadable="true" source="org.eclipse.jst.j2ee.server:cas-server-webapp"/>
        <Context docBase="portal" path="/portal" reloadable="true" source="org.eclipse.jst.jee.server:portal"/>
        
      </Host>
    </Engine>
  </Service>
</Server>

2. 整体结构分析

2.1 整体结构

从上面的server.xml 中提炼出的元素如下:

<Server>  
    <Listener />  
    <GlobaNamingResources>  
        <Resource />
    </GlobaNamingResources>
    <Service>  
        <Connector />  
        <Engine>  
            <Realm />  
            <Host>  
          <Context />  
                <Valve />  
            </Host>  
        </Engine>  
    </Service> 
</Server>

直观结构图如下

 技术分享图片

2.2 元素分类

通过直接结构图可以看出server.xml文件中的元素可以分为以下4类:

(1)顶层元素:<Server>和<Service>

<Server>元素是整个配置文件的根元素,<Service>元素则代表一个Engine元素以及一组与之相连的Connector元素。

(2)连接器:<Connector>

<Connector>代表了外部客户端发送请求到特定Service的接口;同时也是外部客户端从特定Service接收响应的接口。

(3)容器:<Engine><Host><Context>

容器的功能是处理Connector接收进来的请求,并产生相应的响应。Engine、Host和Context都是容器,但它们不是平行的关系,而是父子关系:Engine包含Host,Host包含Context。一个Engine组件可以处理Service中的所有请求,一个Host组件可以处理发向一个特定虚拟主机的所有请求,一个Context组件可以处理一个特定Web应用的所有请求。

(4)内嵌组件

可以内嵌到容器中的组件。实际上,Server、Service、Connector、Engine、Host和Context是最重要的最核心的Tomcat组件,其他组件都可以归为内嵌组件。

3. 核心组件

3.1 Server

Server元素在最顶层,代表整个tomcat容器,因此它必须是server.xml中唯一一个最外层的元素。一个Server元素中可以有一个或多个Service元素。

在第一部分的例子中,在最外层有一个<Server>元素,shutdown属性表示关闭Server的指令;port属性表示Server接收shutdown指令的端口号,设为-1可以禁掉该端口。

Server的主要任务,就是提供一个接口让客户端能够访问到这个Service集合,同时维护它所包含的所有的Service的声明周期,包括如何初始化、如何结束服务、如何找到客户端要访问的Service。

3.2 Service

Service的作用,是在Connector和Engine外面包了一层,把它们组装在一起,对外提供服务。一个Service可以包含多个Connector,但是只能包含一个Engine其中Connector的作用是从客户端接收请求,Engine的作用是处理接收进来的请求。

在第一部分的例子中,Server中包含一个名称为“Catalina”的Service。实际上,Tomcat可以提供多个Service,不同的Service监听不同的端口,后文会有介绍。

3.3 Connector

Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。

通过配置Connector,可以控制请求Service的协议及端口号。在第一部分的例子中,Service包含两个Connector:

1 <Connector port="8080" protocol="HTTP/1.1" connectionTimeOut="20000" redirectPort="8443"/>
2 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

(1)通过配置第1个Connector,客户端可以通过8080端口号使用http协议访问Tomcat。其中,protocol属性规定了请求的协议,port规定了请求的端口号,redirectPort表示当强制要求https而请求是http时,重定向至端口号为8443的Connector,connectionTimeout表示连接的超时时间。

在这个例子中,Tomcat监听HTTP请求,使用的是8080端口,而不是正式的80端口;实际上,在正式的生产环境中,Tomcat也常常监听8080端口,而不是80端口。这是因为在生产环境中,很少将Tomcat直接对外开放接收请求,而是在Tomcat和客户端之间加一层代理服务器(如nginx),用于请求的转发、负载均衡、处理静态文件等;通过代理服务器访问Tomcat时,是在局域网中,因此一般仍使用8080端口。

(2)通过配置第2个Connector,客户端可以通过8009端口号使用AJP协议访问Tomcat。AJP协议负责和其他的HTTP服务器(如Apache)建立连接;在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。之所以使用Tomcat和其他服务器集成,是因为Tomcat可以用作Servlet/JSP容器,但是对静态资源的处理速度较慢,不如Apache和IIS等HTTP服务器;因此常常将Tomcat与Apache等集成,前者作Servlet容器,后者处理静态资源,而AJP协议便负责Tomcat和Apache的连接。

3.4 Engine

Engine组件在Service组件中有且只有一个;Engine是Service组件中的请求处理组件。Engine组件从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端。

前面已经提到过,Engine、Host和Context都是容器,但它们不是平行的关系,而是父子关系:Engine包含Host,Host包含Context。

在第一部分的例子中,Engine的配置语句如下:

<Engine defaultHost="localhost" name="Catalina">

其中,name属性用于日志和错误信息,在整个Server中应该唯一。defaultHost属性指定了默认的host名称,当发往本机的请求指定的host名称不存在时,一律使用defaultHost指定的host进行处理;因此,defaultHost的值,必须与Engine中的一个Host组件的name属性值匹配。

3.5 Host

(1)Engine与Host

Host是Engine的子容器。Engine组件中可以内嵌1个或多个Host组件,每个Host组件代表Engine中的一个虚拟主机。Host组件至少有一个,且其中一个的name必须与Engine组件的defaultHost属性相匹配。

(2)Host的作用

Host虚拟主机的作用,是运行多个Web应用(一个Context代表一个Web应用),并负责安装、展开、启动和结束每个Web应用。

Host组件代表的虚拟主机,对应了服务器中一个网络名实体(如”www.test.com”,或IP地址”116.25.25.25”);为了使用户可以通过网络名连接Tomcat服务器,这个名字应该在DNS服务器上注册。

客户端通常使用主机名来标识它们希望连接的服务器;该主机名也会包含在HTTP请求头中。Tomcat从HTTP头中提取出主机名,寻找名称匹配的主机。如果没有匹配,请求将发送至默认主机。因此默认主机不需要是在DNS服务器中注册的网络名,因为任何与所有Host名称不匹配的请求,都会路由至默认主机。

(3)Host的配置

在第一部分的例子中,Host的配置如下:

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

下面对其中配置的属性进行说明:

name属性指定虚拟主机的主机名,一个Engine中有且仅有一个Host组件的name属性与Engine组件的defaultHost属性相匹配;一般情况下,主机名需要是在DNS服务器中注册的网络名,但是Engine指定的defaultHost不需要,原因在前面已经说明。

unpackWARs指定了是否将代表Web应用的WAR文件解压;如果为true,通过解压后的文件结构运行该Web应用,如果为false,直接使用WAR文件运行Web应用。

Host的autoDeploy和appBase属性,与Host内Web应用的自动部署有关;此外,本例中没有出现的xmlBase和deployOnStartup属性,也与Web应用的自动部署有关;将在下一节(Context)中介绍。

3.6 Context

 

 

 

 

 

 

 参考

https://blog.csdn.net/a314368439/article/details/60132783

https://www.cnblogs.com/kismetv/p/7228274.html#title3-6

https://www.cnblogs.com/starhu/p/5599773.html

 

详解tomcat配置文件server.xml

参考技术A前言Tomcat隶属于Apache基金会,是开源的轻量级Web应用服务器,使用非常广泛。server.xml是Tomcat中最重要的配置文件,server.xml的每一个元素都对应了Tomcat中的一个组件;通过对xml文件中元素的配置,可以实现对Tomcat中各个... 查看详情

tomcat:server.xml文件详解

一、server.xml文件介绍1.server.xml作用   Server.xml配置文件用于对整个容器进行相关的配置。2.server.xml文件的配置元素列表   <Server>:是整个配置文件的根元素。表示整个Catalina容器。   <Connector>:连接器,... 查看详情

tomcat配置文件server.xml详解(代码片段)

...修改$CATALINA_HOME/conf/server.xml文件为如下内容即可,本文的tomcat安装在/application/tomcat下,因此$CATALINA_HOME=/application/tomcat。其中大部分都采用了默认设置,只是在engine容器中添加了两个 查看详情

tomcat常用配置详解及优化(代码片段)

....xml。 /logs:存放日志文件。 /server/webapps:来管理Tomcat-web服务用的。仅对TOMCAT可见,对所有的WEBAPP都不可见(使用Catalina类加载器加载)。 /shared/lib:仅对所有WEBAPP可见,对TOMCAT不可见(使用Shared类加载器加载)。&nbs... 查看详情

tomcat记录-tomcat常用配置详解和优化方法(代码片段)

....xml。 /logs:存放日志文件。 /server/webapps:来管理Tomcat-web服务用的。仅对TOMCAT可见,对所有的WEBAPP都不可见(使用Catalina类加载器加载)。 /shared/lib:仅对所有WEBAPP可见,对TOMCAT不可见(使用Shared类加载器加载)。&nbs... 查看详情

tomcat中server.xml配置详解(代码片段)

TomcatServer的结构图如下:该文件描述了如何启动TomcatServer<Server>    <Listener />    <GlobaNamingResources>    </GlobaNamingResour 查看详情

tomcat的server.xml文件详解(代码片段)

这个文件平时一般多用于修改端口号和访问路径1<?xmlversion="1.0"encoding="UTF-8"?>2<!--3LicensedtotheApacheSoftwareFoundation(ASF)underoneormore4contributorlicenseagreements.SeetheNOTICEfiledistributedwith5thisworkf 查看详情

tomcat三种部署方式以及server.xml文件的几个属性详解

...eb项目文件件拷贝到webapps目录中  这是最常用的方式,Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用。如果你想要修改这个默认目录,可以在conf下的server.xml文件里修改Host标签里的ap... 查看详情

tomcat的server.xml配置文件

tomcat的配置文件在其安装后生成的conf目录下,其中主配置文件便是conf下的server.xml文件。server.xml文件由server->service->engine->host->context结构组成。<?xmlversion="1.0"encoding="UTF-8"?><!--tomcat实例顶层元素,代表整个容器。... 查看详情

如何配置tomcat中server.xml文件

参考技术Aserver.xml常用的配置也就是访问端口和连接超时的配置通常会使用默认如果同一台服务器上部署两个tomcat两个tomcat的端口不能冲突,需要修改三个port,如下:编码格式配置:URIEncoding="UTF-8"本回答被提问者采纳 查看详情

tomcat的配置文件server.xml不支持中文注释的解决办法

原文链接:http://tjmljw.iteye.com/blog/1500370启动tomcat失败,控制台一闪而过,打开catalina的log发现错误指向了conf/server.xml,报错信息如下:--------------------------05-Dec-201620:17:01.903WARNING[main]org.apache.catalina.startup.Catali 查看详情

tomcat源码解读系列——server.xml文件的配置

Tomcat是J2EE开发人员最常用到的开发工具,在JavaWeb应用的调试开发和实际部署中,我们都可以看到Tomcat的影子。大多数时候,我们可以将Tomcat当做一个黑盒来看待,只需要将编写的JavaWeb工程进行部署即可,但是,在遇到一些比较... 查看详情

tomcat工作原理解析

参考技术A本文主要讲解Tomcat启动和部署webapp时的原理和过程,以及其使用的配置文件的详解。主要有三大部分:1.Tomcat的简介和启动过程2.Tomcat部署webapp3.Tomcat处理一个http请求的过程【简介】Tomcat依赖/conf/server.xml这个配置文件启... 查看详情

tomcat8优化配置之server.xml文件优化

<?xmlversion=‘1.0‘encoding=‘utf-8‘?><!--Note:A"Server"isnotitselfa"Container",soyoumaynotdefinesubcomponentssuchas"Valves"atthislevel.Documentationat/docs/config/server.html--><Serverpo 查看详情

tomcatserver.xml配置详解(转载地址)

Tomcatserver.xml框架与基础配置详解Tomcatserver.xml配置示例tomcat中server.xml配置详解 查看详情

tomcatserver.xml配置详解(转载地址)

Tomcatserver.xml框架与基础配置详解Tomcatserver.xml配置示例tomcat中server.xml配置详解 查看详情

详解tomcat的连接数与线程池

...部摘自https://www.cnblogs.com/kismetv/p/7806063.html#t11前言在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。在前面的文章详解Tomcat配置文件server.xml 中写到过:... 查看详情

tomcat基础(2)

参考技术ATomcat服务器的配置主要集中于tomcat/conf下的catalina.policy,catalina.properties,context.xml、server.xml、tomcat-users.xml、web.xml文件。server.xml是tomcat服务器的核心配置文件,包含了Tomcat的servlet容器(catalina)的所有配置。由于配置的属性特... 查看详情