读书笔记--Tomcat内核设计剖析之Tomcat组件结构

前言:

      最近在阅读《Tomcat内核设计剖析》这本书,这里将一些知识点记录下来,以便随时翻阅。本文中讲解的Tomcat,为Tomcat 7。首先我们来大概了解一下Tomcat容器的构成,以此来对Tomcat的工作原理有一个大概的了解,后期会进行详细的记录。

一、容器的整体结构

1、Server 组件

       可以说整个容器就是一个Server组件,他可以包含一个和多个Service组件,同时,为了拓展,他引入监听组件Listener,为了集成JNDI,引入了GlobalNamingResources组件。

2、Service组件

       Service是服务的抽象,每个Service包含了接收请求的Connector组件,和处理请求的Engine组件,不同的请求协议有不同的Connector(连接器),目前Tomcat支持HTTP协议和AJP协议。此外每个Service还有若干个Executor(线程池)。

3、Connector组件

       主要是用来接收客户端的连接,以及请求报文的处理,生成Request对象,Connector的内部实现也根据阻塞I/O和非阻塞I/O分成两种不同的情况,以Http协议为例:

        阻塞式I/O结构如下:

3.1、Http11Protocol组件

         Http11Protocol组件是基于Http1.1协议版本的抽像,他主要接收客户端的Http请求,处理请求报文,内部包含JioEndPoint组件,该组件内部的Acceptor负责监听端口,并及时将请求放进线程池Exector,Http11Processor组件则从线程池获取请求并封装成Request对象,传递给Engine处理。

3.2、Mapper组件

         Mapper组件是客户端请求的路由导航组件,他可以通过请求的地址,找到对应的Servlet.

3.3、CoyoteAdaptor组件

        CoyoteAdaptor组件 是一个将连接器Connector和Container容器适配起来的适配器组件。

        对于非阻塞式I/O:

        他相对阻塞I/O多了一个Poller组件,该组件的任务就是轮询多个客户端,不断检测和处理各种事件。

4、Engine组件

      Tomcat有4种级别的容器,Engine,Host,Context,Wrapper,Engine代表全局的Servlet引擎,每个Service组件只能包含一个Engine组件,但是每个Engine组件可以包含多个Host组件,此外,他还包含监听组件,客户端的访问日志组件等。

5、Host组件

       Host组件代表虚拟主机,每个虚拟主机可以存放若干个Web应用的抽象(Context容器)。

6、Context组件

      Context组件时Web应用的抽象,我们的Web项目被部署到Tomcat之后,会转化成Context对象,他包含各种静态资源,若干Servlet(Wrapper容器)。

7、Wrapper组件

      Wrapper容器是Tomcat中级别最小的,他对应Servlet,一个Servlet对应一个Wrapper容器,他包含Servlet组件,ServletPool组件(Servlet对象池),Pipeline组件(Wrapper容器对请求进行处理的管道)。

二、请求处理的过程

上面的过程以阻塞式I/O为例:

 2.1:当Tomcat启动之后,Connector容器中的Accptor负责监听客户端的连接,并接收Socket,在接收到socket之后,将其放入线程池;

2.2:Http11Protocol从线程池获取请求信息,并且解析出请求行、请求头、请求体等,并封装成Request对象;

2.3:Mapper组件根据请求行的URL属性,请求头的Host属性匹配由哪个Host容器,哪个Context容器和哪个Wrapper容器来处理请求,这个过程就是从Tomcat中找到对应的Servlet,然后将路由的结果封装大桥哦Request中,方便后面处理时通过Request对象选择容器。

2.4:CoyoteAdaptor组件负责将Connector组件和Engine容器连接起来,把Request对象和Response对象传递到Engine容器,调用它的管道。

2.5:Engine容器的管道开始处理请求,管道里包含若干的阀门,每个阀门负责某些处理逻辑,等所有的阀门执行完之后,才会执行基础阀门EngineValve,它负责调用Host容器的管道。

2.6:Host容器同样包含若干阀门,等所有的阀门执行完之后,才会执行基础阀门HostValve,它会调用Context容器的管道。

2.7:Context容器的各个阀门执行结束之后,调用Wrapper容器的管道。

2.8:Wrapper容器的管道开始处理请求,首先执行基础阀门,然后执行WrapperValve,它会执行容器对应的Servlet的处理方法,对请求逻辑进行处理,并将处理结果输出到客户端。

总结:

        本文我们把Tomcat的构成和工作流程梳理了一遍,后面还会对各个组件进行更详细的讲解和记录。DDP

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值