目录接口

功能组件

Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container。其中连接器和容器相辅相成,多个 Connector 和一个 Container 一起构成了基本的 web 服务 Service。每个 Server可以管理多个 Service,整个 Tomcat 的生命周期由 Server 控制。

Connector:负责对外接收反馈请求。是tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理。最后将容器处理后的结果反馈给外界。

Container:负责对内处理业务逻辑。内部由Engine、Host、Context、Wrapper四个容器组成,用于管理和调用Servlet相关逻辑。

Service:对外提供的Web服务。主要包含连接器和容器两个核心组件,以及其他功能组件,Tomcat可以管理多个Service,且各Service之间相互独立。

Tomcat 还有其它重要的组件,如安全组件 security、logger 日志组件、session、mbeans、naming 等其它组件。这些组件共同为 Connector 和 Container 提供必要的服务

Connector

1,监听网络端口,接收和响应网络请求

Connector 最重要的功能就是接收连接请求然后分配线程让 Container 来处理这个请求

2,将收到的请求(网络字节流)转换成Request 和Response,分配线程来处理,同时将Request 和 Response 传给线程,处理这个请求的线程是在 Container 容器中(Container 将请求转换为ServletRequest ,ServletResponse)完成处理。

请求处理时序图:

Container

每个 Service 会包含一个容器。容器由一个引擎可以管理多个虚拟主机。每个虚拟主机可以管理多个 Web 应用。每个 Web 应用会有多个 Servlet 包装器。Engine、Host、Context 和 Wrapper,四个容器之间属于父子关系。

通常一个 Servlet class 对应一个 Wrapper。

Engine:引擎,管理多个虚拟主机,子容器是Host。

Host:虚拟主机,负责Web应用的部署。Host 是 Engine 的字容器,一个 Host 在 Engine 中代表一个虚拟主机,这个虚拟主机的作用就是运行多个应用,它负责安装和展开这些应用,并且标识这个应用以便能够区分它们。它的子容器通常是 Context,它除了关联子容器外,还有就是保存一个主机应该有的信息。

Context:Web应用,包含多个Servlet封装器。Context 最重要的功能就是管理它里面的 Servlet 实例,Servlet 实例在 Context 中是以 Wrapper 出现的,还有一点就是 Context 如何才能找到正确的 Servlet 来执行它呢? Tomcat5 以前是通过一个 Mapper 类来管理的,Tomcat5 以后这个功能被移到了 request 中,在前面的时序图中就可以发现获取子容器都是通过 request 来分配的。

Wrapper:封装器,容器的最底层,没有子容器,Wrapper 代表一个 Servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。

容器的请求处理过程就是在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑。各容器都会有一个通道 Pipeline,每个通道上都会有一个 Basic Valve(如StandardEngineValve), 类似一个闸门用来处理 Request 和 Response 。其流程图如下。

Engine 和 Host 处理请求的时序图:

Context 和 wrapper 的处理请求时序图:

从 Tomcat5 开始,子容器的路由放在了 request 中,request 中保存了当前请求正在处理的 Host、Context 和 wrapper。

Tomcat请求整体处理:

假设客户端发送请求:http://mp.csdn.net/postedit/hello.jsp

请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得

1)Connector的主要任务是负责接收浏览器的发过来的 tcp 连接请求,创建一个 Request 和 Response 对象分别用于和请求端交换数据,然后会产生一个线程来处理这个请求并把产生的 Request 和 Response 对象传给处理这个请求的线程
2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
3) Engine获得请求mp.csdn.net/postedit/hello.jsp,匹配它所拥有的所有虚拟主机Host
4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
5) localhost Host获得请求/postedit/hello.jsp,匹配它所拥有的所有Context
6) Host匹配到路径为/hello.jsp的Context(如果匹配不到就把该请求交给路径名为”"的Context去处理)
7) path=”/postedit”的Context获得请求/postedit/hello.jsp,在它的mapping table中寻找对应的servlet
8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
10)Context把执行完了之后的HttpServletResponse对象返回给Host
11)Host把HttpServletResponse对象返回给Engine
12)Engine把HttpServletResponse对象返回给Connector
13)Connector把HttpServletResponse对象返回给客户browser

