IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Tomcat -- 整体架构 -> 正文阅读

[Java知识库]Tomcat -- 整体架构

HTTP工作原理

● 规定浏览器和服务器之间的数据传输协议,基于TCP/IP协议传递数据,不涉及数据包的传输,主要规范了客户端与服务器端的通信格式

一个请求流程

其中tomcat主要参与接受连接,解析请求数据,处理请求,发送响应结果
在这里插入图片描述

  1. 用户通过浏览器进行操作,点击链接等,浏览器获取到这个事件
  2. 浏览器向服务器发出TCP链接请求
  3. 服务程序接收浏览器的请求,通过TCP三次握手建立连接(linux底层握手)
  4. 连接成功后,浏览器将请求数据打包成一个HTTP协议格式的数据包
  5. 浏览器将该数据包推入网络中,数据包经过网络传输,最终达到服务端程序
  6. 服务端程序拿到这个数据包,同样用HTTP协议格式解析,获取到客户端的操作意图(tomcat连接器,封装Request对象)
  7. 根据客户端的操作意图进行处理,提供数据
  8. 服务器将处理响应结果用HTTP再次打包
  9. 服务器将该数据包推入网络中,数据包经过网络传输,最终达到客户端浏览器
  10. 浏览器拿到数据包后,以http协议的格式解析,比如得到html
  11. 浏览器将html展示给用户

Tomcat整体架构

在这里插入图片描述

Http服务器请求处理

● http服务器不直接调用业务类,把请求交给Servlet容器来处理
● 容器通过servlet接口调用业务类,实现http服务器与业务类解耦
在这里插入图片描述

servlet容器工作过程

● 客户端请求某个资源的时候,http服务器会用一个ServletRequest对象把客户端的请求信息封装起来,调用Servlet容器的service方法
● Servlet容器拿到请求后,根据请求的URL和Servlet的映射关系,找到相应的处理的Servlet
● 如果此时Serlvet容器还没有被加载就会通过反射机制创建这个Servlet,并调用其init方法完成初始化
● 而后调用Servlet的service方法来处理请求
● service处理的结果会被封装到ServletResponse对象中返回给HTTP服务器
● http服务器将响应结果发送给客户端
在这里插入图片描述

tomcat两个核心

● 连接器(Connector):负责对外连接。处理Socket连接,负责网络字节流与Request和Response对象的转化
● 容器(Container):负责内部处理。加载和管理Servlet,处理具体Request请求
在这里插入图片描述

连接器Connector

Coyote

● tomcat中连接器框架,是tomcat服务器提供客户端访问的外部接口
● 客户端通过Coyote与服务器实现 建立连接、发送请求、接收响应
在这里插入图片描述

Coyote与Catalina容器的交互

● Coyote封装了底层网络通信(Socket),为Catalina容器提供统一的接口,使Catalina容器与具体的请求协议和IO操作完全解耦
● Coyote只负责具体协议和IO相关操作,与Servlet规范没有直接关系,Request和Response对象也是在Catalina中对其进一步封装为ServletRequest和ServletResponse
● Coyote将Socket输入的对象封装为Request对象,Servlet相关都交给Catalina处理,由Catalina容器进行请求处理,实现组件之间解耦
● 请求处理完成,Catalina通过Coyote提供的Response将结果写入输出流
在这里插入图片描述

支持的IO模型与协议

IO模型

IO模型描述
BIO阻塞IO,tomcat8.5之后移除了对的该IO模型的支持
NIO非阻塞IO,javaNIO类库实现
NIO2异步IO,NIO2类库实现
APR使用Apache可移植运行库实现,需要单独安装APR库

应用层协议

应用层协议描述
HTTP/1.1大部分web协议采用
HTTP/2.0tomcat8.5之后版本支持,大幅度提醒web性能
AJP用于与web服务器集成,实现对静态资源的优化及集群部署

连接器组件

在这里插入图片描述

