tomcat架构

tomcat架构

起男 1,418 2020-09-01

tomcat架构

tomcat最顶层是server,一个server有多个service,一个service有多个连接器和一个容器,连接器和容器通过ServletRequest和ServletResponse通信

  • Server:指的就是整个tomcat服务器,包含多组服务,负责管理和启动service,同时监听8005端口发过来的shutdown命令,用于关闭整个容器
  • Service:tomcat封装的对外提供完整的、基于组件的web服务,包含Connectors、Container两个核心组件。以及多个功能组件,各个Service之间是独立的,但是共享同一jvm资源
  • Connector:tomcat与外部世界的连接器,监听固定端口接收外部请求,传递给container,并将container处理的结果返回给外部
  • Container:servlet容器,内部有多层容器组成,用于管理servlet生命周期,调用servlet相关方法

启动流程

  1. startup.sh:启动jvm运行启动类Bootshrap
  2. Bootshrap:初始化类加载器,并实例化Catalina
  3. Catalina:解析server.xml并创建server组件
  4. Server:启动Service组件
  5. Service:启动容器和连接器组件

连接器Connector

作用

  1. 监听网络端口
  2. 接受网络请求
  3. 读取网络字节流
  4. 根据应用协议解析字节流,生成统一的tomcat request和tomcat response对象
  5. 将tomcat request对象转换成servletRequest
  6. 调用servlet容器,得到servletResponse
  7. 将servletResponse转换成tomcat response
  8. 将tomcat response转换成网络字节
  9. 将字节流回写给浏览器

执行流程

  1. Endpoint:负责提供字节流给Processor
  2. Processor:负责提供tomcat request对象给Adapter
  3. Adapter:提供ServletRequest给容器

注:Endpoint和Processor抽象组合在一起形成了ProtocolHandler组件

ProtocolHandler

Endpoint

  • 接口,抽象实现类是AbstractEndpoint,具体子类在NioEndpoint和Nio2Endpoint,其中两个重要组件:Acceptor和SocketProcessor
  • Acceptor用于监听Socket连接请求,SocketProcessor用于处理收到的Socket请求,提交到线程池Executor处理

Processor

  • 接受Endpoint的socket,读取字节流解析成tomcat request和response,通过adapter将其提交到容器处理。Processor的具体实现类AjpProcessor、Http11Processor实现了特定协议的解析方法和请求处理方法

Adapter

  • ProtocolHandler接口负责解析请求生成tomcat request,CoyoteAdapter的service方法,将tomcat request转成ServletRequest,再调用service方法

容器Container

层级结构

  • Engine:servlet的顶层容器,包含一个或多个host子容器
  • Host:虚拟主机,负责web应用的部署和context的创建
  • Context:web应用上下文,包含多个wrapper,负责web配置的解析,管理所有的web资源
  • Wrapper:最底层的容器,是对servlet的封装,负责servlet实例的创建,执行和销毁