Tomcat源码学习系列之一:Tomcat架构分析

本文阅读 5 分钟

引言

本篇为Tomcat源码学习的开篇,主要通过阅读Tomcat的源码来了解其真正的运行流程以及原理,同时学习其中的架构设计等等。本文主要说明Tomcat的架构。

  • Tomcat架构
  • 一次HTTP请求在tomcat中的流程
  • 总结

一、Tomcat架构

Tomcat中的架构还是有点复杂的,但是好在Tomcat属于高度模块化的容器,如果可以搞明白其中的核心模块的原理,抓住重点就可以对Tomcat的架构有更加深刻的理解。Tomcat的架构如下图所示: img 由上图可知,Tomcat容器中的Server是其顶级接口,它管理着多个Service服务,而Service服务又管理着多个Connector以及一个Container,其中核心组件为Connector以及Container。 Server组件 所谓Server组件就是Tomcat的运行实例,一个JVM只包含一个Server组件。

Service组件 Service组件是将Connector组件与Container组件包装组合在一起,对外提供服务。该组件中会包含多个Connector组件组件以及一个Container组件。

Connector组件 该组件主要负责监听指定端口的客户端请求(不同端口对应不同的Connector组件),将Socket请求过来的数据,都封装成Request请求对象,同时将该请求对象传递给容器进行下一步的处理。

Container组件 Container组件包含了四个子容器,分别为Engine、Host、Context、Wrapper ,其内部大致结构如下图所示: img Engine :引擎,用来管理多个站点, 一个Service最多只能有一个Engine; Host :代表一个站点,也可以叫虚拟主机,通过配置Host 就可以添加站点; Context :代表一个应用程序,即为我们开发的一个war服务在webapp目录下的各个应用,或者一个WEB-INF 目录以及下面的web.xml 文件; Wrapper :每个Wrapper 封装着一个servlet。

二、一次HTTP请求在tomcat中的流程

img 图片来自于网络 由上图可知。当一个HTTP请求到达Tomcat后,所经历的大致流程如下: 1、在用户在浏览器中点击页面进行数据请求后,Tomcat本机默认端口8080接收到数据请求,被在那里监听的Coyote HTTP/1.1 Connector获得; 2、Connector把封装好的Request请求交由其所在的Service的Engine来处理,并等待Engine的回应; 3、Engine获得请求localhost/test/index.jsp,匹配所有的虚拟主机Host; 4、Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机),名为localhost的Host获得请求/test/index.jsp,匹配它所拥有的所有的Context。Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为“ ”的Context去处理); 5、path=“/test”的Context获得请求/index.jsp,在它的mapping table中寻找出对应的Servlet。Context匹配到URL PATTERN为*.jsp的Servlet,对应于JspServlet类; 6、构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet()或doPost().执行业务逻辑、数据存储等程序; 7、Context把执行完之后的HttpServletResponse对象返回给Host; 8、Host把HttpServletResponse响应对象返回至Engine; 9、Engine将HttpServletResponse响应对象返回至Connector; 10、Connector将HttpServletResponse响应对象返回给客户端的浏览器。

三、总结

本文主要讲解了Tomcat系统架构,同时介绍了其中涉及的重要组件。第二节主要叙述了HTTP请求在Tomcat中的流转过程。在下篇文章中,我们将从源码的角度出发来一探Tomcat的运行原理。

本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/Diamond_Tao/article/details/87389315
-- 展开阅读全文 --
KillDefender 的 Beacon 对象文件 PoC 实现
« 上一篇 02-09
Web安全—逻辑越权漏洞(BAC)
下一篇 » 03-13

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复