Tomcat总体架构,启动流程与处理请求流程

科技资讯 投稿 7100 0 评论

Tomcat总体架构,启动流程与处理请求流程

参考书籍《Tomcat架构解析》

一丶Tomcat总体架构

本文沿袭《Tomcat架构解析》中启发式的方式来总结Tomcat总体架构

1 Server

从上面这段话来看,如果我们将上述功能全部让Server去做实现,那么让请求监听和请求处理耦合度很高,不利于适配。

2.Connector 和 Container

    Connector

  • Engine

如是我们有下面这种设计

并且无法做到一个Tomcat服务器运行多个服务,比如订单服务,用户服务。将Connector和Engine都交给Server处理,无法实现服务间的隔离。

3.Service

Server表示Tomcat服务器,一个Tomcat服务器可以部署多个服务,比如订单服务,用户服务。这里的服务就是Service。

4.Context,Host,Wrapper

    Context

  • Host

  • Wrapper

5.Container

Container表示容器,可以添加并维护子容器,因此Engine,Host,Context,Wrapper均继承自Container

6.Lifecycle

可以看到上图中组件都存在start,stop等生命周期方法,因此Tomcat抽象出Lifecycle接口,表示生命周期,定义了init,start,stop,destory等生命周期回调方法。并且还提供了LifecycleListener使用监听器模式来实现生命周期事件监听。

7.Pipeline和Valve

在Tomcat中Engine,Host,Context,Wrapper都有对应的Valve实现,同时维护了一个Pipeline,从而让我们可以对请求的处理进行扩展。

8.Connector设计

    Endpoint:tomcat中没有这个接口,只有AbstractEndpoint,它负责启动线程来监听服务器端口,并且在接受到数据后交给Processor处理
  • Processor:Processor读取到客户端请求后按照请求地址映射到具体的容器进行处理,这个过程请求映射,Processor实现请求映射依赖于Mapper对象,在容器发生注册和注销的时候,MapperListener会监听到对应的事件,从而来变更Mapper中维护的请求映射信息。
  • ProtocolHandler:协议处理器,针对不同的IO方式(NIO,BIO等)和不同的协议(Http,AJP)具备不同的实现,ProtocolHandler包含一个Endpoint来开启端口监听,并且包含一个Processor用于按照协议读取数据并将请求交给容器处理。

CoyoteAdapter在Processor和 Mapper以及Container中横插一脚,实现Connector和Mapper以及Container的解耦。

9.Executor

10 Bootstrap与Catalina

Tomcat提供了Bootstrap作为应用服务器启动入口,Bootstrap负责反射创建Catalina实例,根据执行参数调用Catalina相关方法完成针对应用服务器的操作(启动、停止)。

二丶Tomcat启动流程

三丶Tomcat处理一个请求的流程

应用程序的请求处理,开始于监听服务器socket端口接受到数据,结束与服务器处理结果写入Socket输出流。

编程笔记 » Tomcat总体架构,启动流程与处理请求流程

赞同 (33) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