Tmocat的service.xml配置文件详解(含中文翻译)
Posted jdemarryme
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tmocat的service.xml配置文件详解(含中文翻译)相关的知识,希望对你有一定的参考价值。
Tmocat的service.xml配置文件
|
|
英文原版 |
中文手译
|
<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!--################Server################################-->
<!-- Note: A "Server" is not itself a "Container", so you may not
define subcomponents such as "Valves" at this level.
Documentation at /docs/config/server.html
-->
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
-->
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<!-- Global JNDI resources
Documentation at /docs/jndi-resources-howto.html
-->
<GlobalNamingResources>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<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###############################-->
<!-- A "Service" is a collection of one or more "Connectors" that share
a single "Container" Note: A "Service" is not itself a "Container",
so you may not define subcomponents such as "Valves" at this level.
Documentation at /docs/config/service.html
-->
<Service name="Catalina">
<!--The connectors can use a shared executor, you can define one or more named thread pools-->
<!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
-->
<!--#################Connector###############################-->
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URLEncoding="utf-8"/>
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
<!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
This connector uses the NIO implementation that requires the JSSE
style configuration. When using the APR/native implementation, the
OpenSSL style configuration is required as described in the APR/native
documentation -->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<!--##############Engine##################################-->
<!-- An Engine represents the entry point (within Catalina) that processes
every request. The Engine implementation for Tomcat stand alone
analyzes the HTTP headers included with the request, and passes them
on to the appropriate Host (virtual host).
Documentation at /docs/config/engine.html -->
<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
-->
<Engine name="Catalina" defaultHost="localhost">
<!--For clustering, please take a look at documentation at:
/docs/cluster-howto.html (simple how to)
/docs/config/cluster.html (reference documentation) -->
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
<!-- Use the LockOutRealm to prevent attempts to guess user passwords
via a brute-force attack -->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm. -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<!--#################Host###############################-->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
|
<?xml version = "1.0" encoding = ‘uft-8‘?>
<!--
在一个或多个贡献者许可协议下授权给Apache软件基金会(ASF)。
请参阅通知文件分发的关于版权所有权的其他信息。Apache软件基金会
在Apache许可证(2.0)下授权该文件给您。除非符合许可证,否则不得
使用此文件。你可以在
获得一个许可证的副本。
除非适用法律要求或书面同意,在许可证下分发的软件在“以此类推”的基础
上分发,无论任何类型的保证或条件,无论明示还是暗示。查看许可证下限
定的特定语言和权限的许可证。
-->
<!--###################Server#####################-->
<!-- 注意:一个“服务器”他本身不是一个“容器”,所以你不能在这个级别上
定义诸如“Valves”子组件。
文件在/docs/.config/service.html下
-->
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
-->
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<!-- 全面的JNDI(Java naming and directory interface)资源
文件在/docs/jndi-resources-howto.html
-->
<GlobalNamingResources>
<!-- 可编辑用户数据,也可以由UserDatabaseRealm认证用户。
-->
<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>
<!--<Server>顶层容器
1.Server的主要任务:
提供一个接口让客户端能够访问到这个Service集合,同时维护它所包含
的所有的Service的声明周期,包括如何初始化、如何结束服务、如何找到
客户端要访问的Service。
2.Server的属性:
2.Server的特点:
-->
<!--#################Service#######################-->
<!-- 一个“Service”是一个或多个“Connectors”的集合,这些“Connectors”共享
一个容器。“Service”本身不是一个“Container”,所以你不能在这一级别上定义诸
如“Valves”的子组件。
Documentation at /docs/config/service.html
-->
<Service name="Catalina">
<!--这些Connector可以使用共享的执行器,可以定义一个或多个命名线程池-->
<!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
-->
<!--<Service>
1.Service的主要任务:
提供对外服务,将Connector和Engine组装在一起。
2.Service的属性:
3.特点
-->
<!--################Connector#########################-->
<!--一个Connector代表一个端点,通过该端点接受请求返回响应。文件在:
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
在端口8080上定义一个没有SSL协议/基于TLS的HTTP1.1协议的Connector
-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URLEncoding="utf-8"/>
<!--一个Connector使用共享的线程池-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
<!-- 在端口8443定义一个 SLL协议/基于TLS的HTTP1.1协议
这个连接器使用需要JSSE(Java安全套接字扩展)配置的NIO实现。
当使用APR或原生实现时,需要Open SSL的样式配置,如在APR或
本地文档所描述的。-->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
<!--在8009端口定义一个AJP1.3协议的Connector-->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<!--<Connector>
1.Connector的主要任务:
接受连接请求,创建Reuqest和Response对象用于请求交换数据,然后将产生的
Request和Response对象传给Engine并分配线程让Engine来处理请求。
2.Connector的属性:
3.特点
-->
<!--#################Engine###############################-->
<!-- 一个Engine代表处理每一个请求的入口点(在Calalina内,我们定义的Service内)
为了Tomcat的独立,Engine实现了分析请求包含的HTTP头部并传递给适当的
主机(虚拟主机)上。
Documentation at /docs/config/engine.html -->
<!--你应该设置JVM Route以支持通过AJP IE的负载平衡。
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
-->
<Engine name="Catalina" defaultHost="localhost">
<!--For clustering, please take a look at documentation at:
/docs/cluster-howto.html (simple how to)
/docs/config/cluster.html (reference documentation) -->
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
<!-- 使用LockOutRealm阻止试图通过蛮力法攻击来猜测用户密码
<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- 该领域使用全局JNDI资源下在密钥“UserDatabase”中配置的用户数据库。
对该UserDatabase执行的任何编辑都可以立即对该领域使用。
-->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<!--<Engine>
1.Engine的主要任务:
处理接受的请求
2.Engine的属性:
3.特点
<!--#################Host###############################-->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, Web应用程序间的共享认证
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access日志处理所有示例。
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
1.Host的主要任务:
运行多个Web应用(一个Context代表一个Web应用),并负责安装、展开、启动和结束每个Web应用。
2.Host的属性:
3.特点
1.Context的主要任务:
在特定虚拟主机上运行的一个Web应用。每个Web应用基于WAR文件,或WAR文件解压后对应的目录(这里称为应用目录)。
2.特点
</Host>
</Engine>
</Service>
</Server
|
1、整体关系
核心组件之间的整体关系,在上一部分有所介绍,这里总结一下:
Server元素在最顶层,代表整个Tomcat容器;一个Server元素中可以有一个或多个Service元素。
Service在Connector和Engine外面包了一层,把它们组装在一起,对外提供服务。一个Service可以包含多个Connector,但是只能包含一个Engine;Connector接收请求,Engine处理请求。
Engine、Host和Context都是容器,且 Engine包含Host,Host包含Context。每个Host组件代表Engine中的一个虚拟主机;每个Context组件代表在特定Host上运行的一个Web应用。
2、如何确定请求由谁处理?当请求被发送到Tomcat所在的主机时,如何确定最终哪个Web应用来处理该请求呢?
(1)根据协议和端口号选定Service和EngineService中的Connector组件可以接收特定端口的请求,因此,当Tomcat启动时,Service组件就会监听特定的端口。在第一部分的例子中,Catalina这个Service监听了8080端口(基于HTTP协议)和8009端口(基于AJP协议)。当请求进来时,Tomcat便可以根据协议和端口号选定处理请求的Service;Service一旦选定,Engine也就确定。
通过在Server中配置多个Service,可以实现通过不同的端口号来访问同一台机器上部署的不同应用。
(2)根据域名或IP地址选定HostService确定后,Tomcat在Service中寻找名称与域名/IP地址匹配的Host处理该请求。如果没有找到,则使用Engine中指定的defaultHost来处理该请求。在第一部分的例子中,由于只有一个Host(name属性为localhost),因此该Service/Engine的所有请求都交给该Host处理。
(3)根据URI选定Context/Web应用这一点在Context一节有详细的说明:Tomcat根据应用的 path属性与URI的匹配程度来选择Web应用处理相应请求,这里不再赘述。
(4)举例以请求http://localhost:8080/app1/index.html为例,首先通过协议和端口号(http和8080)选定Service;然后通过主机名(localhost)选定Host;然后通过uri(/app1/index.html)选定Web应用。
|
|
一个Server可以包含多个Service,不同的Service用来监听不同的端口。
一个Service可以包含多个Connector,但是只能包含一个Engine。
Tomcat可以提供多个Server
Server:对外提供接口(一个Server可以有多个Service)
Service:对外提供服务(一个Service可以包含多个Connector,但是只能包含一个Engine)
Connector:接受客户端请求(一个Service可以包含多个Connector)
Engine:处理接受进来的请求(一个Service只能包含一个Engine)
Host:运行Web应用程序(一个Engine至少有一个Host)
|
参考链接:
|
以上是关于Tmocat的service.xml配置文件详解(含中文翻译)的主要内容,如果未能解决你的问题,请参考以下文章