Tomcat9的容貌

865 阅读5分钟


  • 事件管理
     Tomcat的扩展机制,针对于容器与业务请求在各种场景下都通过对应的监听器来扩展
  • 连接管理
      针对于并发环境下的网络请求、NIO多组线程协同工作,消息的请求管理
  • 请求管理
      针对于网络请求如何寻址对应Web应用并进行业务处理
  • 容器管理
      对Tomcat容器的管理,其中包括容器的生命周期管理,容器的组成
容器的生命周期管理分为:容器的创建、容器的初始化、容器的启动、容器的暂停、容器的停止等..容器的组成分为:Server、Service、Engine、Wapper、PipeLine
  • 应用管理
      该部分主要描述应用程序如何被Tomcat识别、加载以及请求调用
  •  总体架构
     面向组件、基于JMX、事件侦听



  • Server:整个 Tomcat 服务器,包含多组服务,负责管理和启动各个 Service,同时监听 8005 端口发过来的 shutdown 命令,用于关闭整个容器。Server是最顶级的组件,它代表Tomcat的运行实例,在一个JVM中只会包含一个Server,Server控制整个Tomcat的生命周期。在Server的整个生命周期中,不同阶段的会有不同的事情要完成。为了方便扩展,它引入了监听器方式,所以它也包含了Listener组件。另外,为了方便在Tomcat集成JNDI,引入了GlobalNamingResources组件。如果将Tomcat内核高度抽象,可以看成有连接器组件和容器组件组成,其中Connector组件负责在服务器端处理客户请求以及消息报文的解析等工作,而Container组件则负责对客户端的请求进行逻辑处理,并把结果返回给客户端。
  • Service:Tomcat 封装的、对外提供完整的、基于组件的 web 服务, 包含Connectors、Container 两个核心组件,以及多个功能组件,各 个 Service 之间是独立的,但是共享同一JVM的资源;Service是服务的抽象,它代表请求从接受到处理的所有组件的集合,形成一个独立完整的处理单元,对外提供服务。每个Service组件都包含了若干用于接受客户端消息的Connector组件和处理请求的Engine组件。其中,不同的Connector组件使用不同的通信协议,如HTTP协议和AJP协议。此外,Service组件还包含了若干Executor组件,每个Executor都是一个线程池,它可以为Service内所有组件提供线程池执行任务。一般情况下不需要配置多个Service,Tomcat默认配置了一个“Catalina”的<Service>
  • Connector:Tomcat 与外部世界的连接器,监听固定端口接收外部请求,根据协议来封装创建Request、Response对象用于请求的数据交换,传递给 Container,并将Container处理的结果返回给外部;它接收客户端连接并接收消息报文,消息报文经由它解析后送完容器中处理。不同的通信协议,例如HTTP协议,AJP协议,都对应一个Connector。
  • Protocol:是协议的抽象,它包含接收客户端连接,接收客户端消息报文、报文解析处理、对客户端响应等整个过程。它主要包含Endpoint组件和Processor组件。启动时,Endpoint组件内部的Acceptor组件将启动某个端口的监听,一个请求到来后将被扔进线程池Executor,线程池进行任务处理,处理过程中将通过Processor组件对协议解析并传递到Engine容器继续处理。Mapper组件,客户端请求的路由导航组件,通过它能对一个完整的请求地址进行路由,即它能通过请求地址找到对应的Servlet。CoyoteAdaptor组件,一个将Connector和Container适配起来的适配器
  • Container:Servlet 容器,内部有多层容器组成,用于管理 Servlet 生命周期,调用 servlet 相关方法。                                                                                         
       Engine代表全局Servlet引擎,它可以包含若干Host容器组件。

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

  1.  AccessLog组件:客户端的访问日志,所有客户端访问都会被记录。
  2. Cluster组件:它提供集群功能,可以将Engine容器需要共享的数据同步到集群中的其他Tomcat实例上。
  3. Pipeline组件:Engine容器对请求进行处理的管道。
  4. Realm组件:提供了Engine容器级别的用户-密码-权限的数据对象,配合资源认证模块使   用。

      Context容器Web应用的抽象,我们开发的Web应用部署到Tomcat后运行时就会转化         为Context对象,它包含了各种静态资源,若干Servlet(Wrapper容器)以及各种其它动态资       源。

  1. Loader组件:Web应用加载器,封装了 Java ClassLoader,用于加载类文件。它用于加   载Web应用的资源,它要保证不同Web应用之间的资源隔离。
  2. Manage组件:会话管理器,用于管理对应Web容器的会话,包括维护会话的生成、更     新和销毁。
  3. NamingResource组件:命名资源,它负责将Tomcat配置文件的server.xml和Web应用   的context.xml资源和属性映射到内存
  4. Mapper组件:Servlet映射器,它属于Context内部的路由映射器,只负责该Context容     器的路由导航

       Wrapper容器与之对应的是Servlet,一个Wrapper对应一个Servlet

  1. Servlet组件:Servlet即Web应用开发常用的Servlet,我们会在Servlet中编写好请求的逻      辑处理。
  2. ServletPool组件:Servlet对象池,当Web应用的Servlet实现了SingleThreadModel接     口时则会在Wrapper中产生一个Servlet对象池。线程执行时,需要先从对象池中获取到     一个Servlet对象,ServletPool组件能保证Servlet对象的线程安全。
  3. Pipeline组件:Wrapper容器对请求进行处理的管道

   

类图:www.processon.com/view/link/5…

启动停止:www.processon.com/view/link/5…