`
什么都不懂的孩子
  • 浏览: 26924 次
社区版块
存档分类
最新评论

通过server.xml来了解Tomcat结构及处理请求流程

 
阅读更多

<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.
     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
  -->
     全局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"
              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.
       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
    -->
     一个Connector代表一个访问点,监听某个端口,接受请求(请求交给指定的Engine处理)和返回应答。有两种Connector,一种是处理Browser的http请求,另一个监听来自其他webService请求(Apache)
    <Connector port="8080" protocol="HTTP/1.1"
              
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
         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" />
    -->
     接受来自其他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的请求,下面可以包含多个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">

     
<!--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都有多个或者一个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 &quot;%r&quot; %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对象返回给客户端
整个过程结束。

 
 
 
 
 
 
 
  • 大小: 370.6 KB
2
1
分享到:
评论
2 楼 戢_时光 2015-10-13  
好文章!    
1 楼 cywhoyi 2015-10-13  
从这个维度看Tomcat挺好的

相关推荐

    Tomcat 服务器server.xml的关键参数配置

    说明:以下文字均以tomcat5.0.30为例进行。 1,配置tomcat服务器访问端口,只需配置Connector的port端口即可。Tomcat默认为8080,现修改port参数值为80。

    tomcat服务器的Server.xml配置详解.docx

    Connector 的主要功能,是接收连接请求,创建Request和Response对象...然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。通过配置Connector,可以控制请求Service的协议及端口号。

    tomcat中的几点配置说明

    在tomcat配置文件server.xml中的&lt;Connector ... /&gt;配置中,和连接数相关的参数有: minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10 maxProcessors:最大连接线程数,即:并发处理的最大请求...

    tomcat&http笔记.pdf

    Browser/Server 浏览器/服务器 访问服务器资源不需要专门安装客户端软件,而是直接通过浏览器访问服务器资源. 例如: 天猫、京东、知乎网站 开发者通过web服务器可以把...进入Tomcat安装目录/conf/server.xml 文件修改

    nginx+tomcat7+session共享 kryo序列化所需要包

    2.修改每台tomcat的conf目录下得context.xml文件或者server.xml文件,在其中加入如下任意一段代码(注意:当使用多台tomcat时,一定要使用non-sticky模式): ... &lt;Manager className="de.javakaffee.web.msm....

    详解tomcat 解决 POST请求传参数过长受限制的问题

    POST请求本身并未限制传入参数大小,是tomcat 容器设置了接收参数大小的限制 解决过程: vim server.xml &lt;Connector port=8080 protocol=HTTP/1.1 connectionTimeout=2000 redirectPort=8443 URIEncoding=UTF...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很...

    apache-tomcat-9.0.31-windows-x64.zip

    Tomcat的目录结构: bin: startup.bat shutdown.bat startup.sh shutdown.sh conf: tomcat运行时所需要的配置文件。 注意: server.xml (配置tomcat端口) connectionTimeout="20000" ...

    tomcat8get请求url格式问题

    解决方式进入tomcat的server配置中进行添加参数配置 connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" relaxedPathChars="[]{}|\\^" relaxedQueryChars="[]{}|\\^" /&gt;

    tomcat-sr:Tomcat启动脚本,配置文件,源码剖析

    requestProcess.pdf-Tomcat请求处理流程序列图(2014.10.28-2014.10.29) 架构/-Tomcat服务器的架构结构和设计(2014.10.29-2014.10.29) server.xml-Tomcat容器配置文件(2014.10.29-) config /-Tomcat配置引用...

    Web服务器三剑客运维配置实战 Nginx+JVM+Tomcat+HTTP协议.zip

    ├─5.05 tomcat运维-server.xml配置文件注释.mp4 ├─5.06 tomcat运维-web站点部署.mp4 ├─5.07 tomcat运维-部署开源站点.mp4 ├─5.08 tomcat运维-tomcat优化.mp4 ├─5.09 tomcat运维-tomcat性能优化.mp4 ├─...

    myTomcat:WebServer + Tomcat源码分析总结

    来自《深入剖析Tomcat》 HTTP请求流程-&gt;初始日期一个HTTP请求...析server.xml文件,获取所有对象 StandardServer的初始化(),start()方法调用所有的服务组件(数组)StandardService的初始化(),start()方法,

    Tomcat面试专题及答案.pdf

    maxThreads=”150”//Tomcat 使用线程来处理接收的每个请求。这个值表示 Tomcat 可创建的最大的线程数。默认值 200。可以根据机器的时期性能和内存 大小调整,一般可以在 400-500。最大可以在 800 左右。 ...

    JavaWeb程序Tomcat及Servlet配置:实例与组件包-zip压缩包

    Tomcat的server.xml文件是主要的配置文件,其中定义了上述的各种设置。 Servlet: Servlet是JavaWeb应用程序的一部分,它扩展了服务器的功能。 Servlet用于处理客户端的请求并生成动态Web内容。 Servlet的生命周期由...

    最简化tomcat设计,socket,web服务器

    3,截取请求的url进行处理,判断是请求的静态页面还是servlet(自己编写的一个接口) 4,如果访问的是sevlet,则使用类加载器,根据configServlet.xml中配置的参数,查找对应的class,载入 5,最后执行方法. 6,可扩展...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很...

    tomcat-8.0.47,优化过后的tomcat

    我已将请求参数设置无限大。如需限制。请自行改动server.xml, maxPostSize="-1"设置为你需要的大小即可。-1为不限制

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很...

Global site tag (gtag.js) - Google Analytics