- 事件管理
Tomcat的扩展机制,针对于容器与业务请求在各种场景下都通过对应的监听器来扩展
- 连接管理
- 请求管理
- 容器管理
容器的生命周期管理分为:容器的创建、容器的初始化、容器的启动、容器的暂停、容器的停止等..容器的组成分为:Server、Service、Engine、Wapper、PipeLine
- 应用管理
该部分主要描述应用程序如何被Tomcat识别、加载以及请求调用
- 总体架构
- 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 相关方法。
Host组件代表虚拟主机,这些虚拟主机可以存放着若干Web应用的抽象(Context容 器)。
- AccessLog组件:客户端的访问日志,所有客户端访问都会被记录。
- Cluster组件:它提供集群功能,可以将Engine容器需要共享的数据同步到集群中的其他Tomcat实例上。
- Pipeline组件:Engine容器对请求进行处理的管道。
- Realm组件:提供了Engine容器级别的用户-密码-权限的数据对象,配合资源认证模块使 用。
Context容器是Web应用的抽象,我们开发的Web应用部署到Tomcat后运行时就会转化 为Context对象,它包含了各种静态资源,若干Servlet(Wrapper容器)以及各种其它动态资 源。
- Loader组件:Web应用加载器,封装了 Java ClassLoader,用于加载类文件。它用于加 载Web应用的资源,它要保证不同Web应用之间的资源隔离。
- Manage组件:会话管理器,用于管理对应Web容器的会话,包括维护会话的生成、更 新和销毁。
- NamingResource组件:命名资源,它负责将Tomcat配置文件的server.xml和Web应用 的context.xml资源和属性映射到内存中
- Mapper组件:Servlet映射器,它属于Context内部的路由映射器,只负责该Context容 器的路由导航
Wrapper容器与之对应的是Servlet,一个Wrapper对应一个Servlet
- Servlet组件:Servlet即Web应用开发常用的Servlet,我们会在Servlet中编写好请求的逻 辑处理。
- ServletPool组件:Servlet对象池,当Web应用的Servlet实现了SingleThreadModel接 口时则会在Wrapper中产生一个Servlet对象池。线程执行时,需要先从对象池中获取到 一个Servlet对象,ServletPool组件能保证Servlet对象的线程安全。
- Pipeline组件:Wrapper容器对请求进行处理的管道
类图:www.processon.com/view/link/5…
启动停止:www.processon.com/view/link/5…