Tomcat容器结构 = 四大容器 + 连接器
执行顺序:
浏览器 -> tomcat server-> service ->connector -> engine(引擎) -> host(主机) -> web应用
Server:
Tomcat中最顶层的容器是Server,代表着整个服务器,一个Tomcat中只有一个Server从上图中可以看出,一个Tomcat中只有一个Server,用于具体提供服务,且整个 Tomcat 的生命周期由 Server 控制。
一个Server可以包含多个Service。
Service:
Service主要包含两个部分:Connector和Container。即:Tomcat容器结构 = 四大容器 + 连接器, Tomcat 的心脏就是这两个组件,他们的作用如下:
1、Connector用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;
2、Container用于封装和管理Servlet,以及具体处理Request请求;
一个Service只有一个Container,但是可以有多个Connectors,这是因为一个服务可以有多个连接,也可以提供向相同协议不同端口的连接。
Connector:
Connector用于接受请求并将请求封装成Request和Response,然后交给Container进行处理,Container处理完之后在交给Connector返回给客户端。
Connector的结构图:
ProtocolHandler + Acceptor 来完成接受请求和交互给Container的工作的,具体来书,Connector由包含了三个部件:Endpoint、Processor、Adapter。
-
ProtocolHandler
(1)AbstractEndpoint
AbstractEndpoint具体实例是Endpoint,Endpoint用来处理底层Socket的网络连接,在AbstractEndpoint里面定义的Acceptor和AsyncTimeout两个内部类和一个Handler接口。
Acceptor用于监听请求.
Handler用于处理接收到的Socket,在内部调用Processor进行处理。
AsyncTimeout用于检查异步Request的超时.
(2)Processor
Processor用于将Endpoint接收到的Socket封装成Request。注意:Endpoint 和 Processor他们处理的协议是不同的。
Endpoint由于是处理底层的Socket网络连接,因此Endpoint是用来实现 TCP/IP协议的。
Processor用来实现HTTP协议的。 -
Adapter
Adapter用于将Request交给Container进行具体的处理。就是将Request请求适配到Servlet容器进行具体的处理过程。
Container容器( Tomcat的四大容器:Engine、Host、Context、Wrapper)
Container的结构图:
Engine:
Engine用来管理多个站点,一个Service最多只能有一个Engine;
Engine是Servlet处理器的一个实例,即servlet引擎,默认为定义在server.xml中的Catalina。Engine需要defaultHost属性来为其定义一个接收所有请求的虚拟主机host组件。
Host:
Host代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点;
Host是Engine的子容器。一个 Host 在 Engine 中代表一个虚拟主机,这个虚拟主机的作用就是运行多个应用、接收并处理请求、保存一个主机应该有的信息。
Context:
一个Context代表一个应用程序,或者一个WEB-INF目录以及下面的web.xml文件。
Context 代表 Servlet 的 Context,它具备了 Servlet 运行的基本环境,理论上只要有 Context 就能运行 Servlet 了。简单的 Tomcat 可以没有 Engine 和 Host。Context 最重要的功能就是管理它里面的 Servlet 实例,Servlet 实例在 Context 中是以 Wrapper 出现的,还有一点就是 Context 如何才能找到正确的 Servlet 来执行它呢? Tomcat5 以前是通过一个 Mapper 类来管理的,Tomcat5 以后这个功能被移到了 request 中,在前面的时序图中就可以发现获取子容器都是通过 request 来分配的
Wrapper:
每一Wrapper封装着一个Servlet;
一个Wrapper 代表一个 Servlet,它负责管理一个 Servlet,包括Servlet 的装载、初始化、执行以及资源回收。
Wrapper 是最底层的容器。
Wrapper 的实现类是 StandardWrapper,StandardWrapper 还实现了 ServletConfig,由此看出 StandardWrapper 将直接和 Servlet 的各种信息打交道。