Tomcat内部结构
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内部结构相关推荐
- Tomcat内部结构及工作原理学习
概览 Tomcat原本是Servlet/JSP的一个调试工具,后来才发展为一个Servlet/JSP的容器(不要轻视你写的工具,说不定会变成一个有用的轮子呢). Tomcat作为Servlet容器,负 ...
- #tomcat#内部结构和处理一个请求的过程(一)
Tomcat Tomcat是一个JSP/Servlet容器.其作为Servlet容器,有三种工作模式:独立的Servlet容器.进程内的Servlet容器和进程外的Servlet容器. Tomcat的 ...
- Tomcat系列(6)——Tomcat处理一个HTTP请求的过程
Tomcat的架构图 图三:Tomcat Server处理一个HTTP请求的过程 处理HTTP请求过程 假设来自客户的请求为:http://localhost:8080/test/index.js ...
- 详解 Tomcat 的连接数与线程池
原文出处:编程迷思 前言 在使用tomcat时,经常会遇到连接数.线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector). 在前面的文章 详解Tomcat配置文 ...
- Tomcat架构解析之3 Connector NIO
上文简单记录了默认的Connector的内部构造及消息流,同时此Connector也是基于BIO的实现. 除BIO,也可以通过配置快速部署NIO的connector.在server.xml中如下配置: ...
- 聊聊Tomcat的架构设计
2019独角兽企业重金招聘Python工程师标准>>> 微信公众号「后端进阶」,专注后端技术分享:Java.Golang.WEB框架.分布式中间件.服务治理等等. 老司机倾囊相授,带 ...
- JVM学习笔记之-方法区,栈、堆、方法区的交互关系,方法区的理解,设置方法区大小与OOM,方法区的内部结构,方法区使用举例
栈.堆.方法区的交互关系 运行时数据区结构图 从线程共享与否的角度来看 栈,堆,方法区的交互关系 方法区的理解 方法区在哪里? <Java虚拟机规范>中明确说明:"尽管所有的方法 ...
- Tomcat学习总结(7)——Tomcat与Jetty比较
Jetty 基本架构 Jetty目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器. 它有一个基本数据模型,这个数据模型就是 Handler(处理 ...
- Jetty与Tomcat的区别 转
Jetty与Tomcat的区别 由于没有研究过Tomcat,所以区别不好说,这里暂时就网上的一些言论和自己所了解到的一些总结下(摘自于许令波). Jetty 的架构从前面的分析可知,它的所有组件都是基 ...
最新文章
- layer 弹不出来_红米k20pro摄像头弹不出来怎么办?昆明小米手机维修教你解决
- 【控制】傅里叶系列(二)傅里叶变换的推导
- node更新到最新版本_win10怎么更新flash到最新版本「系统天地」
- 『奇葩问题集锦』Fedora ubuntu 下使用gulp 报错 Error: watch ENOSPC 解决方案
- html单张图片效果,jquery+html5实现单张图片上传预览
- html5 css 三角形,css怎么画三角形?
- ubuntu14.04安装opencv3.1(亲测)
- Python之基础练习题
- 我是如何解决jobtracker.info could only be replicated to 0 nodes, instead of 1这个问题的
- 运行catia_浅谈CATIA开发——CAA简介
- centos php管理面板,CentOS Web Panle控制面板PHP Version Switcher
- java一定时间间隔的定时任务_详解java定时任务
- rpa操作excel_一文看懂RPA与Excel宏的区别
- 小技巧帮助你轻松卸载ie8+还原旧版
- 一个测试浏览器速度的网站
- 这才是全规格样式车牌识别,秒杀各种“不服”
- 推荐《我是谁 – 没有绝对安全的系统》CLAY——Clown Laughing At You「小丑的嘲笑」
- 20个大数据可视化大屏模板(评论区附源码)
- MATLAB 向量和矩阵
- 【新国产化】采用开源技术的云计算厂商,能算国产化品牌吗?
热门文章
- 解决Git中的fatal: refusing to merge unrelated histories
- 硬核图解!断网了,还能ping通 127.0.0.1 吗?为什么?
- 美摄智能生产平台,轻松搞定视频制作——对话美摄科技研发总监黄裔
- 音视频技术开发周刊(第126期)
- LiveVideoStackCon讲师热身分享 ( 五 ) —— 建立中国自主视频技术生态
- 数据结构与算法之KMP算法
- 腾讯觅影:AI+医疗不光能诊断癌症,还可以很公益
- nginx_lua 学习网站
- vscode关闭go语言的黄色波浪线
- lua实现多继承-方式1