一.概述

如果将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对象的处理方法,对请求进行逻辑处理,将结果输出到客户端

 

二.整体预览tomcat的更多相关文章

  1. moviepy音视频剪辑:输出文件前预览剪辑和视频帧的preview和imdisplay方法

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 由于moviepy合成剪辑后,输出需要较多的时间,那么在输出前预览一下有助于提高处理效率.moviepy提供了预览的工具,这个工具是基于pygame ...

  2. 怎么在线预览.doc,.docx,.ofd,.pdf,.wps,.cad文件以及Office文档的在线解析方式。

    前言 Office文件在线预览是目前移动化办公的一种新趋势.Office在线预览指的是Office系列的文件在线查看而不依附域客户端的存在.在浏览器或者浏览器控件中可以预览查看Word.PDF.Exc ...

  3. 【krpano】二维码自动生成插件(源码+介绍+预览)

    简介 在krpano生成的全景支持HTML5在手机中展示,而在手机中打开全景网址时不方便,需要输入网址. 最近研究了如何让krpano全景根据自己当前的网址,自动生成二维码,并在电脑浏览时,可以展示出 ...

  4. 玩转Android Camera开发(二):使用TextureView和SurfaceTexture预览Camera 基础拍照demo

    Google自Android4.0出了TextureView,为什么推出呢?就是为了弥补Surfaceview的不足,另外一方面也是为了平衡GlSurfaceView,当然这是本人揣度的.关于Text ...

  5. 对百度WebUploader的二次封装,精简前端代码之图片预览上传(两句代码搞定上传)

    前言 本篇文章上一篇: 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传) 此篇是在上面的基础上扩展出来专门上传图片的控件封装. 首先我们看看效果: 正文 使用方式同 ...

  6. HTML5 CSS3 经典案例:无插件拖拽上传图片 (支持预览与批量) (二)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/31513065 上一篇已经实现了这个项目的整体的HTML和CSS: HTML5 C ...

  7. SLAM+语音机器人DIY系列:(二)ROS入门——10.在实际机器人上运行ROS高级功能预览

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  8. WebRTC 源码分析(二):安卓预览

    有过一定相机开发经验的朋友可能会疑惑,预览还有什么好分析的,不是直接 camera.setPreviewDisplay 或者 camera.setPreviewTexture 就能在 SurfaceV ...

  9. springboot项目文件上传(绝对路径)并使用tomcat虚拟路径进行图片预览

    前言 项目中,需要上传文件,但是可能会比较多,所以不能放入项目目录中,需要指定目录并按顺序放置.并且:还需要这些数据可以预览(图片等). 那么问题就是:上传完成之后我存入服务器,并拿到绝对路径,存入数 ...

随机推荐

  1. javascript input只输入数字和字母

    <input type="text" placeholder="请输入您的用户名..."> <script type="text/j ...

  2. std::weak_ptr

    weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象. 进行该对象的内存管理的是那个强引用的 shared_ptr. weak_ptr只是提供了对管理对 ...

  3. 如何通过 Docker 部署 Logstash 同步 Mysql 数据库数据到 ElasticSearch

    在开发过程中,我们经常会遇到对业务数据进行模糊搜索的需求,例如电商网站对于商品的搜索,以及内容网站对于内容的关键字检索等等.对于这些高级的搜索功能,显然数据库的 Like 是不合适的,通常我们采用 E ...

  4. C#方法的定义、调用与调试

    本节内容 1.方法的由来: 2.方法的定义与调用: 3.构造器(一种特殊的方法): 4.方法的重载(Override): 5.如何对方法进行debug: 6.方法的调用与栈* *推荐书目:CLR vi ...

  5. 《如何学习基于ARM嵌入式系统》笔记整理

    author:Peong time:20190603 如何学习基于ARM嵌入式系统 一.嵌入式系统的概念 从硬件上讲,将外围器件,与CPU集成在一起. 从操作系统上讲,定制符合要求的系统内核 从应用上 ...

  6. < 配置jupyer notebook遇到的问题 - 500 : Internal Server Error >

    < anaconda配置jupyer notebook遇到的问题 - 500 : Internal Server Error > 问题描述: 我的jupyer notebook是在anac ...

  7. 四、pymysql模块、索引和慢查询

    目录 一.pymysql模块 (一)如何使用 (二)sql注入问题 二.索引 (一)主键索引 (二)唯一索引 (三)普通索引 (四)联合索引 (五)不会命中索引的情况 (六)explain (七)索引 ...

  8. Spring MVC(2)Spring MVC 组件开发

    一.控制器接收各类请求参数 代码测试环境: 接收各类参数的控制器--ParamsController package com.ssm.chapter15.controller; @Controller ...

  9. unity 开启外部摄像头

    在unity中建立一个image作为摄像头显示画面,然后通过命令render到image上即可. public WebCamTexture webTex; public string deviceNa ...

  10. js滚动事件

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...