Tomcat server.xml详解

标签分级:

<server>  #表示一个运行于JVM中的tomcat实例。
  <service> #服务。将connector关联至engine,因此一个service内部可以有多个connector,但只能有一个引擎engine。
     <connector /> #接收用户请求配置监听端口的
     <engine>  #核心容器组件,catalina引擎,负责通过connector接收用户请求,并处理请求,将请求转至对应的虚拟主机host。
       <host>   #虚拟主机,
       <context></context>  #配置context的主要目的指定对应对的webapp的根目录。其还能为webapp指定额外的属性,如部署方式等。
       </host>
       <host>
       <context></context>
       </host>
     </engine>
  </service>
</server>

我的server.xml

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN"> <!--整个容器,8005端口用于监听shutdown关闭tomcat-->
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> 
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> 
  <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" /> 
 <!-- Listener即监听器,负责监听特定的事件,当特定事件触发时,Listener会捕捉到该事件,
 并做出相应处理。Listener通常用在Tomcat的启动和关闭过程。-->
 
  <GlobalNamingResources> 
  <!--用于配置JNDI-->
    <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="Catalina1"> 
  <!--一个完整的服务-->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" /> 
               <!--Tomcat接收请求的入口,每个Connector有自己专属的监听端口
               redirectPort:处理http请求时,收到一个SSL传输请求,该SSL传输请求将转移到此端口处理
               -->
               
    <Engine name="Catalina1" defaultHost="localhost">
    <!--Engine负责处理Service内的所有请求。它接收来自Connector的请求,并决定传给哪个Host来处理,
    Host处理完请求后,将结果返回给Engine,Engine再将结果返回给Connector
        defaultHost 指定默认host名字Engine接收来自Connector的请求,然后将请求传递给defaultHost,
        defaultHost 负责处理请求
        -->
      <Realm className="org.apache.catalina.realm.LockOutRealm">
         
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
      <Host name="localhost"  appBase=""
            unpackWARs="true" autoDeploy="true">
           <!--Host负责管理一个或多个Web项目若有多个honst将appBase写成同样的路径,
           启动时会加载同样的项目,unpackWARs="true" 是否自动解压war包
           -->
             <Context path="" docBase="webapps/RMS" reloadable="false" />
              <!--配置项目名称-->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost\_access\_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
  
 <!--配置不同域名,不同端口号,部署不同项目,若域名不想加端口,将端口配置成80
     ip:80 ====>ip
 -->
<Service name="Catalina">
    <Connector port="8089" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8445"
	  	URIEncoding="UTF-8" />
    <!-- 此端口为8089,与其他service容器不能有冲突
      当域名解析到这个服务器后,ip:8089 会进到此service容器
   --> 
    <Engine name="Catalina" defaultHost="localhost">
    <!--配置默认host-->
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
     <!--配置一个域名一个项目--> 
     <Host name="www.nsk666.com"  appBase="" unpackWARs="true" autoDeploy="true">
        <!-- 配置:项目名,项目路径,注意多hostappBase请不要填写,然后会重复加载项目 -->       
		<Context path="" docBase="" reloadable="false" /> 
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost\_access\_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    <!--配置第二个域名第二个项目--> 
    <Host name="tnt.nsk666.com"  appBase="" unpackWARs="true" autoDeploy="true">
          <!-- 配置:项目名,项目路径 --> 
                <Context path="" docBase="webapps/HRSystem" reloadable="false" />
	 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost\_access\_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
     </Host>
     <!--访问RMS项目 www.nsk666.com:8089
         访问HRSystem项目 tnt.nsk666.com:8089
         不想有端口号,可以配置成80端口。
     -->
    </Engine>
  </Service>
</Server>