<div class="iteye-blog-content-contain" style="font-size: 14px"></div>
通过server.xml文件来分析
<!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->
<?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
http://www.apache.org/licenses/LICENSE-2.0
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.
-->
<!-- Note: A "Server" is not itself a "Container", so you may not
define subcomponents such as "Valves" at this level.
<!--
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
http://www.apache.org/licenses/LICENSE-2.0
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.
-->
<!-- 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
--> 注意:一个Tomcat容器只能有且只有一个Server元素,它是顶层类元素,可以包含多个Service
<Server port="8005" shutdown="SHUTDOWN">
以下是几个监听器
<!-- 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" />
<!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
<Listener className="org.apache.catalina.core.JasperListener" />
<!-- 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
<Listener className="org.apache.catalina.security.SecurityListener" />
-->
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
<Listener className="org.apache.catalina.core.JasperListener" />
<!-- 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
-->
全局JNDI资源,多用于配置datasource
<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"
<!-- 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>
<!-- 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.
<!-- 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是一个多个Connector的集合,用来充分利用容器,它的下级不能有service,下面可以有一个Engine和多个Connector
<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"/>
-->
<!-- 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 HTTP/1.1 Connector on port 8080
<!--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"/>
-->
<!-- 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 HTTP/1.1 Connector on port 8080
-->
一个Connector代表一个访问点,监听某个端口,接受请求(请求交给指定的Engine处理)和返回应答。有两种Connector,一种是处理Browser的http请求,另一个监听来自其他webService请求(Apache)
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
connectionTimeout="20000"
redirectPort="8443" />
下面是使用线程池的Connector例子
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
<!-- Define a SSL HTTP/1.1 Connector on port 8443
This connector uses the JSSE configuration, when using APR, the
connector should be using the OpenSSL style configuration
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
<!-- Define a SSL HTTP/1.1 Connector on port 8443
This connector uses the JSSE configuration, when using APR, the
connector should be using the OpenSSL style configuration
described in the APR documentation -->
这个是利用APR提高Tomcat处理性能和安全性,但是配置复杂
<!--
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
接受来自其他WebService请求的Connector
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<!-- 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 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<!-- 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 -->
负责处理所有Connector的请求,下面可以包含多个Host,每个Host都有不同的域名,Engine有个defaultHost,在没有找到指定域名的host时使用。
下面使用的是负载均衡的Engine
<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
<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)
<!--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"/>
<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都有多个或者一个webapp,而每个webapp代表一个Context.
Context在创建的时候会先根据tomcat的web.xml文件加载servlet然后根据webapp的web.xml文件加载,在得到请求后根据自己的servlet映射表寻找servlet.
<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>
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>
元素名 | 属性 | 说明 |
Server | port | 指定端口负责监听Tomcat关闭请求 |
shutdown | 指定向端口发送命令的字符串 | |
service | name | 指定servide名字 |
Connector | port | 指定服务器需要的端口号,并监听该端口号请求 |
minProcessors | 服务器启动时最小创建的处理请求的线程数 | |
maxProcessors | 最大的处理请求的线程数 | |
enableLookups | 如果为ture那么调用request.getRemoteHost()时返回DNS查询到的对方主机名。否则返回IP地址 | |
redirectPort | 指定服务器处理http请求收到了SSL传输请求后重定向的端口号 | |
acceptCount | 指定当所有线程都在被使用时,可以放到请求队列中的请求数目,超过该数目就不予处理 | |
connectionTimeout | 连接超时时间ms为单位 | |
Engine | defaultHost | 指定默认的Host主机名,这个Host必须存在 |
Context | docBase | 应用程序路径或者WAR文件路径 |
path | URL路径前缀,如:http://localhost:8080/path/… | |
reloadable | 如果为ture,那么如果WEB-INF中的lib或者classes改变了,那么tomcat会自动重新装载程序,而不是重启tomcat | |
Host | name | 主机名 |
appBase | 指定应用程序存放路径 | |
unpackWARs | true则回京war文件自动解压,否则不解压,直接运行 | |
Logger | className | 指定logger使用的类名,但是必须实现org.apache.catalina.Logger接口 |
prefix | 指定log文件前缀 | |
suffix | 指定log文件后缀 | |
timestamp | true则在log文件上加上时间戳 | |
Realm(表示存放用户名密码以及role的数据库) | className | |
Value(功能跟logger差不多) | prefix | 指定log文件前缀 |
suffix | 指定log文件后缀 | |
directory | 指定log文件存放位置 | |
className | 指定Value使用的类名,如用org.apache.catalina.values.AccessLogValue可以记录应用程序的访问信息 | |
pattern |
通过上面的节点嵌套顺序大致可以看出来,Tomcat处理一个请求的顺序:
假设客户端发起一个请求,地址为:http://localhost:8080/test/index.jsp
1、请求发到服务器的8080端口,被正在监听此端口的Connector获取到
2、Connector把收到的请求交给它所在的Service下的Engine处理,并等待回应
3、Engine得到请求,按照路径找到名为localhost的Host,如果没找到,就交给默认的Host处理。
4、Host接收到请求,并匹配路径为/test的Context,如果找不到就交给名为' 'Context处理
5、path为"/test"的Context收到请求,并在自己的映射表中找到/index.jsp对应的servlet
6、构造HttpServletRequest和HttpServletResponse对象,作为参数传给servlet
7、Context把处理后的HttpServletResponse对象传给Host
8、Host把HttpServletResponse对象传给Engine
9、Engine把HttpServletResponse对象传给Connector
10、Connector把HttpServletResponse对象返回给客户端
整个过程结束。
相关推荐
在Tomcat服务器中,可以通过修改`server.xml`文件中的`Connector`元素来配置服务器的监听端口。对于Tomcat 5.0.30版本来说,默认的HTTP监听端口是8080。如果希望将此端口更改为标准的HTTP端口80,可以在`Connector`...
在Tomcat的`conf`目录下,有两个主要的XML配置文件:`server.xml`和`web.xml`。`server.xml`是Tomcat的主要配置文件,而`web.xml`则定义了应用程序的行为。 在`server.xml`中,我们需要配置`<Connector>`元素来启用...
Executor(线程池)是Tomcat6引入的新特性,允许开发者自定义线程池来处理请求,提高并发性能。在Connector中通过executor属性引用Executor的名字。 5. **Engine**: Engine是处理请求的中心,它可以有多个Host,...
Tomcat 配置文件 web.xml 与 server.xml 解析 Tomcat 配置文件 web.xml 和 server.xml 是 Tomcat 自身的配置文件,用于配置 Tomcat 服务器的行为和性能。在本文中,我们将对 web.xml 和 server.xml 中的主要配置项...
《深入解析Tomcat的server.xml文件》 在Java Web开发中,Tomcat作为一个广泛应用的开源Servlet容器,扮演着至关重要的角色。它的配置核心在于`server.xml`文件,这是Tomcat服务器的主要配置文件,包含了服务器的...
Tomcat server.xml文件的配置直接影响到Tomcat服务器的行为和性能,了解每个配置项的含义及作用是进行Tomcat优化和问题排查的基础。通过适当配置server.xml,可以实现对Tomcat服务器的个性化管理,如增加安全性、...
【Tomcat的Server.xml配置详解】 Tomcat作为广泛使用的Java Servlet容器,其核心配置文件`server.xml`扮演着至关重要的角色。它定义了Tomcat服务器的结构和行为,包括Server、Service、Engine、Host和Context等组件...
本文将深入解析Server.xml的结构和配置要素,帮助读者更好地理解和操作Tomcat服务器。 Server.xml文件是Tomcat的全局配置文件,它定义了服务器的基本架构,包括Server、Service、Connector和Engine等关键组件。下面...
《Tomcat Server.xml配置详解》 Tomcat作为流行的Java应用服务器,其核心配置文件`server.xml`对于理解和管理服务器的运行至关重要。本文将详细解析`server.xml`中的关键元素、属性及其含义,帮助读者深入理解...
Tomcat Server.xml 配置说明 Tomcat Server.xml 文件是 Tomcat 服务器的核心配置文件,它...Tomcat Server.xml 文件是 Tomcat 服务器的核心配置文件,我们可以通过配置这个文件来定义 Tomcat 服务器的整体结构和行为。
在深入探讨Tomcat服务器的`server.xml`配置文件之前,我们先简要了解下Tomcat。Apache Tomcat是一个开源的Servlet容器,主要用来运行Java Servlet和JavaServer Pages(JSP)。`server.xml`是Tomcat的核心配置文件,...
《Tomcat Server.xml的典型配置与优化》 在Java Web应用服务器中,Tomcat以其轻量级、高效能和易用性受到了广泛欢迎。而Server.xml文件是Tomcat的核心配置文件,它定义了服务器的各个组件及其配置,包括端口设置、...
总结而言,`server.xml`的配置涵盖了Tomcat服务器的所有关键方面,从启动参数到网络监听,再到请求处理和日志记录。深入理解并合理配置这些参数,对于提升Tomcat的性能、安全性和稳定性至关重要。
综上所述,`tomcat-server.xml`是Tomcat的核心配置文件,通过对其中各个元素的细致调整,可以优化服务器性能,提升安全性,实现定制化需求。理解和掌握这些配置对于管理和维护高效稳定的Tomcat服务器至关重要。
在Apache Tomcat服务器中,`server.xml`是核心配置文件,它定义了服务器的整体结构、端口设置、数据源、连接器以及其他关键组件。本文将深入解析`server.xml`文件中的各个元素及其重要性,帮助你更好地理解和管理你...
总之,`server.xml` 文件是 Tomcat 配置的核心,通过精细调整这些元素的属性,我们可以定制化 Tomcat 服务器的行为,以满足特定的应用场景需求。理解并熟练掌握 `server.xml` 的配置是优化和管理 Tomcat 服务器性能...
在Apache Tomcat服务器中,`server.xml`是一个至关重要的配置文件,它定义了服务器的基本结构和行为。这个文件位于Tomcat安装目录下的`conf`子目录中,是整个Tomcat配置的核心。本文将深入探讨`server.xml`的各个...
可以通过发送包含指定关闭命令的请求到关闭端口来停止Tomcat服务。 ##### 2. `<Service>` 元素 - **属性详解** - `name`: 服务名称,默认为"Catalina"。 - 内含元素:`<Engine>` 和 `<Connector>`。 ```xml ...
### server.xml常用配置详解 ...通过以上内容可以看出,`server.xml` 文件中的各个元素紧密相连,共同构建了一个功能完整的 Tomcat 服务器环境。了解这些元素的功能及配置选项对于优化服务器性能和配置至关重要。
在探讨Tomcat中`Server.xml`的标签释义时,我们深入分析了构成Tomcat服务器架构的核心组件,包括Server、Service、Connector、Engine以及Host。这些元素协同工作,确保了Tomcat作为应用服务器的高效运行。 ### ...