- NIO
非阻塞I/O,采用Java NIO类库实现。
- NIO.2
异步I/O,采用JDK 7最新的NIO.2类库实现。
- APR
采用Apache可移植运行库实现,是C/C++编写的本地库
===============================================================================
- HTTP/1.1
大部分Web应用采用的访问协议。
- AJP
用于和Web服务器集成(如Apache)。
- HTTP/2
HTTP 2.0大幅度的提升了Web性能。
========================================================================
Tomcat为 支持多种I/O模型和应用层协议,一个容器可能对接多个连接器。
但单独的连接器或容器都无法对外提供服务,需组装才能正常协作,而组装后的整体,就称为Service组件。所以,Service并不神奇,只是在连接器和容器外面多包了一层,把它们组装在一起。
Tomcat内可能有多个Service,在Tomcat中配置多个Service,可实现通过不同端口号访问同一台机器上部署的不同应用。
最顶层是Server(即一个Tomcat实例)。一个Server中有一或多个Service,一个Service中有多个连接器和一个容器。
连接器与容器之间通过标准的ServletRequest/ServletResponse通信。
======================================================================
连接器对Servlet容器屏蔽了 协议及I/O模型的区别,处理Socket通信和应用层协议的解析,得到Servlet请求。
所以无论是HTTP、AJP,最终在容器中获取到的都是标准ServletRequest对象。
-
监听网络端口
-
接受网络连接请求
-
读取网络请求字节流
-
根据具体应用层协议(HTTP/AJP)解析字节流,生成统一的Tomcat Request对象
-
将Tomcat Request对象转成标准的ServletRequest
-
调用Servlet容器,得到ServletResponse
-
将ServletResponse转成Tomcat Response对象
-
将Tomcat Response转成网络字节流
-
将响应字节流写回给浏览器。
那它应该有哪些子模块呢?
优秀的模块化设计应该考虑高内聚、低耦合。连接器需完成如下高内聚功能:
-
网络通信
-
应用层协议解析
-
Tomcat Request/Response与ServletRequest/ServletResponse的转化
因此Tomcat设计3个组件实现这3功能:Endpoint、Processor和Adapter。
组件间通过抽象接口交互,以封装变化:将系统中经常变化的部分和稳定的部分隔离,有助于增加复用性,并降低系统耦合度。
不管网络通信I/O模型、应用层协议、浏览器端发送的请求信息如何变化,但整体处理逻辑不变:
- Endpoint
提供字节流给Processor
- Processor
提供Tomcat Request对象给Adapter
- Adapter
提供ServletRequest对象给容器
若要支持新的I/O方案、新的应用层协议,只需要实现相关具体子类,而上层通用处理逻辑不变。
由于I/O模型和应用层协议可自由组合,比如NIO + HTTP或者NIO.2 + AJP。Tomcat将网络通信和应用层协议解析放在一起考虑,设计了ProtocolHandler接口,封装这两种变化点。
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们
目录:
Java面试核心知识点
一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!
Java面试核心知识点
已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了
足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!**
[外链图片转存中…(img-clXbMY3O-1711008726629)]
Java面试核心知识点
已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了
[外链图片转存中…(img-mH8MTa0q-1711008726630)]