zoukankan      html  css  js  c++  java
  • Tomcat学习(一) Tomcat结构以及处理一个请求的过程(转载忘了出处)

    1. Tomcat结构
    Tomcat是一个基于组件的服务器,它的构成组件都是可配置的,其中最外层的组件是Catalina Servlet容器,其他的组件按照一定的格式要求配置在这个顶层容器中。Tomcat的各个组件是在<TOMCAT_HOME>\conf\server.xml文件中配置的,Tomcat服务器默认情况下对各种组件都有默认的实现,下面通过分析server.xml文件来理解Tomcat的各个组件是如何组织的。server.xml文件的基本组成结构如下。


    XML配置文件结构
    <Server>                     顶层类元素:一个配置文件中只能有一个<Server>元素,可包含多个Service。
        <Service>                顶层类元素:本身不是容器,可包含一个Engine,多个Connector。
            <Connector/>         连接器类元素:代表通信接口。
               <Engine>   容器类元素:为特定的Service组件处理所有客户请求,可包含多个Host。
                  <Host>    容器类元素:为特定的虚拟主机处理所有客户请求,可包含多个Context。
                     <Context>   容器类元素:为特定的Web应用处理所有客户请求。
                     </Context>
                   </Host>
                  </Engine>
         </Service>
    </Server>

    1)Service
    Service组件是一些Connector组件的集合,它本身不是一个容器,所以在这里不能定义日志等组件。一个Service组件中只能有一个Engine组件,可以包含多个Connector组件。

    2)Connector组件
    Connector组件表示一个接口,通过这个接口接收客户的请求,然户发送给其他的容器组件,最后再把服务器的响应结果传递给客户。

    3) Engine, Host和context
    上面介绍的3个组件本身并不能处理客户请求,也不能生成响应。在Tomcat中只有3个组件是可以处理客户请求并生成响应的,这3个组件分别是 Engine、Host和Context组件。这3个组件分别代表了不同的服务范围,通过嵌套关系可以知道3个组件的范围有如下的关系:Engine>Host>Context。
    a.Engine组件下可以包含多个Host组件,它为特定的Service组件处理所有客户请求。
    b.一个Host组件代表一个虚拟主机,一个虚拟主机中可以包含多个Web应用(Context组件)。
    c.Context组件代表一个Web应用。
    Tomcat的各个组件关系,可以用下图描述。

    2. Tomcat处理一个HTTP请求的过程
    假设来自客户的请求为: http://localhost:8080/wsota/wsota_index.jsp
    1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
    2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
    3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
    4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
    5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
    6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
    7) path="/wsota"的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet
    8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
    9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
    10)Context把执行完了之后的HttpServletResponse对象返回给Host
    11)Host把HttpServletResponse对象返回给Engine
    12)Engine把HttpServletResponse对象返回给Connector
    13)Connector把HttpServletResponse对象返回给客户browser

  • 相关阅读:
    spring-pool.xml
    spring-jmx.xml
    spring-common.xml
    applicationContext.xml
    spring-webservice.xml
    webservice统一认证
    jdbc.properties
    oracle,mysql分页
    springmvc-servlet.xml
    四、用“”或构造函数创建Java的String区别
  • 原文地址:https://www.cnblogs.com/xzpp/p/2550473.html
Copyright © 2011-2022 走看看