一次请求的来龙去脉 - Tomcat架构解析(一)

Tomcat作为我们学习JavaEE的一个重要的web服务器,对整个请求的来龙去脉有所了解,将直接使得我们对JavaEE的学习更加的事半功倍。并且深入了解Tomcat架构设计之后,将使得我们在以后搭建自己的项目架构提供借鉴。那么接下来,我们先给大家阐述一下Tomcat的架构是如何设计的,在设计的时候又是如何一步一步的考虑进行的优化升级。

1. 总体架构

其实只要我们使用过Tomcat,那么就应该可以猜测得出,Tomcat其实是包含了两个核心功能:

处理socket请求,实现字节流数据和Request对象、Response对象的转化管理Servlet,执行servlet来处理请求,响应请求

一次请求的来龙去脉 - Tomcat架构解析(一)

2. 连接器

为了更好的处理上面的两件事情,Tomcat 设计出来了两个组件: 连接器 和 容器 , 其中连接器用来接收请求,处理数据,封装成Request和response对象,对请求作出响应。 容器负责管理servlet,调用servlet,得到响应返回给连接器,然后返回给客户端。

一次请求的来龙去脉 - Tomcat架构解析(一)

2.1 Service组件

连接器和容器单独工作,并不能完成所有的内容。必须让它们组合起来一起协作。为了更好的管理他们,Tomcat使用了叫做: Service的组件来包装它们, Service并没有任何的新鲜的功能,仅仅是包装了连接器和容器而已。事实上,在Tomcat中,可以配置很多组service组件 , 这样就可以通过不同的端口号来访问在Tomcat中部署的不同项目了。

一次请求的来龙去脉 - Tomcat架构解析(一)

从上图可以看出在在一个Tomcat可以包含一个Server实例,其实Server实例就是Tomcat实例。而一个Server实例可以拥有一个或者多个Service实例,一个 Service 中有多个连接器和一个容器。连接器之所以设计为多个,主要是为了方便客户端可以通过不同的协议来发送请求。而容器只需要一份即可,因为它只需要管理servlet即可。连接器和容器是通过标准的ServletRequest和ServletResponse对象通讯的。

2.1.1 连接器

连接器的作用: 是为了接收客户端的请求,并且对socket请求进行数据读取,分析,然后封装成<ServletRequest 对象,传输给容器。为了更好的实现功能内聚、分工明确,Tomcat设计了3个组件来完成这些功能: EndpointProcessorAdapter 。 为了更好的处理协议,Tomcat还使用 ProtocolHandler来对Endpoint和Processor进行了封装。

Endpoint

Endpoint 作为通信端点,是一个接口 , 具体的 Socket 接收和发送处理器 ,属于TCP/IP的具体实现。 具体的实现类有: AbstractEndpoint 。 它有两个重要的组件:Acceptor 和 SocketProcessor 。 其中: Acceptor用来监听请求,SocketProcessor用来处理接收到的socket请求,它实现了Runnable接口,最终会被提交到线程池里面执行。

Processor

Processor则是实现Http协议的具体实现。负责把 Endpoint 接收到的请求里面的数据解析成Tomcat的Request对象。

Adapter

由于客户端可以使用不同的协议来发送请求,Tomcat 接收到请求后,交由ProtocolHandler来解析并且封装成Request对象。但是想要传输给Servlet,还需要经过一次转化。这个转化的重任就落在了Adapter身上。

它的具体实现是: CoyoteAdapter,这个哥们属于典型的适配器模式。把传递过来的Tomcat的Request类型转化成了后续容器需要用到的ServletRequest对象。

一次请求的来龙去脉 - Tomcat架构解析(一)

3. 总结

Tomcat 的整体架构包含了两个核心组件连接器和容器。连接器负责对外交流,容器负责内部处理。连接器用 ProtocolHandler 接口来封装通信协议和 I/O 模型的差异,ProtocolHandler 内部又分为 Endpoint 和 Processor 模块,Endpoint 负责底层 Socket 通信,Processor 负责应用层协议解析。连接器通过适配器 Adapter 调用容器。

文章来源于:王晴儿网页设计博客 欢迎分享交流,转载请注明出处

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/262665.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
黑马程序员黑马程序员订阅用户
上一篇 2023年5月10日 11:55
下一篇 2023年5月10日 11:56

相关推荐

  • 我来教你网站SEO优化过程是什么。

    并不是每天更新几篇文章就是seo优化,站内更新只是网站seo优化过程中的一部分。SEO优化技术也并不是简单几句话就能足以概括的,这是一项需要耐心以及细致的工作,今天就详细的给大家介绍一下SEO优化的过程。关键词…

    2023年6月26日
    00
  • 教你杭州SEO优化过程如何对内链进行优化。

    在seo行业中,以前流行着这样一句话“内链为王,外链为皇”。但是随着SEO行业技术的以及搜索引擎算法的不断更新升级,外链的作用逐渐下降,内链的作用却直线上升。所以,目前在做杭州seo优化过程中,大家对于内链也越…

    2023年6月20日
    00
  • PHP中的HTTP请求和响应头。

    在Web开发中,HTTP请求和响应头是非常重要的概念。它们提供了在客户端和服务器之间传输数据的标准化机制。PHP作为一门流行的Web编程语言,自然也支持HTTP请求和响应。HTTP请求头是客户端(例如浏览器)发送给服务器…

    2023年5月28日
    05
  • 分享网页设计过程是什么。

    在日常的工作和生活中,我们经常使用到网站,无论是大型的购物网站,还是很好的社交媒体平台,亦或是厉害的游戏共享平台,但凡是做的比较好的平台,他们的受欢迎度都很好,因为他们都有一个共同的特点,那就是有一…

    2023年6月13日
    00
  • 小编分享死链对网站的影响、产生过程、解决办法汇总。

    大量死链对搜索引擎来讲,有什么影响? 1、几乎很多站都避免不了存在死链接,但死链率过高,会影响搜索引擎对网站的评分。 2、搜索引擎对每个网站每天抓取的频次是限额的,若网站存在大量死链,会浪费掉抓取配额并影…

    2023年6月22日
    00
  • 小编分享听小编讲解搜索引擎工作过程。

    搜索引擎的工作的过程非常复杂,而简单的讲搜索引擎的工作过程大体可以分成三个阶段。 爬行和抓取:搜索引擎蜘蛛通过跟踪链接访问页面,获取页面HTML代码存入数据库。 预处理:搜索赢球对抓取来的页面数据文字进行…

    2023年6月22日
    00
  • HTTPS与HTTP有什么区别吗?

    什么是 HTTPS? HTTPS (基于安全套接字层的超文本传输协议 或者是 HTTP over SSL) 是一个 Netscape 开发的 Web 协议。 你也可以说:HTTPS = HTTP + SSL HTTPS 在 HTTP 应用层的基础上使用安全套接字层作为子层。 为…

    2019年3月10日
    0224
  • 小编分享如何把html的访问地址改变成http。

    在HTML中,我们通常使用十六进制颜色代码(如#FFFFFF)来表示颜色,有时候我们可能需要使用RGB(红绿蓝)颜色代码,RGB颜色代码是一种基于光学原理的颜色表示方法,它通过组合红、绿、蓝三种基本颜色的不同亮度值来…

    2024年6月24日
    00

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息