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

容器,简单理解就是用来装东西的工具。在Tomcat里面,容器被设计用来装载Servlet, 也就是我们平常写的普通的Servlet ,就会存放在容器里面。这也就是咱们平常念叨的Servlet容器,其实从广义上理解,Servlet容器是指Tomcat,从狭义上理解,Servlet容器,只是Tomcat里面的一个组件而已。

1. 容器概述

Tomcat采用分层结构设计了4种容器,这4种容器分别是: Engine 、Host 、Context 、Wrap 。它们钧继承 Container 容器接口。这样设计使得Tomcat在处理请求时,分工更加明确,也使得容器具有很好的灵活性。

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

其中从左到右: Engine 表示引擎,用来管理多个虚拟站点,一个Service最多只能有一个Engine。 Host代表虚拟主机,或者表示站点。其实就是我们配置出来的虚拟映射地址。Context表示一个Web应用,Wrap 名为包装,它其实就是内部包装着我们写的Servlet。

为了方便大家理解,我们可以从Tomcat里面的server.xml中看出来一些端倪。

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

这四个容器呈现的是一个父子包含关系:

一次请求的来龙去脉 - Tomcat架构解析(二)
2. 定位Servlet

在Tomcat里面使用Mapper 映射器来实现Servlet的定位工作。在最初启动项目的时候,Tomcat就开始解析了项目的配置信息,然后使用Mapper来保存了具体的映射地址和Host、Context、Wrap的对应关系。当请求到来的时候,就会到Mapper里面去查找匹配的Wrap(Servlet),然后调用。当我们为了方便理解,我们可以浅显的认为Mapper其实就是一个类似Map键值对的容器。

2.1 全局概览

比如: 下面的图示,我们可以把瑞吉点餐项目的面向管理员后台项目和面向用户前端项目部署在同一个Tomcat上,为了隔离它们,我们通过配置虚拟域名,也就是两个Host。而用户系统,订单系统,产品系统,购物车系统又都是可以独立运行的应用,所以我们可以配备4个Context来对应它们。最后一排的Wrap,其实就是各自系统中的Servlet了。

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

此时用户使用

http://user.reggie.com:8080/cart/delete 来访问。 2.2.1 定位Service和Engine

由于来访的时候,使用的是8080端口,正好被Http连接器捕捉到。在Tomcat里面,Service里面包含着: 连接器和容器。找到了连接器,也就意味着找到了容器,这也就意味着Engine就确定了。

2.2.2 定位Host

Service和Engine确定了之后,就在Mapper中,通过路径地址,找到响应的Host容器。由于使用的是user.reggie.com 访问,所以这就确定了是Host2这个容器。

2.2.3 定位Context

Host确定了之后,继续在Mapper中查找。由于使用的/cart访问,所以这就定位到了Context4这个应用。

2.2.4 定位Wrap

Context确定了之后,后续也就能根据地址 /delete,轻而易举的找到 Wrap6 这个容器。最后也就定位到了Servlet。

2.3 请求传递

Tomcat 里面是如何把请求从最外层的容器Engine,一直往里传递到Wrap,然后执行Servlet的调用的呢?

答案是使用 Pipeline-Valve 管道。

Pipeline-Valve 是责任链模式,责任链模式是指在一个请求处理的过程中有很多处理者依次对请求进行处理,每个处理者负责做自己相应的处理,处理完之后将再调用下一个处理者继续处理。

下面通过一个张简单的草图来描述:

每一个容器都有一个Pipeline对象,中间的每一个圆圈,其实表示的是一个Valve,它表示处理点。在Pipeline里面维护这Valve的链表。只要执行了第一个Pipeline的Valve,这个容器中的Pipeline就会被调用,直到最后末端的Basic的Valve,它负责去连接下一个子容器的第一个Valve处理点。这样不断的串联起来,最终就到达了Servlet。

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

