详解tomcat配置文件server.xml

一,server.xml的元素整体结构

<Server>
    <Service>
        <Connector />
        <Connector />
        <Engine>
            <Host>
                <Context />
                <Context />
            </Host>
             <Host>
                <Context />
                <Context />
            </Host>
        </Engine>
    </Service>
</Server>

二,对各以上元素详解

1,server

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

这是 server.xml 的顶级元素,在配置文件是唯一的。上面配置表示监听8005端口,向8005端口发送 “SHUTDOWN” 字符串即可关闭tomcat(注:必须是大写)。所以我们也可以直接使用 telnet 关闭 tomcat,如下:

telnet localhost 8005, 输入SHUTDOWN即可关闭tomcat

2,Service

该元素用于创建服务实例,默认使用: org.apache.catalina.core.StandardService。一个Server服务器,可以包含多个Service服务。

2.1 Service元素的属性

 className: 实现Service的类名,不写默认是org.apache.catalina.core.StandardService。
 name: 服务的名称,默认为Catalina。

2.2 Service 内嵌的子元素: Executor、Connector、Engine

2.2.1 Executor :配置Connector连接器可以共享的执行器(包含线程池)。

如:

- 
<!-- 执行器线程池 -->
<Executor name="tomcatThreadPool"
          namePrefix="catalina-exec-"
          maxThreads="800"
          minSpareThreads="20"
          maxIdleTime="60000"
          maxQueueSize="Integer.MAX_VALUE"
          prestartminSpareThreads="true" 
          threadPriority="5"
          className="org.apache.catalina.core.StandardThreadExecutor"/>

属性说明:
在这里插入图片描述

2.2.2 Connector:配置Connector连接器接收请求、返回响应,一个Service可以配置多个Connector。

如:

 <Connector port="8060" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
 <Connector port="8070" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

属性说明:

  • port: 端口号,Connector用于创建服务端Socket并进行监听,以等待客户端请求链接。如果该属性设置为0,Tomcat将会随机选择一个可用的端口号给当前Connector使用。
  • protocol: 当前Connector支持的访问协议。默认为 HTTP/1.1 就是NIO。
  • connectionTimeOut: 连接等待超时时间,单位为(毫秒),-1表示不超时。
  • redirectPort: 当前Connector不支持SSL请求,接收到了一个请求,将请求重定向到指定的端口。
  • executor: 指定共享线程池的名称,可以通过maxThreads、minSpareThreads等属性配置线程池。
2.2.3 Engine :配置引擎作为处理请求的入口,引擎实现分析请求中包含的HTTP头,并传递它们到适当的主机,一个Service 只能有一个Engine。
<Engine name="Catalina" defaultHost="localhost">		
			  <Host name="localhost"  appBase="D:\TomCat\test"
				unpackWARs="true" autoDeploy="true">
				<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="www.a.com" autoDeploy="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" />
			   	<Context path="/app3" docBase="D:\TomCat\testStatic" debug="0" reloadable="true"/>		
			  </Host>	
</Engine>

一个Engine可以配置多个Host,Host可以理解为虚拟主机,Engine接受到请求之后就会分配给这些虚拟主机处理。

<Engine name="Catalina" defaultHost="localhost">
	 <Host name="localhost"  appBase="D:\TomCat\test" unpackWARs="true" autoDeploy="true"></Host>
	 <Host name="www.a.com" autoDeploy="false"></Host>
	 <Host name="www.b.com" autoDeploy="false"></Host>
</Engine>

Host 的属性Host.name 可以理解为虚拟主机的域名或者ip,当是域名时 (比如www.a.com,www.b.com) 需要在DNS服务器中注册或者在本地host文件中注册。Host中必须有一个 Host.name 与 Engine.localhost 相同否则tomcat启动出错,因为任何与所有Host名称不匹配的请求,都会路由至默认主机。
Engine 分配请求时就是根据 Host.name 确定分配哪个虚拟主机处理的,比如有下面的配置:

 <!--
 配置了一个Service服务实例,两个Connector分别负责监听来自8050和8040端口的请求,接受到这两个端口的请求后交给Engine处理。
 Engine 配置了两个虚拟主机,分别为Host.localhost、Host.www.a.com
 -->
   <Service name="myService"> 
		<Connector port="8050" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
		<Connector port="8040" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
		<Engine name="Catalina" defaultHost="localhost">
			  <Host name="localhost"  appBase="D:\TomCat\test"
				unpackWARs="true" autoDeploy="true">
				<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="www.a.com" autoDeploy="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" />
			   	<Context path="/app3" docBase="D:\TomCat\testStatic" debug="0" reloadable="true"/>			
			  </Host>
		</Engine>
   </Service>

当我们在网页上访问:

http://localhost:8050/  或者  http://localhost:8040/

就会交给 Host.localhost 这个主机处理。

当我们在网页上访问:

http://www.a.com:8050/  或者  http://www.a.com:8040/

就会交给 Host.www.a.com 这个主机处理。

Host 有一个子元素:

<Context></Context>

我们可以理解为一个web应用,可以是一个war包,war解压后的文件夹,或者就是一个本地的文件夹。所以我们可以这样配置:

 <Service name="myService"> 
		<Connector port="8050" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
		<Connector port="8040" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
		<Engine name="Catalina" defaultHost="localhost">	
			  <Host name="localhost"  appBase="D:\TomCat\test" unpackWARs="true" autoDeploy="true"></Host>
			  
			   <Host name="www.a.com" autoDeploy="false">
			   	<Context path="/app3" docBase="D:\TomCat\testStatic" debug="0" reloadable="true"/>
			  </Host>
		</Engine>
   </Service>

第一个 Host .localhost 配置了appBase,并没有配置 Context ,因为配置了appBase,tomcat启动时会自动到配置的目录下解压(unpackWARs=“true”)该目录下的war,生成war名对应的目录,并自动帮我们配置context,且path属性就是war包的名字。(比如 这里有个 app2.war 解压后就会生成app2目录)
解压后生成war包对应的目录
就相当于:

 <Host name="localhost"  appBase="D:\TomCat\test" unpackWARs="true" autoDeploy="true">
 	<Context path="/app2" docBase="D:\TomCat\test\app2" debug="0" reloadable="true"/>
 </Host>

第二个 Host .www.a.com 的context直接配置了本地文件 ( docBase=“D:\TomCat\testStatic” ) ,这里 D:\TomCat\testStatic 如下:
 D:\TomCat\testStatic 对应的文件
这样当我们访问:

http://www.a.com:8040/app3/4.JPG

就会访问到对应的文件
访问文件
<Context 标签有一个属性:

path="/app3"

这个属性就是访问路径,当Host下配置多个<Context 时区分使用哪个,比如:

 <Host name="localhost"  appBase="D:\TomCat\test" unpackWARs="true" autoDeploy="true">
 	<Context path="/app1" docBase="D:\TomCat\test\app1" debug="0" reloadable="true"/>
 	<Context path="/app2" docBase="D:\TomCat\test\app2" debug="0" reloadable="true"/>
 </Host>

当我们访问:

http://localhost:8040/app1/

交给 app1处理

http://localhost:8040/app2/

就交给 app2处理

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值