赞
踩
在昨天我们对tomcat,对tomcat应用服务器设计思想,进行了相关的说明。
对tomcat的核心servlet进行一些说明,了解到Servlet容器工作流程。
相关的详情,可以查看这里: Tomcat原理剖析-Tomcat应用服务器设计思想
那么今天我们继续的深入,深入的学习Tomcat整体架构设计。
来吧,继续搬砖喽!!!
刚才咱看了Web应用服务器的设计基本原理,其中有具体的HTTP服务器和Servlet容器接下来介绍,具体实现。
Tomcat整体架构总结起来就是: 2 个核心器, 8 个关键组件
设计任何系统架构首先必须了解需求。Tomcat的两个核心需求:
基于此核心需求,Tomcat设计了两个核心组件连接器(Connector)和容器(Container)来分别实现对应功能。
由此可见这两个核心的组件,贯穿整个tomcat的核心思想设计。
Catalina大容器
一次请求响应,对应一次service服务
究竟什么是Coyote,那我们来学习一下?继续往下
Coyote :是Tomcat服务器提供的供浏览器访问的外部接口。客户端通过Coyote与服务器建立连接、发送请求并接受响应 。
Coyote 封装了底层的网络通信(Socket 请求及响应处理),将Socket 输入转换封装为 Request 对象,交由Catalina 容器进行处理,处理请求完成后, Catalina 通过 Coyote 提供的Response 对象将结果写入输出流 。
看到这里我们知道了Coyote的核心作用,就是将Socket 输入转换封装为 Request 对象
并能提供Response 对象将结果写入输出流
那我们来看一下Coyote,内部的结构图。
连接器组件:ProtocolHandler、EndPoint、Processor、Adapter
连接器拆解
连接器Coyote内部组件图:
对于上面这个图,我们来解析一下,相关组件:
连接器中的各个组件的作用如下:
1.EndPoint:EndPoint用来实现TCP/IP协议的,作为Coyote 通信端点,即通信监听的接口,是具体Socket接收和发送处理器,是对传输层的抽象。
2.Processor:HTTP协议处理接口 。Processor是对应用层协议的抽象。
3 、ProtocolHandler:ProtocolHandler接口通过Endpoint 和 Processor,实现针对具体协议的处理能力。Tomcat 按照协议和I/O 提供了 6 个实现类 :
4 、Adapter适配器
由于协议不同,客户端发过来的请求信息也不尽相同,Tomcat定义了自己的Request类来“存放”这些请 求信息。ProtocolHandler接口负责解析请求并生成Tomcat Request类。但是这个Request对象不是标 准的ServletRequest,也就意味着,不能用Tomcat Request作为参数来调用容器。
Tomcat设计者的解决方案是引入CoyoteAdapter,这是 适配器模式 的经典运用,连接器调用 CoyoteAdapter的Sevice方法,传入的是Tomcat Request对象,CoyoteAdapter负责将Tomcat Request转成ServletRequest,再调用容器的Service方法。
连接器的IO模型与协议
刚才看了连接器中的核心三个组件,组件中包含了IO模型和应用协议基本概念。
那么我们看一下Tomcat连接器支持的IO模型和网络应用层协议。在连接器Coyote中 , Tomcat支持的多种I/O模型和应用层协议,具体包含哪些IO模型和应用层协议,请看下表:
支持的IO模型(自8.5/9.0 版本起,Tomcat 移除了 对 BIO 的支持):
IO模型 | 描述 |
---|---|
NIO | 非阻塞I/O,采用Java NIO类库实现。 |
NIO2 | 异步I/O,采用JDK 7最新的NIO2类库实现。 |
APR | 采用Apache可移植运行库实现,是C/C++编写的本地库。如果选择该方案,需要单独安装APR库。 |
协议分层 :
Tomcat是一个由一系列可配置的组件构成的Web容器,而Catalina是Tomcat的Servlet容器。
而servlet就是tomcat的核心,catalina是servlet容器,那就说明catalina,也是tomcat的一个核心内容。
Catalina大容器占的绝对C位
Tomcat 本质上就是一款 Servlet 容器, 因此Catalina 才是 Tomcat 的核心 , 其他模块都是为Catalina提供支撑的。
Coyote连接器模块提供链接通信 Jasper 模块提供JSP引擎 Naming 模块提供JNDI 服务 Juli 提供日志服务。 复制代码
Tomcat 整体架构图:
那是不是还剩下4个组件呢?这不就来了嘛,别急,都给你讲完。
Catalina组件:Engine、Host、Context、Wrapper
4个组件,分别是Engine、Host、Context和Wrapper。这4个组件不是平行关系,而是父子关系。
Tomcat这种分层架构设计,使得Servlet容器具有很好的灵活性。
组件的关系:
各个组件的含义 :
好了,tomcat的2个核心,8个组件,就分享完了。
2个核心
8个组件
连接器组件:ProtocolHandler、EndPoint、Processor、Adapter
大容器组件:Engine、Host、Context、Wrapper
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。