值得注意的是: 在Wrap的最后一个Basic的Valve的处理点里面,它会创建一个Filter过滤器链,然后在doFilter方法中最终调用Servlet的service方法。

3. 总结

本文主要给大家描述了Tomcat了里面的容器结构,以及请求到来的时候,是如何识别到底执行了哪个Servlet。请求的链式调用是基于 Pipeline-Valve 责任链来完成的,这样的设计使得系统具有良好的可扩展性,如果需要扩展容器本身的功能,只需要增加相应的 Valve 即可。

免责声明:文章内容来自互联网,本站仅作为分享,不对其真实性负责,如有侵权等情况,请与本站联系删除。
转载请注明出处:一次请求的来龙去脉 – Tomcat架构解析(二) https://www.dachanpin.com/a/cyfx/11397.html

(0)
上一篇 2023-05-12 03:15:23
下一篇 2023-05-12 03:16:26

相关推荐

  • 广州强邦餐饮创业职业学校毕业后开店选址要求

    由于餐饮创业的门槛比较低,越来越多的创业者想选择开一个自己的餐饮店,来创造属于自己的财富。广州强邦餐饮创业职业学校是一家以创业为主题的餐饮职业技能培训学校,教学内容以实用技能教学为主、以开店创业为导向对学生进行技术培训,经营管理培训,创业能力建设培训,课程涉及中餐、西餐、面点、烘焙、水吧、特色小吃、日韩料理等多种项目。学校的师资力量雄厚,全程一对一、手把手实…

    创业分享 2023-05-21
    71
  • 全国模范军转干部杨建桥:坚韧诚信成就14年创业路

    (湖北广电融媒体记者 李莫愁 郭宏道 余研 通讯员 孙蒙 责任编辑 何潜彬) 2003年10月,他与8名复转军人合资开了一个“战友放心菜商行”,由于没有经验,当年他就亏损14万元。但杨建桥并没有就此收手,而是总结教训,查找原因。最终杨建桥和他的复转军人团队凭借坚韧诚信的品质慢慢走向正轨,如今已成为拥有25家子公司的民营企业。 据悉,现年57岁的杨建…

    2023-05-24
    102
  • 青腾大学杨国安:逆境时期,创业者如何自救的三个关键点

      创业者心态,决定了公司走向   三是高管的言行与决策。   有人说,这次疫情是一面照妖镜。对于企业而言,逆境是加速淘汰与升级的催化剂,免疫力强的企业,会被加速升级,反之则容易被加速淘汰。当前的企业发展要搭上数字化的顺风车,已成为各界共识。企业的抗风险能力,永远离不开稳定的业务、员工的工作积极性及稳定的现金流。短期创业者考虑如何恢复元气的同时,业务模式、生…

    创业分享 2023-05-12
    66
  • 乔卫:侨界青年的创新创业应融入中国梦连接世界梦的过程中

      7月25日,侨界青年创新创业澳门峰会在澳门开幕。峰会通过主旨演讲、互动互论等一系列活动,凝聚侨界青年创新创业的新理念、新共识,激发侨界青年携手共进的正能量。   国际在线消息:据海外华媒新媒体群“侨联之友”报道,7月25日,侨界青年创新创业澳门峰会在澳门开幕。中国侨联副主席、中国侨联青年委员会会长乔卫在峰会上作主旨发言时指出,侨界青年作为侨界的新生力量,…

    2023-05-30
    71
  • 番禺区举办穗港澳台企业家创新创业成功经验交流会

    番禺区举办穗港澳台企业家创新创业成功经验交流会 2019-01-03 08:58:30    华夏经纬网   12月18日上午,番禺区委统战部、番禺区台办联合广州市科技金融促进会、市科技金融示范区服务中心、广州大学创新创业学院、番禺区人力资源管理协会共同举办了“番禺创新型企业创新创业成功经验分享会暨穗港澳台在穗企业家交…

    创业分享 2023-05-13
    65

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信