tomcat的架构图大概是这样的规律,
一个server有多个servcie,
一个service分为conector、container、realm、logging、sesssion、jspaer等组件,
connector分为http/ajp的connector,
container有一个engine,
一个engine有多个host,
一个host有多个context,
一个context有多个wrapper,
host对应的就是虚拟服务,context对应的就是一个web应用,wrapper对应着一个servlet。
接下来再看图,结构大概是这样子。
其实在connector内部还有好多组件,比如 protocol 、endpoint 、acceptor等。读了源码之后梳理的大概逻辑如下,做个笔记,箭头指向是依赖调用链路。
图可能不太清晰,附上plantuml源码。
@startuml Client -> Connector Connector -> Http11Protocol Http11Protocol -> JioEndpoint JioEndpoint -> Acceptor Acceptor -> SocketProcessor SocketProcessor -> Http11ConnectionHandler Http11ConnectionHandler -> Http11Processor Http11Processor -> CoyoteAdaptor: 这开始处理Tomcat 的request和response。 CoyoteAdaptor -> PipeLine: pipeline通过链式处理把请求 从connector发到container处理。 PipeLine -> StandardEngine: 实际上是StandardEngineValue StandardEngine -> StandardHost: 实际上是StandardHostValue StandardHost -> StandardContext: 实际上是StandardContextValue StandardContext -> StandardWrapper: 实际上是StandardWrapperValue StandardWrapper -> Servlet: wrapper交给servlet处理请求 @enduml