tomcat顶层架构
Server
服务器的意思,代表整个tomcat服务器,一个Tomcat就只有一个Server
在整个Tomcat中,我们讲的都是一个抽象,抽象在源码中都是接口 具体实现一般都是“StandardXXX”。MBeanRegistration这个类是完成JMX的功能,就是我们俗称的监控管理功能,之前我们讲的使用jconsole查看Tomcat也就是通过JMX玩的
StandardServer的类图如上图所示,除了实现Server接口还需要继承LifeCycLe,这样的好处是生命周期统一接口LifeCycle吧所有的启动 停止 关闭都放在一起统一管理。
Service
Server中的一个逻辑功能层,一个Server包含多个Service
Service中请求监听和请求处理分为两个模块,
- connector:负责监听请求
- Container:负责处理请求
一个Service可能有多个Connector但是只有一个Container
Connector
称作连接器,是Service的核心组件之一,一个Service可能会有多个Connnector,主要负责客户连接请求
Connector使用ProtocolHanlder来处理请求,其中包含了三个组件
- Endpoint:用于底层的Socket网络连接
- Processor:将EndPoint接收到的Socket封装称Request
- Adpeter:充当适配将Request转化为HttpServletRequest交给Container处理
Container
Service的另一个核心组件,按照层级有Engine,Host,Context,Wrapper四种,其主要执行业务逻辑
- Engine:引擎,只有一个。定义一个名为Catalina的引擎
- Host:站点,虚拟主机,一个Engine包含多个Host的设计使得,一个服务器的实力可以承担多个域名的服务,是很灵活的设计。
- Context:一个应用,默认配置下,wabapps下面的每个目录机会一个应用
- Wrapper:一个Servlet
Jasper
JSP引擎
Session
会话管理;
……
Tomcat启动流程

Tomcat的启动大家一看好像比我们之前多了两个东西出来了,一个是bootstrap,一个是catalina。首先只有bootstrap中有main方法。我整体去看启动过程可以分为两个阶段,这样看的话就比较容易了。我们使用切割话,找到黄金切割线,这个service这里就是一个黄金切割线。左边的,就包含前面讲的server和service,后面的就是具体的很细的组件了。都可以看出,左边都是为了加载service,右边的serivce会引发三个动作,一个是启动engine,一个是启动connector,最后一个是启动executor也就是执行现场。这样看的话,整体的启动流程就非常清爽了
Lifecycle与模板方法模式:Tomcat的启动过程中Catalina调用StandardService中的start()方法,但是StandardService自身没有start()方法.