Tomcat内部可大致分为HTTP服务器和servlet容器。HTTP将请求转换为容器可以接受的ServletRequest,容器再发出ServetResponse。

从图上你可以看到,最顶层是 Server,这里的 Server 指的就是一个 Tomcat 实例。一个 Server 中有一个或者多个 Service,一个 Service 中有多个连接器和一个容器。连接器与容器之间通过标准的 ServletRequest 和 ServletResponse 通信。

这张图中的连接器就相当HTTP服务器。

连接器

连接器模块用三个核心组件:Endpoint、Processor 和 Adapter 来分别做三件事情,其中 Endpoint 和 Processor 放在一起抽象成了 ProtocolHandler 组件。

EndPoint 是通信端点,即通信监听的接口,是具体的 Socket 接收和发送处理器,是对传输层的抽象,因此 EndPoint 是用来实现 TCP/IP 协议的。

如果说 EndPoint 是用来实现 TCP/IP 协议的,那么 Processor 用来实现 HTTP 协议,Processor 接收来自 EndPoint 的 Socket,读取字节流解析成 Tomcat Request 和 Response 对象,并通过 Adapter 将其提交到容器处理,Processor 是对应用层协议的抽象。

由于协议不同,客户端发过来的请求信息也不尽相同,Tomcat 定义了自己的 Request 类来“存放”这些请求信息。ProtocolHandler 接口负责解析请求并生成 Tomcat Request 类。但是这个 Request 对象不是标准的 ServletRequest,也就意味着,不能用 Tomcat Request 作为参数来调用容器。Tomcat 设计者的解决方案是引入 CoyoteAdapter,这是适配器模式的经典运用,连接器调用 CoyoteAdapter 的 Sevice 方法,传入的是 Tomcat Request 对象,CoyoteAdapter 负责将 Tomcat Request 转成 ServletRequest,再调用容器的 Service 方法。

容器

Tomcat 设计了 4 种容器,分别是 Engine、Host、Context 和 Wrapper。这 4 种容器不是平行关系,而是父子关系。

Context 表示一个 Web 应用程序;Wrapper 表示一个 Servlet,一个 Web 应用程序中可能会有多个 Servlet;Host 代表的是一个虚拟主机,或者说一个站点,可以给 Tomcat 配置多个虚拟主机地址,而一个虚拟主机下可以部署多个 Web 应用程序;Engine 表示引擎,用来管理多个虚拟站点,一个 Service 最多只能有一个 Engine。

Tomcat内部结构相关推荐

  1. Tomcat内部结构及工作原理学习

    概览 Tomcat原本是Servlet/JSP的一个调试工具,后来才发展为一个Servlet/JSP的容器(不要轻视你写的工具,说不定会变成一个有用的轮子呢). Tomcat作为Servlet容器,负 ...

  2. #tomcat#内部结构和处理一个请求的过程(一)

    Tomcat Tomcat是一个JSP/Servlet容器.其作为Servlet容器,有三种工作模式:独立的Servlet容器.进程内的Servlet容器和进程外的Servlet容器. Tomcat的 ...

  3. Tomcat系列(6)——Tomcat处理一个HTTP请求的过程

    Tomcat的架构图   图三:Tomcat Server处理一个HTTP请求的过程 处理HTTP请求过程 假设来自客户的请求为:http://localhost:8080/test/index.js ...

  4. 详解 Tomcat 的连接数与线程池

    原文出处:编程迷思 前言 在使用tomcat时,经常会遇到连接数.线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector). 在前面的文章 详解Tomcat配置文 ...

  5. Tomcat架构解析之3 Connector NIO

    上文简单记录了默认的Connector的内部构造及消息流,同时此Connector也是基于BIO的实现. 除BIO,也可以通过配置快速部署NIO的connector.在server.xml中如下配置: ...

  6. 聊聊Tomcat的架构设计

    2019独角兽企业重金招聘Python工程师标准>>> 微信公众号「后端进阶」,专注后端技术分享:Java.Golang.WEB框架.分布式中间件.服务治理等等. 老司机倾囊相授,带 ...

  7. JVM学习笔记之-方法区,栈、堆、方法区的交互关系,方法区的理解,设置方法区大小与OOM,方法区的内部结构,方法区使用举例

    栈.堆.方法区的交互关系 运行时数据区结构图 从线程共享与否的角度来看 栈,堆,方法区的交互关系 方法区的理解 方法区在哪里? <Java虚拟机规范>中明确说明:"尽管所有的方法 ...

  8. Tomcat学习总结(7)——Tomcat与Jetty比较

    Jetty 基本架构 Jetty目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器. 它有一个基本数据模型,这个数据模型就是 Handler(处理 ...

  9. Jetty与Tomcat的区别 转

    Jetty与Tomcat的区别 由于没有研究过Tomcat,所以区别不好说,这里暂时就网上的一些言论和自己所了解到的一些总结下(摘自于许令波). Jetty 的架构从前面的分析可知,它的所有组件都是基 ...

最新文章

  1. layer 弹不出来_红米k20pro摄像头弹不出来怎么办?昆明小米手机维修教你解决
  2. 【控制】傅里叶系列(二)傅里叶变换的推导
  3. node更新到最新版本_win10怎么更新flash到最新版本「系统天地」
  4. 『奇葩问题集锦』Fedora ubuntu 下使用gulp 报错 Error: watch ENOSPC 解决方案
  5. html单张图片效果,jquery+html5实现单张图片上传预览
  6. html5 css 三角形,css怎么画三角形?
  7. ubuntu14.04安装opencv3.1(亲测)
  8. Python之基础练习题
  9. 我是如何解决jobtracker.info could only be replicated to 0 nodes, instead of 1这个问题的
  10. 运行catia_浅谈CATIA开发——CAA简介
  11. centos php管理面板,CentOS Web Panle控制面板PHP Version Switcher
  12. java一定时间间隔的定时任务_详解java定时任务
  13. rpa操作excel_一文看懂RPA与Excel宏的区别
  14. 小技巧帮助你轻松卸载ie8+还原旧版
  15. 一个测试浏览器速度的网站
  16. 这才是全规格样式车牌识别,秒杀各种“不服”
  17. 推荐《我是谁 – 没有绝对安全的系统》CLAY——Clown Laughing At You「小丑的嘲笑」
  18. 20个大数据可视化大屏模板(评论区附源码)
  19. MATLAB 向量和矩阵
  20. 【新国产化】采用开源技术的云计算厂商,能算国产化品牌吗?

热门文章

  1. 解决Git中的fatal: refusing to merge unrelated histories
  2. 硬核图解!断网了,还能ping通 127.0.0.1 吗?为什么?
  3. 美摄智能生产平台,轻松搞定视频制作——对话美摄科技研发总监黄裔
  4. 音视频技术开发周刊(第126期)
  5. LiveVideoStackCon讲师热身分享 ( 五 ) —— 建立中国自主视频技术生态
  6. 数据结构与算法之KMP算法
  7. 腾讯觅影:AI+医疗不光能诊断癌症,还可以很公益
  8. nginx_lua 学习网站
  9. vscode关闭go语言的黄色波浪线
  10. lua实现多继承-方式1