首页 > 其他分享 >Tomcat架构组成

Tomcat架构组成

时间:2023-03-29 20:55:19浏览次数:30  
标签:Engine 容器 Container Tomcat Connector 架构 Servlet 组成

Tomcat架构组成

Tomcat是一个免费的开放源代码的Servlet容器,Tomcat 容器是对 Servlet 规范的实现,也称为 Servlet 引擎。Tomcat为了更好的处理来自客户端的请求,设计了一套功能完善的处理引擎,其中包括了Container、Engine、Host、Context、Wrapper等模块功能。笔者重点分析他们之间的关联关系及架构组成。

image

从上图可以粗略的分析出他们之间的层级调用关系。

  • Server:表示整个 Tomcat Catalina servlet 容器,Server 中可以有多个 Service。
  • Service:表示Connector和Engine的组合,对外提供服务,Service可以包含多个Connector和一个Engine。
  • Connector:为Tomcat Engine的连接组件,支持三种协议:HTTP/1.1、HTTP/2.0、AJP。
  • Container:负责封装和管理Servlet 处理用户的servlet请求,把socket数据封装成Request,传递给Engine来处理。
  • Engine:顶级容器,不能被其他容器包含,它接受处理连接器的所有请求,并将响应返回相应的连接器,子容器通常是 Host 或 Context。
  • Host:表示一个虚拟主机,包含主机名称和IP地址,这里默认是localhost,父容器是 Engine,子容器是 Context。
  • Context:表示一个 Web 应用程序,是 Servlet、Filter 的父容器。
  • Wrapper:表示一个 Servlet,它负责管理 Servlet 的生命周期,并提供了方便的机制使用拦截器。

关联关系

image

从一次服务访问请求探究他们之间的组成关系,如上图所示,配置了HTTP和Ajp两个对外开放端口,同时对应了两个Connector分别负责请求数据包的封包、处理、转发工作,该过程如下图Connector中显示的操作流程。Connector将解析好的Request对象传递给Container,Container使用Pipeline-Valve管道来处理请求,如下图Pipeline请求流程。直到WrapperValve创建并调用ApplicationFilterChain,最后调用Servlet执行路由处理。

image

Connector

Connector是Tomcat中的连接器,在Tomcat启动时它将监听配置文件中配置的服务端口,从端口中接受数据,并封装成Request对象传递给Container组件,如下图所示:

image

tomcat 中 ProtocolHandler 的默认实现类是 Http11NioProtocol,在高版本tomcat中Http11Nio2Protocol也是其中的一个实现类。

ProtocolHandler来处理网络连接和应用层协议,包含两个重要组件:endpoint和processor,endpoint是通信端点,即通信监听的接口,是具体的socket接受和发送处理器,是对传输层的抽象,processor接受来自endpoint的socket,读取字节流解析成Tomcat的request和response对象,并通过adapter将其提交到容器处理,processor是对应用层协议的抽象。总结如下:

  • endpoint:处理来自客户端的连接请求。
  • processor:接受来自endpoint的socket,读取字节流解析成Tomcat的request和response对象。
  • adapter:将封装好的request转交给Container处理,连接Connector和Container。

Container

在Tomcat中,容器(Container)主要包括四种,Engine、Host、Context和Wrapper。也就是这个图中包含的四个子容器。由下图可以看出,Container在处理请求时使用的Pipeline管道,Pipeline 是一个很常用的处理模型,和 FilterChain 大同小异,都是责任链模式的实现,Pipeline 内部有多个 Valve,这些 Valve 因栈的特性都有机会处理请求和响应。上层的Valve会调用下层容器管道,一步一步执行到FilterChain过滤链。

image

Context

servletContext负责的是servlet运行环境上下信息,不关心session管理,cookie管理,servlet的加载,servlet的选择问题,请求信息,主要负责servlet的管理。

StandardContext主要负责管理session,Cookie,Servlet的加载和卸载,负责请求信息的处理,掌握控制权。ServletContext主要是适配Servlet规范,StandardContext是tomcat的一种容器,当然两者存在相互对应的关系。

image

在Tomcat中对应的ServletContext实现是ApplicationContext。Tomcat惯用Facade方式,因此在web应用程序中获取到的ServletContext实例实际上是一个ApplicationContextFacade对象,对ApplicationContext实例进行了封装。而ApplicationContext实例中含有Tomcat的Context容器实例(StandardContext实例,也就是在server.xml中配置的Context节点),以此来获取/操作Tomcat容器内部的一些信息,例如获取/注册servlet等。Filter内存马的实现也是基于此知识点获取到了存储在StandardContext中的filterConfigs HashMap结构。

标签:Engine,容器,Container,Tomcat,Connector,架构,Servlet,组成
From: https://www.cnblogs.com/woshi/p/17270284.html

相关文章

  • SpringBoot——更换Tomcat服务器为 Jetty 服务器
    Jetty服务器(可能会用到)Jetty比Tomcat更轻量级,可拓展性更强(相较于Tomcat),谷歌应用引擎(GAE)已经全面切换为Jetty首先要启动Jetty服务器 --> 到nexus.exe文件夹中cmd输......
  • 大型高并发高负载网站的系统架构
    一个小型的网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单。随着互联网业务......
  • Tomcat基础学习
    Tomcat简介Tomcat是一个轻量级的web服务器,也称为web容器,servlet容器。(web服务器可以封装http协议,简化开发。还可以将web项目部署到服务器上,对外提供网上浏览。)Tomcat基本......
  • 单体架构中静态资源访问不到的处理
      importlombok.extern.slf4j.Slf4j;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.......
  • 河北稳控科技便携式钻孔测斜仪的组成与测量原理
    河北稳控科技便携式钻孔测斜仪的组成与测量原理 便携式钻孔测斜仪由测斜探头、多功能数据采集仪组成。测斜探头组成:探头包括吊环、传感段、导向段、加长段、尾段五部分......
  • tomcat的定时启动
    http://www.qdexun.cn/jsp/news/shownews.do?method=GetqtnewsdetailAction&id=1062......
  • 【必须收藏】别再乱找 TiDB 集群部署教程了,这篇保姆级教程来帮你!!| 博学谷狂野架构师
    TiDB基础使用TiDBdashboard使用TiDBDashboard是TiDB自4.0版本起提供的图形化界面,可用于监控及诊断TiDB集群。TiDBDashboard内置于TiDB的PD组件中,无需......
  • 冗余架构控制器下的攻与防
    ​本文系原创,转载请说明出处PleaseSubscribeWechatOfficialAccount:信安科研人,获取更多的原创安全资讯  防:《AQuad-RedundantPLCArchitectureforCyber-Resi......
  • 数据库MHA实现高可用架构
    一、mysqlMHA介绍MHA(MasterHighAvailability)是一款开源的MySQL的高可用程序,它为MySQL主从复制架构提供了automatingmasterfailover功能。1.1什么是MHA?MHA(Master......
  • MIPS架构的交叉编译工具问题
    MIPS架构的交叉编译工具问题某些MIPS架构的机顶盒提供了六种交叉编译工具GCC,如下:·mipsel-linux-gcc·mipsel-linux-uclibc-gcc·mipsel-uclibc-gcc·mips-linux-gcc·......