一.概述

如果将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中For循环以及For循环嵌套实例

    JavaScript中For循环实例 1.打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身. 例如:153是一个 ...

  2. POST PUT 小解

    POST 主要是用来提交数据让服务器进行处理的,PUT主要是请求数据的. POST 提交的数据放在HTTP正文里面,而PUTT提交的数据放在url里面.

  3. python-url中中文编码与解码

    接口测试中遇到这种情况:get请求的传参有中文,以致url中有中文编码. 下面是常见的一种编码解码方式: from urllib.request import quote, unquote url = ...

  4. 9.Nginx常用模块

    1.nginx开启目录浏览 提供下载功能 默认情况下,网站返回index指定的主页,若该网站不存在主页,则将请求交给autoindex模块 如果开启autoindex模块,则提供一个下载的页面, 如果 ...

  5. javascript学习总结之对象的深拷贝和浅拷贝

    前言 最近在写ES6的文章的时候发现重复遇到关于javascript深拷贝和浅拷贝的问题,然后查找了一些资料,根据资料和自己的理解做了以下笔记,毕竟javascript关于深拷贝和浅拷贝的问题在一些面 ...

  6. VMware安装和linux(centos7)系统安装

    下载centos系统ISO镜像 安装linux系统和winsdows安装系统一样,需要系统文件.浏览器访问centos官网进行下载,http://www.centos.org,因为是国外网站所有下载速 ...

  7. MD5收集整理

    MD5如何生成的 百度百科 生成MD5 1.通过摘要生成MD5 MessageDigest md = MessageDigest.getInstance("MD5"); md.up ...

  8. 基于 HTML5 + Canvas 实现的楼宇自控系统

    前言 楼宇自控是指楼宇中电力设备,如电梯.水泵.风机.空调等,其主要工作性质是强电驱动.通常这些设备是开放性的工作状态,也就是说没有形成一个闭环回路.只要接通电源,设备就在工作,至于工作状态.进程.能 ...

  9. [Next] Next.js+Nest.js实现GitHub第三方登录

    GitHub OAuth 第三方登录 第三方登录的关键知识点就是 OAuth2.0 . 第三方登录,实质就是 OAuth 授权 . OAuth 是一个开放标准,允许用户让第三方应用访问某一个网站的资源 ...

  10. VS运行遇到的那些坑

    今天运行VS项目好好的,就是安装了VS2019后,就出现了无法连接到IIS服务器,这个问题,然后各种办法都试了无效. 解决方法: 1.删除根目录的.vs文件,然后重新生成. 2.修改调试这里的IP改为 ...