Tomcat原理整理相关推荐

  1. tomcat原理及调优

    TOMCAT原理详解及请求过程 Tomcat: Tomcat是一个JSP/Servlet容器.其作为Servlet容器,有三种工作模式:独立的Servlet容器.进程内的Servlet容器和进程外的S ...

  2. tomcat原理简要分析,java

    tomcat原理 tomcat位置 tomcat实际上是部署在服务器上的: tomcat作用 tomcat服务器是一个Servlet和JSP容器,它响应HTML页面的访问请求. 实际上Tomcat是A ...

  3. Tomcat 原理篇

    TOMCAT 原理篇 一.Tomcat 组成(Tomcat 由以下组件组成) 1.server a) Server是一个Catalina Servlet容器: b) Server 可以包含一个或多个s ...

  4. IDEA/Tomcat 原理:如何将 Tomcat 集成到 IDEA?实现由传统部署延伸到热部署 Java EE 项目?

    文章目录 前言 一.将 Tomcat 集成到 IDEA 中 1.1.进入 IDEA Tomcat 配置页面 1.2.配置并集成 Tomcat 1.3.配置完成说明 1.4.集成检查 1.4.1.检查主 ...

  5. 计算机原理语言方框图,计算机原理整理原版1.10.docx

    计算机原理整理原版1.10 第二章2.2将下列十进制数表示成浮点规格化数,阶码3位,用补码表示:尾数9位,用补码表示.(1)27/6401000000=0.0110110=0.11011×2-1 规格 ...

  6. (转)内存整理的原理 整理自CSDN

    内存整理的原理 整理自CSDN 拓荒时代 国内的程序员大多是在 Java 语言中第一次感受到垃圾收集技术的巨大魅力的,许多人也因此把 Java 和垃圾收集看成了密不可分的整体.但事实上,垃圾收集技术早 ...

  7. 无刷电机无感六步方波驱动原理整理以及过零现象产生分析

    无刷电机无感六步方波驱动原理整理以及过零现象产生分析 1.序言 近期在琢磨关于无刷电机驱动,发现在谈论无感六步方波驱动时,都只是提及到会有这么一个过零现象,而没有具体分析为什么,根据本人有限的电磁学理 ...

  8. Tomcat原理和源码分析

    Tomcat是什么? 首先看下官网的解释说明(看不懂的可以翻译一下),从第一句Tomcat是Java Servlet,JavaServer页,Java表达式语言和Java的WebSocket技术的一个 ...

  9. Tomcat原理系列之四:Tomat如何启动spring(加载web.xml)

    Tomcat原理系列之四:Tomat如何启动spring 熟悉的web.xml ContextLoaderListener Tomcat的初始化StandardContext.startInterna ...

  10. IDEA部署tomcat原理小解

    IDEA部署tomcat原理小解 最近看到一个视频对IDEA部署启动tomcat有了新的理解.下面和大家分享一下.  1.tomcat部署项目的三种方式  在纯tomcat环境下,不使用开发工具tom ...

最新文章

  1. 【C++】多线程与并发【一】
  2. 几行 Python 代码实现邮件解析,超赞~
  3. 这个AI让马斯克头秃,还能帮他设计特斯拉
  4. visual studio 不能创建biztalk 项目
  5. c#:winform鼠标拖动窗口大小时,设定窗口最小尺寸
  6. c#读取string类型的xml格式的字符串
  7. STL源码剖析 数值算法 copy_backward 算法
  8. Linphone编译【转载】
  9. 海南大学植物代谢组学技术开发与创新应用课题组博士后招聘
  10. 鸿蒙os在3月底推送,华为鸿蒙OS Beta 3将从3月31日起推送
  11. 企业与黑客攻击 就是一场军备竞赛
  12. pycharm出现乱码
  13. sas python接口_全方位比较3种数据科学工具:Python、R和SAS(附链接)
  14. Struts框架命名空间问题答疑
  15. php url伪静态,PHP url伪静态
  16. kux格式如何无损转换为MP4格式
  17. 微软应用商店Ubuntu 20.04 LTS打开0x8007019e错误解决
  18. Tumblr,instapaper分享
  19. Flashpaper序列号(Flashpaperamp;nbs…
  20. 吐血总结~ 计算机网络基础汇总

热门文章

  1. 不容错过的5款黑科技软件,建议收藏转发
  2. 视觉slam十四讲 pdf_视觉SLAM十四讲——第三章 李群与李代数 课后作业amp;手推...
  3. 台式机linux系统安装教程,台式机Linux/Unix多系统安装详细教程
  4. 超星章节内ppt课件下载
  5. Makefile入门教程
  6. 科比职业生涯数据集分析
  7. php 斜杠日期 转日期,php日期转时间戳 指定日期转换成时间戳
  8. H5个人博客模板分享
  9. 4.27 前端开发日报
  10. Excel表格数据生成ECharts图表