一.概述

如果将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. spring源码系列8:AOP源码解析之代理的创建

    回顾 首先回顾: JDK动态代理与CGLIB动态代理 Spring中的InstantiationAwareBeanPostProcessor和BeanPostProcessor的区别 我们得知 JDK ...

  2. 特征真的越多越好吗?从特征工程角度看“garbage in,garbage out”

    1. 从朴素贝叶斯在医疗诊断中的迷思说起 这个模型最早被应用于医疗诊断,其中,类变量的不同值用于表示患者可能患的不同疾病.证据变量用于表示不同症状.化验结果等.在简单的疾病诊断上,朴素贝叶斯模型确实发 ...

  3. spring-boot-dependencies、spring-boot-starter-parent、io.spring.platform详解

    上一篇文章介绍了springboot依赖版本号管理的几种方式,现在来详细分析一下spring-boot-dependencies.spring-boot-starter-parent.io.sprin ...

  4. opencv::像素重映射

    像素重映射(cv::remap) 简单点说就是把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去,形成一张新的图像. Remap( InputArray src, // 输入图像 Ou ...

  5. gitlab 提交

    gitlab 提交 Git global setup git config --global user.name "lial" git config --global user.e ...

  6. 图像处理笔记(二十一):halcon在图像处理中的运用

    概要: 分水岭算法做图像分割 二维码识别 稍后将其他几篇笔记全都补充上概要方便查询. 分水岭算法做图像分割 使用距离变换结合分水岭算法实现图像分割,可以用来分割仅通过阈值分割还是有边缘连接在一起的情况 ...

  7. python学习-多线程并发

    1.线程与进程 通俗解释: 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进 ...

  8. 基于SkyWalking的分布式跟踪系统 - 环境搭建

    前面的几篇文章我们聊了基于Metrics的监控Prometheus,利用Prometheus和Grafana可以全方位监控你的服务器及应用的性能指标,在出现异常时利用Alertmanager告警及时通 ...

  9. LaTeX常用篇(二)---上下标/分式/根式/求和/连乘/极限/积分/希腊字母

    目录 1. 序言 2. 上下标 3. 分式 4. 根式 5. 求和和连乘 6. 极限 7. 积分 8. 常用的希腊字母 9. 补充项 更新时间:2019.10.27 增加补充项中的内容 1. 序言   ...

  10. 解决logback不打印mybatis的SQL日志的问题

    工作这么多年,今天还是因为Logback的这个问题稍微卡了一下,惭愧. 问题描述: logback配置了如下信息: <appender name="sql" class=&q ...