一.概述

如果将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. [POJ3107] Godfather - 暴力枚举(树的重心)

    Godfather Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8728   Accepted: 3064 Descrip ...

  2. POJ 1258 Agri-Net(Prim)

    题目网址:http://poj.org/problem?id=1258 题目: Agri-Net Time Limit: 1000MS   Memory Limit: 10000K Total Sub ...

  3. TCC推导过程

    svn 账号 yuanzn 密码:TCH5mb 项目分层 MapperDao 数据校验 throw new CloudBaseRuntimeException Helper 数据转换 manager ...

  4. url中常见符号说明

    如:http://10.1.1.71:9999/auditcenter/api/v1/auditPlanList?pageSize=20&page=1 ?:分隔实际的url和参数 & ...

  5. 11.Nginx架构进阶

    1.如何将LNMP拆分为LNP+MySQL 1.备份172.16.1.7上的数据库信息 [root@web01 ~]# mysqldump -uroot -p'000000' --all-databa ...

  6. 百万年薪python之路 -- 内置函数练习

    1.整理今天笔记,课上代码最少敲3遍. 2.用列表推导式做下列小题 过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母 lst = [["a","b"],[ ...

  7. axios reponse请求拦截以及token过期跳转问题

    前两天项目中遇到了token拦截,需要在请求的header头里放置token,需要用到response拦截,调试过程中遇到了拿不到token的问题 我用的axios实例 let token = sto ...

  8. spring boot配置Servlet容器

    Spring boot 默认使用Tomcat作为嵌入式Servlet容器,只需要引入spring-boot-start-web依赖,默认采用的Tomcat作为容器 01  定制和修改Servlet容器 ...

  9. SpringBoot系列教程之Bean之指定初始化顺序的若干姿势

    上一篇博文介绍了@Order注解的常见错误理解,它并不能指定 bean 的加载顺序,那么问题来了,如果我需要指定 bean 的加载顺序,那应该怎么办呢? 本文将介绍几种可行的方式来控制 bean 之间 ...

  10. PCES - alpha阶段测试报告

    测试计划 测试目的 本测试目的在于测试项目完成情况,以及分析测试结果,为下一轮开发提供解决方案 测试项目 学生用户登录测试 课程信息检索测试 服务器测试 在测试过程中出现的Bug 用户界面间的跳转逻辑 ...