zoukankan      html  css  js  c++  java
  • tomcat中server.xml配置详解

      Tomcat Server的结构图如下:该文件描述了如何启动Tomcat Server。

    <Server port="8005" shutdown="SHUTDOWN">
        <Listener />
        <GlobaNamingResources></GlobaNamingResources>
        <Service name="Catalina">
        <Executor ...... />
        <Connector />     <Engine name="Catalina" ... >       <Logger />       <Realm />       <host name="localhost" ...>         <Logger />         <Context />       </host>     </Engine>   </Service> </Server>

      即一个由 Server->Service->Engine->Host->Context 组成的四层结构,从里层向外层分别是:

    Context: 即 Web 应用程序,一个 Context 即对于一个 Web 应用程序。
    Host:即虚拟主机,比如 www.dog.com 对应一个虚拟主机,api.dog.com 对于另一个虚拟主机。一个 Host 用于定义一个虚拟主机。(所谓的”一个虚拟主机”可简单理解为”一个网站”)
    Engine:一组虚拟主机的集合。比如www.dog.com 和 api.dog.com 可以组成一组虚拟主机集合。
    Service:一组 Engine 的集合,包括线程池 Executor 和连接器 Connector 的定义。

    <Server>

      元素它代表整个容器,是Tomcat实例的顶层元素.由org.apache.catalina.Server接口来定义。它包含一个元素,并且它不能做为任何元素的子元素。

    <!--一个“Server”是一个提供完整的JVM的独立组件,它可以包含一个或多个“Service”实例。服务器在指定的端口上监听shutdown命令。--> 
    注意:一个“Server”自身不是一个“Container”(容器),因此在这里你 不可以定义诸如“Valves”或者“Loggers”子组件--> 
    <!-- 启动Server 在端口8005处等待关闭命令 如果接受到"SHUTDOWN"字符串则关闭服务器-->

      测试: telnet localhost 8005

      输入:SHUTDOWN

      结果:关闭tomcat

      结果:关闭tomcat 

    <Server port="8005" shutdown="SHUTDOWN" debug="0">
    
    1>className指定实现org.apache.catalina.Server接口的类.默认值为org.apache.catalina.core.StandardServer。
    
    2>port指定Tomcat监听shutdown命令端口.终止服务器运行时,必须在Tomcat服务器所在的机器上发出shutdown命令.该属性是必须的。
    3>shutdown指定终止Tomcat服务器运行时,发给Tomcat服务器的shutdown监听端口的字符串.该属性必须设置。

    <Service>元素

      该元素由org.apache.catalina.Service接口定义,它包含一个元素,以及一个或多个,这些Connector元素共享用同一个Engine元素

    <!-- 一个“Service”是一个或多个共用一个单独“Container”(容器)的“Connectors”
    组合(因此,应用程序在容器中可见)。通常,这个容器是一个“Engine”
    (引擎),但这不是必须的。-->
    
    注意:一个“Service”自身不是一个容器,因此,在这个级别上你不可定义
    诸如“Valves”或“Loggers”子组件。
    
    
    Tomcat的Standalone Service
    Service是一组Connector的集合
    它们共用一个Engine来处理所有Connector收到的请求
    
    
    **<Service name="Catalina">**
    **<Service name="Apache">**
    第一个<Service>处理所有直接由Tomcat服务器接收的web客户请求.
    第二个<Service>处理所有由Apahce服务器转发过来的Web客户请求 .
    1>className 指定实现org.apahce.catalina.Service接口的类.默认为org.apahce.catalina.core.StandardService
    2>name定义Service的名字

    <Connector>元素

      由Connector接口定义.元素代表与客户程序实际交互的给件,它负责接收客户请求,以及向客户返回响应结果。

    <!-- 一个“Service”是一个或多个共用一个单独“Container”(容器)的“Connectors”组合(因此,应用程序在容器中可见)。
    通常,这个容器是一个“Engine”(引擎),但这不是必须的。
    --> 注意:一个“Service”自身不是一个容器,因此,在这个级别上你不可定义,诸如“Valves”或“Loggers”子组件。 Tomcat的Standalone Service Service是一组Connector的集合 它们共用一个Engine来处理所有Connector收到的请求 **<Service name="Catalina">** **<Service name="Apache">** 第一个<Service>处理所有直接由Tomcat服务器接收的web客户请求. 第二个<Service>处理所有由Apahce服务器转发过来的Web客户请求 . 1>className 指定实现org.apahce.catalina.Service接口的类.默认为org.apahce.catalina.core.StandardService 2>name定义Service的名字

    Coyote HTTP/1.1 Connector

      className : 该Connector的实现类是org.apache.coyote.tomcat4.CoyoteConnector

    port : 在端口号8080处侦听来自客户browser的HTTP1.1请求.如果把8080改成80,则只要输入http://localhost/即可。
    adress:连接器所绑定的IP地址,当一台服务器存在多个ip地址时可以指定其中的需要绑定的一个,默认不设置该属性的值表示绑定当前服务器的所有ip地址。 protocol:设定Http协议,默认值为HTTP/1.1 minSpareThreads: 该Connector先创建5个线程等待客户请求,每个请求由一个线程负责 maxSpareThread:设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目.默认值为200。 acceptCount : 当现有线程已经达到最大数75时,为客户请求排队.当队列中请求数超过100时,后来的请求返回Connection refused错误 redirectport : 当客户请求是https时,把该请求转发到端口8443去 enableLookups:如果设为true,表示支持域名解析,可以把IP地址解析为主机名.WEB应用中调用request.getRemoteHost方法返回客户机主机名.默认值为true connectionTimeout:定义建立客户连接超时的时间.如果为-1,表示不限制建立客户连接的时间 allowTrace:是否允许HTTP的TRACE方法,默认为false emptySessionPath:如果设置为true,用户的所有路径都将设置为/,默认为false。 enableLookups:调用request、getRemoteHost()执行DNS查询,以返回远程主机的主机名,如果设置为false,则直接返回IP地址。
      (default=true) 是否
    允许反向解析访客的IP地址,当你的应用程序使用 request.getRemoteHost() 时如果只需要IP地址,建议禁用此项,这样能节省反向域名解析的时间。 maxPostSize:指定POST方式请求的最大量,没有指定默认default(default=2097152 即2MB)最大允许POST上传的数据大小(单位为:字节),
      对于一般网站来说,比如有写评论写文章的网站,默认的2MB已经足够,不过如果网站带有图片甚至文件上传功能,则需要根据具体情况来定。
    protocol:连接器的类型,值必须为HTTP1.1,如果使用AJP处理器,该值必须为AJP/1.3。
      tomcat 6 有如下几种选择:
      
    org.apache.coyote.http11.Http11Protocol:简写为 “HTTP/1.1″,这是默认的连接器,一个访客网络连接需要一个线程,并发性能比较低。

       org.apache.coyote.http11.Http11NioProtocol:NIO连接器,一个由非阻塞的socket工作模式构成的连接器,并发性能良好,纯Java实现。

        org.apache.coyote.http11.Http11AprProtocol:APR连接器,所谓APR就是网络上最多服务器使用的 Web 服务程序Apache Http Server所使用的库,Tomcat 建议在生产环境使用

    proxyName:如这个连接器正在一个代理配置中被使用,指定这个属性,在request.getServerName()时返回
    redirectPort:如连接器不支持SSL请求,如收到SSL请求,Catalina容器将会自动重定向指定的端口号,让其进行处理。
      用户访问非https的资源而该资源又需要https方式访问时,tomcat会自动重定向到https端口,一般https使用 TCP 443端口,所以一般取值”443″。

    scheme:设置协议的名字,在request.getScheme()时返回,SSL连接器设为”https”,默认为”http”。 secure:在SSL连接器可将其设置为true,默认为false URIEncoding:用于解码URL的字符编码,没有指定默认值为ISO-8859-1 useBodyEncodingForURI:主要用于Tomcat4.1.x中,指示是否使用在contentType中指定的编码来取代URIEncoding,用于解码URI查询参数,默认为false xpoweredBy:为true时,Tomcat使用规范建议的报头表明支持Servlet的规范版本,默认为false acceptCount:当所有的可能处理的线程都正在使用时,在队列中排队请求的最大数目。当队列已满,任何接收到的请求都会被拒绝,默认值为10 bufferSize:设由连接器创建输入流缓冲区的大小,以字节为单位。默认情况下,缓存区大的大小为2048字节 compressableMimeType:MIME的列表,默认以逗号分隔。默认值是text/html,text/xml,text/plain compression:指定是否对响应的数据进行压缩。off:表示禁止压缩、on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off connectionTimeout:设置连接的超时值,以毫秒为单位。默认值为60000=60秒 disableUploadTimeOut:允许Servlet容器,正在执行使用一个较长的连接超时值,以使Servlet有较长的时间来完成它的执行,默认值为false maxHttpHeaderSize:HTTP请求和响应头的最大量,以字节为单位,默认值为4096字节 maxKeepAliveRequest:服务器关闭之前,客户端发送的流水线最大数目。默认值为100 maxSpareThreads:允许存在空闲线程的最大数目,默认值为50 minSpareThreads:设当连接器第一次启协创建线程的数目,确保至少有这么多的空闲线程可用。默认值为4 port:服务端套接字监听的TCP端口号,默认值为8080(必须) socketBuffer:设Socket输出缓冲区的大小(以字节为单位),-1表示禁止缓冲,默认值为9000字节 toNoDelay:为true时,可以提高性能。默认值为true threadPriority:设JVM中请求处理线程优先级。默认值为NORMAL-PRIORITY

      例:

    <Connector 
      port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false"
      redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />

    AJP连接器

      用于将Apache与Tomcat集成在一起,当Apache接收到动态内容请求时,通过在配置中指定的端口号将请求发送给在此端口号上监听的AJP连接器组件。

      属性:

    backlog:当所有可能的请求处理线程都在使用时,队列中排队的请求最大数目。默认为10,当队列已满,任何请求都将被拒绝
    maxSpareThread:允许存在空闲线程的最大数目,默认值为50
    maxThread:最大线程数,默认值为200
    minSpareThreads:设当连接器第一次启动时创建线程的数目,确保至少有这么多的空闲线程可用,默认值为4
    port:服务端套接字的TCP端口号,默认值为8089(必须)
    topNoDelay:为true时,可以提高性能,默认值为true
    soTimeout:超时值

      例:

    <!—Define an AJP1.3 Connector on port 8089-->
    <Connector port=”8089” enableLookups=”false” redirectPort=”8443” protocol=”AJP/1.3” />
    
    <Connector port="8080" maxThread="50" minSpareThreads="25" maxSpareThread="75" enableLookups="false" 
      redirectPort
    ="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" /> <Connection port="8009" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3" />

      第一个Connector元素定义了一个HTTP Connector,它通过8080端口接收HTTP请求;第二个Connector元素定义了一个JD Connector,它通过8009端口接收由其它服务器转发过来的请求.

    <Engine>元素

      每个Service元素只能有一个Engine元素.处理在同一个中所有元素接收到的客户请求.由org.apahce.catalina.Engine接口定义.

    <!-- 一个“Engine”(引擎)代表处理每个请求的入口点(在Catalina内)。这个Tomcat的标准独立引擎实现分析包含在请求中的HTTP头信息,并将请求传送到适当的主机或虚拟主机上。-->
    <!-- Engine用来处理Connector收到的Http请求它将匹配请求和自己的虚拟主机,并把请求转交给对应的Host来处理默认虚拟主机是localhost-->
    
    <Engine name="Catalina" defaultHost="localhost" debug="0">
      1>className指定实现Engine接口的类,默认值为StandardEngine
      2>defaultHost指定处理客户的默认主机名,在<Engine>中的<Host>子元素中必须定义这一主机
      3>name定义Engine的名字
    在<Engine>可以包含如下元素<Logger>, <Realm>, <Value>, <Host>

    <Host>元素

      它由Host接口定义.一个Engine元素可以包含多个元素.每个的元素定义了一个虚拟主机.它包含了一个或多个Web应用.

    <!-- 定义默认的虚拟主机 注意:XML模式确认将不能与Xerces 2.2同工作。-->
    
    <!-- 虚拟主机localhost
      appBase : 指 定虚拟主机的目录,可以指定绝对目录,也可以指定相对于<CATALINA_HOME>的相对目录.如果没有此项,默认 为<CATALINA_HOME>/webapps. 
        它将匹配请求和自己的Context的路径,并把请求转交给对应的Context来处理   autoDeploy:如果此项设为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,如果有新有web应用加入进来,会自运发布这个WEB应用   unpackWARs:如果此项设置为true,表示把WEB应用的WAR文件先展开为开放目录结构后再运行.如果设为false将直接运行为WAR文件   alias:指定主机别名,可以指定多个别名   deployOnStartup:如果此项设为true,表示Tomcat服务器启动时会自动发布appBase目录下所有的Web应用.如果Web应用 中的server.xml没有相应的<Context>元素,
        将采用Tomcat默认的Context
      --> <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true"><Host>元素中可以包含如下子元素   <Logger>, <Realm>, <Value>, <Context>         ·

      多站点的配置:设置多个HOST节点
      有时我们需要在一台服务器上跑多个站点,通过 Tomcat 很容易实现这点,下面假设我们要搭建 www.dog.com 和 www.cat.com 这两个站点。
      首先要确定你的两个域名的 DNS 已经能正确解析到你的服务器,因为这里我们是做实验,所以可以在本机添加域名解析。修改 /etc/hosts 文件,加入如下两行:

    127.0.0.1    www.cat.com
    127.0.0.1    www.dog.com

      然后在 /var/lib/tomcat6 目录里分别创建名字为 cat 和 dog 的两个目录,然后在每个目录里都创建名字为 ROOT 的目录,并在 ROOT 里面创建名字为 index.html 文件(内容随便)。然后将目录 cat 和 dog 的所有者和所有组都更改为 tomcat。
      现在编辑 Tomcat 的主配置文件 server.xml,在默认的 Host 节点下面再加入如下两个新的 Host 节点:

    <Host name="www.dog.com" appBase="/var/lib/tomcat6/dog" autoDeploy="true" unpackWARs="true"></Host>  
    <Host name="www.cat.com" appBase="/var/lib/tomcat6/cat" autoDeploy="true" unpackWARs="true"></Host> 

    <Context>元素

      它由Context接口定义.是使用最频繁的元素.每个可以包含多个元素.每个web应用有唯一的一个相对应的Context代表web应用自身.servlet容器为第一个web应用创建一个。

    <!-- Context,对应于一个Web App
      path : 该Context的路径名是"",故该Context是该Host的默认Context
      docBase : 该Context的根目录是webapps/mycontext/
      reloadable:如果这个属性设为true, Tomcat服务器在运行状态下会监视在WEB-INF/classes和Web-INF/lib目录CLASS文件的改运.如果监视到有class文件被更新,
        服务器自重新加载Web应用   useNaming:指定是否支持JNDI,默认值为了true   cookies:指定是否通过Cookies来支持Session,默认值为true
    --> <Context path="" docBase="mycontext" debug="0"/>

    Tomcat Server处理一个http请求的过程

      假设来自客户的请求为:http://localhost:8080/wsota/wsota_index.jsp

    • 1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
    • 2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
    • 3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
    • 4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
    • 5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
    • 6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
    • 7) path="/wsota"的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet
    • 8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
    • 9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
    • 10)Context把执行完了之后的HttpServletResponse对象返回给Host
    • 11)Host把HttpServletResponse对象返回给Engine
    • 12)Engine把HttpServletResponse对象返回给Connector
    • 13)Connector把HttpServletResponse对象返回给客户browse
  • 相关阅读:
    每日日报2020.12.1
    每日日报2020.11.30
    981. Time Based Key-Value Store
    1146. Snapshot Array
    565. Array Nesting
    79. Word Search
    43. Multiply Strings
    Largest value of the expression
    1014. Best Sightseeing Pair
    562. Longest Line of Consecutive One in Matrix
  • 原文地址:https://www.cnblogs.com/jing99/p/7538552.html
Copyright © 2011-2022 走看看