美文网首页
4、Tomcat系统架构:多层容器的设计

4、Tomcat系统架构:多层容器的设计

作者: 技术灭霸 | 来源:发表于2020-08-09 09:35 被阅读0次

Tomcat有两个核心组件:连接器和容器,其中连接器负责外部交流,容器负责内部处理。具体来说就 是,连接器处理Socket通信和应用层协议的解析,得到Servlet请求;而容器则负责处理Servlet请求。

Tomcat为什么要设计成多层架构?

Tomcat设计了多层容器是为了灵活性的考虑,灵活性具体体现在一个Tomcat实例(Server)可以有多个
Service,每个Service通过多个连接器监听不同的端口,而一个Service又可以支持多个虚拟主机。一个URL
网址可以用不同的主机名、不同的端口和不同的路径来访问特定的Servlet实例。


假如有用户访问一个URL,比如图中的http://user.shopping.com:8080/order/buy,Tomcat如何将这个URL定位到一个Servlet呢?

1、首先,根据协议和端口号选定Service和Engine。
2、然后,根据域名选定Host。
3、之后,根据URL路径找到Context组件。
4、最后,根据URL路径找到Wrapper(Servlet)。

连接器中的Adapter会调用容器的Service方法来执行Servlet,最先拿到请求的是Engine容器,Engine容器对请求做一些处理后,会把请求传给自己子容器Host继续处理,依次类推,最后这个请求会传给Wrapper容器,Wrapper会调用最终的Servlet来处理。

那么这个调用过程具体是怎么实现的呢?

答案是使用Pipeline-Valve管道

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



整个调用过程由连接器中的Adapter触发的,它会调用Engine的第一个Valve:

// Calling the container
connector.getService().getContainer().getPipeline().getFirst().invoke(request, response);

Wrapper容器的最后一个Valve会创建一个Filter链,并调用doFilter()方法,最终会调到Servlet的service方
法。

业务的controller是从哪部分进去的?

Wrapper -> Filter -> DispatcherServlet -> Controller

Tomcat内的Context组件跟Servlet规范中的ServletContext接口有什么区别?跟Spring中的ApplicationContext又有什么关系?

1、Servlet规范中ServletContext表示web应用的上下文环境,而web应用对应tomcat的概念是Context,
所以从设计上,ServletContext自然会成为tomcat的Context具体实现的一个成员变量。

2、tomcat内部实现也是这样完成的,ServletContext对应tomcat实现是org.apache.catalina.core.Applica
tionContext,Context容器对应tomcat实现是org.apache.catalina.core.StandardContext。ApplicationCo
ntext是StandardContext的一个成员变量。

3、Spring的ApplicationContext之前已经介绍过,tomcat启动过程中ContextLoaderListener会监听到容
器初始化事件,它的contextInitialized方法中,Spring会初始化全局的Spring根容器ApplicationContext,
初始化完毕后,Spring将其存储到ServletContext中。

总而言之,Servlet规范中ServletContext是tomcat的Context实现的一个成员变量,而Spring的Applicatio
nContext是Servlet规范中ServletContext的一个属性

相关文章

  • 4、Tomcat系统架构:多层容器的设计

    Tomcat有两个核心组件:连接器和容器,其中连接器负责外部交流,容器负责内部处理。具体来说就 是,连接器处理So...

  • 【学习】重点框架

    Tomcat Tomcat全面介绍Tomcat支持的协议Tomcat系统架构Tomcat容器责任链实现Tomcat...

  • 一万字深度剖析Tomcat源码

    整篇文章分为两大部分,Tomcat 系统架构设计和 Tomcat 源码剖析。 Tomcat系统架构设计 1.前言 ...

  • Tomcat系统架构(下)-容器

    容器,顾名思义就是用来装载东西的器具,在 Tomcat 里,容器就是用来装载 Servlet 的。 容器的层次结构...

  • 思维导图学 Tomcat & Jetty

    目录 基础 Tomcat架构 Jetty架构 其他 对Tomcat的一些看法 作为一个Servlet容器,Tomc...

  • Docker基础

    来源:Docker容器安全监控系统设计与实现_简智强 Docker架构 Docker作为Linux容器管理...

  • Tomcat源码学习笔记-整体架构

    前言 Tomcat作为目前非常流行的web容器,其架构设计是非常值得我们借鉴的,它的生命周期管理、多级容器的协调工...

  • Tomcat整体架构简析

    一、Tomcat 容器的总体架构 Tomcat 容器主要用来提供servlet运行环境,对其生命期进行管理,从而提...

  • 死磕Tomcat系列(5)——容器

    死磕Tomcat系列(5)——容器 回顾 在死磕Tomcat系列(1)——整体架构中我们简单介绍了容器的概念,并且...

  • 让面试官颤抖的Tomcat系统架构系列!

    一、Tomcat顶层架构 先上一张Tomcat的顶层结构图(图A),如下: Tomcat中最顶层的容器是Serve...

网友评论

      本文标题:4、Tomcat系统架构:多层容器的设计

      本文链接:https://www.haomeiwen.com/subject/uslkdktx.html