组件作用
EndPointEndpoint是Coyote通信端点,即通信监听的接口,是具体socket接收和发送处理器,是对传输层的抽象; Endpoint用来实现TCP/IP协议
ProcessorProcessor是Coyote协议处理接口,用来实现Http协议;Processor接收来自EndPoint的Socket,读取字节流解析成的Tomcat Request和Response对象,并通过Adapter适配交给容器处理;Processor是对应应用层协议的抽象
ProtocolHandler是Coyote协议接口,通过Endpoint和Processor实现针对具体协议的处理能力;Tomcat按照协议和IO提供6个实现类: AjpNioProtocol, AjpAprProtocol, Http11NioProtocol, Http11Nio2Protocol, Http11AprProtocol
Adapter由于协议不同,客户端发过来的请求信息不尽相同;tomcat定义了自己的Request类来封装这些请求信息;ProtocolHandler接口负责解析请求并生成Tomcat Request类,通过CoyoteAdapter适配为selvert容器可以解析的ServletRequest,执行对应的service方法

EndPoint

  • 对传输对象层的抽象,用来实现TCP/IP协议
  • Coyote通信端口,通信监听的接口,具体Socket的接收和发送处理器
  • tomcat提供了抽象类AbstractEndPoint,定义了Acceptor和SocketProcessor
  • Acceptor:用于监听Socket请求
  • SocketProcessor:用于处理接收到的Socket请求,最终实现Runnable,在run/doRun方法里调用协议处理组件Processor进行处理,为提高性能,SocketProcessor被提交给Executor执行器线程池来管理

Processor

  • 对应用层协议的抽象,EndPoint实现了TCP/IP协议,Processor实现了HTTP协议
  • Coyote协议处理接口,接收EndPoint的Socket
  • 读取字节流解析成Tomcat的Request和Response对象,并通过Adapter将其提交给容器处理

ProtocolHandler

  • Coyote协议接口,同EndPoint和Processor实现针对具体协议的处理能力

Adapter

  • 使用CoyoteAdapter类,适配Request/ServletRequest和Response/ServletRespose的适配器
  • 由于协议不同,tomcat为了兼容,定义了Request类来接收请求信息
  • ProtocolHandler负责解析请求生成Tomcat的Request对象
  • CoyoteAdapter负责将tomcat的Request适配成Servlet可以解析的ServletRequest标准对象
  • 从而调用Servlet的service方法,实现请求、响应能力

容器Container

Catalina

  • tomcat本质是一个Servlet容器,容器的实现由Catalina,涉及到安全、会话、集群、管理等Servlet容器各个方面
  • 通过松耦合方式集成Coyote,完成按照请求协议进行数据读写等

Catalina结构

  • Catalina负责管理Server,Server表示整个服务器。
  • Server下面有多个服务Service,每个Service包含多个多个连接器组件Connector(Coyote实现)和一个容器组件Container。
  • tomcat启动的时候初始化一个Catalina实例
    在这里插入图片描述
组件功能
Catalina负责解析tomcat配置文件,来创建服务器Server组件并对其进行管理
Server表示整个Catalina Servlet容器及组件,负责组装并启动Servlet引擎,tomcat连接器。通过实现Lifecycle接口,提供一种优雅的启动和关闭整个系统的方式
Service一个Server包含多个Service组件,它将多个Connector组件绑定到一个Container(Engine)上
Connector连接器,处理与客户端的通信,负责接收客户端请求,然后转给相关的容器处理,最终向客户端返回响应结果
Container容器,负责处理用户的servlet请求,返回对象给web用户

Container

Container结构
在这里插入图片描述

组件功能
Engine表示整个Catalina的Servlet引擎,用来管理多个host虚拟主机,一个Service最多就一个Engine,一个Engine包含多个Host
Host代表一个虚拟主机,可以给tomcat配置多个虚拟主机地址,一个虚拟主机下面可以包含多个Context
Context表示一个web应用程序,可包含多个Wrapper
Wrapper表示一个(一种?)Servlet,容器最底层
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-07-05 23:25:28  更:2022-07-05 23:27:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 15:33:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码