zoukankan      html  css  js  c++  java
  • 二.整体预览tomcat

    一.概述

    如果将tomcat内核高度抽象,则它可以看成由连接器(Connector)组件和容器(Container)组件组成,其中Connector组件负责在服务器端处理客户端链接,包括接受客户端链接、接受客户端的消息报文以及消息报文的解析工作,而Container组件负责对客户端的请求进行逻辑处理,并把结果返回给客户端,包括四个级别的容器:Engine组件、Host组件、Context组件和Wrapper组件。容器也是整个tomcat的核心。

        1.Server组件
        Server是最顶级的组件,代表Tomcat的运行实例,在一个JVM中只会包含一个。在Server的整个生命周期中,不同阶段会有不同的事情发生,为了方便扩展,它引入了监听器的方式,所以它也包含了Listener组件,为了方便集成JNDI,引入了GlobalNamingResource组件,同时也包含了Service核心组件。
        2.Service组件
        Service是服务的抽象,它代表请求从接收到处理的所有组件的集合。设计上Server可以包含多个Service组件,每个Service组件都包含若干用于接收客户端消息的Connector组件和用于处理请求的Engine组件。不同的Connector组件使用不同的通信协议(Http、AJP)若干Connector组件和一个客户端请求处理组件Engine组成的集合即为Service.Service组件还包含了若干Executor组件,每个Executor都是一个线程池,它可以为Service内所有组件提供线程池执行任务。
        3.Connector组件
        Connector主要职责是接受客户端链接并接受消息报文,消息报文经由它解析后送往容器中处理
        4.Engine组件
        Tomcat内部有4个级别的容器,分别是Engine、Host、Context和Wrapper
        Engine代表全局Servlet引擎。每个Service组件只能包含一个Engine容器组件,但Engine组件可以包含若干Host容器组件
         还包括Listener组件:在Tomcat生命周期中完成某些Engine容器相关工作的监听
        AccessLog组件:客户端的访问日志,所有客户端访问都会被记录
        Cluster组件:它提供集群功能,将Engine容器需要共享的数据同步到集群中的其他Tomcat实例上
        Pipeline组件:Engine容器对请求进行处理的管道。
        5.Host组件
        Tomcat中Host组件代表是虚拟主机,这些虚拟主机可以存放若干Web应用的抽象(Context容器)。除了Context组件外,还包括
        Listener组件:在Tomcat生命周期中完成某些Engine容器相关工作的监听
        AccessLog组件:客户端的访问日志,所有客户端访问都会被记录
        Cluster组件:它提供集群功能,将Engine容器需要共享的数据同步到集群中的其他Tomcat实例上
        Pipeline组件:Host容器对请求进行处理的管道。
        6.Context组件
        Context组件是Web应用的抽象,开发的Web应用部署到Tomcat后运行就会转化成Context对象。主要包含了各种静态资源、若干Servlet以及各种其他动态资源
        Listener组件:在Tomcat生命周期中完成某些Engine容器相关工作的监听
        AccessLog组件:客户端的访问日志,所有客户端访问都会被记录
        7.Wrapper组件
        Wrapper容器是Tomcat中4个级别的容器中最小的,与之对应的是Servlet,一个Wrapper对应一个Servlet,主要包括
        Servlet组件:Servlet即Web应用开发常用的Servlet,我们会在Servlet中编写好请求的逻辑处理。

    ①Tomcat启动后,Connector组件的接收器(Acceptor)将会监听是否有客户端套接字连接并接受Socket

    ②监听到客户端连接,将连接交给线程池Executor处理,开始执行请求响应任务

    ③HttpllProcessor组件负责从客户端连接中读取消息报文,然后解析HTTP的请求行、请求头部、请求体。将解析后的报文组装成Request对象,方便日后通过Request对象

    获取HTTP协议的相关值

    ④Mapper组件根据HTTP协议请求行的URL属性值和请求头部的Host属性值匹配由哪个Host容器、哪个Context容器。哪个Wrapper容器处理请求。就是根据请求从Tomcat

    中找到对应的Servlet。然后将结果保存到Request对象中,方便后面处理时通过Request对象选择容器

    ⑤CoyoteAdaptor组将负责将Connector组件和Engine容器链接起来,把处理过程生成的Request和Response传递到Engine容器,调用他的管道。

    ⑥Engine容器的管道开始处理请求,管道包含若干阀门(Value),每个阀门负责某些处理逻辑。用xxxvalue代表阀门,可以根据自己的需要往这个阀门中添加多个阀门,首先

    执行这个xxxValue,然后才执行基础阀门EngineValue,负责调用Host容器的管道

    ⑦Host容器的管道开始处理请求,首先执行这些阀门,然后执行基础阀门HostValue,他继续往下调用Context容器的管道

    ⑧Context容器的管道开始处理请求,首先执行这些阀门,然后执行基础阀门ContextValue,他继续往下调用Wrapper容器的管道

    ⑨Wrapper容器的管道开始处理请求,首先执行这些阀门,然后执行基础阀门WrappertValue,它会执行该Wrapper容器对应的Servlet对象的处理方法,对请求进行逻辑处理,将结果输出到客户端

     

  • 相关阅读:
    自动化测试(Selenium+python)-环境搭建
    Jenkins默认插件
    Jenkins安装
    jdk环境变量配置
    RobotFramework使用chrome打开浏览器,提示chromedriver.exe停止运行
    Java之获取年月日时分秒字符串
    JavaScript验证输入是否为空
    轮播图简单实现(转载)
    CSS设置元素背景为半透明, 而其中的内容为不透明
    Hibernate的update() 无效
  • 原文地址:https://www.cnblogs.com/xwzp/p/10510539.html
Copyright © 2011-2022 走看看