整体流程
浏览器发送请求到Http服务器,Http服务器将请求封装为Request,然后去Servlet服务器,Servlet服务器根据Request去找到需要去那个Servlet执行业务处理
简介
Tomcat 设计了两个核心组件Connector(连接器)和Container(容器)和实现来完成Tomcat的核心功能
Connector(连接器):对应Http服务器,负责与客户端建立连接,接收客户端去请求封装ServletRequest,将服务端响应信息封装返回
Container(容器):对应Servlet服务器,通过ServletRequest中封装的信息,url对应的Servlet进行业务处理,将处理结果交给连接器进行处理
Tomcat 连接器组件 Coyote
Coyote是Tomcat的连接器组件,是与客户端建立连接,接收客户端的请求封装为ServletRequest,以及对于客户端响应进行封装返回给客户端
EndPoint:EndPoint是Coyote的通信节点,监听通信端口,是直接与客户端进行连接的,客户端通过Socket接收客户端请求和返回服务端的相应信息,是对传输层的实现,这一层实现了TCP/IP协议,来对于请求相应做相应的处理
Processor:这一层是对于Http的实现,Processor接收来自EndPoint的Socket信息,读取请求的输入流信息,将IO流中的Http请求头解析成Request,返回服务端的相应信息,就是将Response信息解析成Http响应头返回给客户端
ProtocolHandler:Coyote协议接口,通过EndPoint和Processor,实现针对具体协议的处理能力,Tomcat按照协议和I/O提供了六个实现类:AjpNioProtocol ,AjpAprProtocol, AjpNio2Protocol , Http11NioProtocol ,Http11Nio2Protocol ,Http11AprProtocol
Adapter:通过ProtocolHandler解析之后的Request解析成ServletRequest,在这里需要将Request封装为ServletRequest
Tomcat Servlet 容器Catalina
Catalina是整个Tomcat的核心功能,Tomcat在启动的时候就会初始化这个实例,通过加载 server.xml 来进行容器的创建各个容器
Catalina
负责解析Tomcat的配置文件(server.xml),以此来创建服务器Server组件并继续管理
Server
服务器标识整个CatalinaServlet容器以及其他组件,负责组装并启动Servlet引擎,Tomcat连接器,Server通过Ligecycle接口,提供了一种优雅的启动和关闭整个系统的方式
Service
服务是Server内部的组件,一个Server包含多个Service,它将若干个Connector组件绑定到一个Container
Container
容器,负责处理用户的Servlet请求,并返回对象给web用户的模块
Container组件的具体结构
Container组件有一下几种具体的组件,分别是Engine,Host,Context,Wrapper,这四种组件(容器)是父子关系,Tomcat通过一种分层结构,使得Servlet容器具有很好的灵活性
Engine
表示整个Catalina的Servlet引擎,用来管理多个虚拟站点,一个Service最多只能有一个Engine,但是一个引擎可以包含多个Host
Host
代表一个虚拟主机,或者说一个站点,可以给Tomcat配置多个虚拟主机地址,而一个虚拟主机下可包含多个Context
Context
一个Context表示一个web应用程序,一个Context可以包含多个Wrapper
Wrapper
表示一个Servlet,Wrappe作为容器中的最底层不能包含子容器