当用户请求某个url资源时
- HTTP胡武器会把请求信息使用ServletRequest对象封装起来
- 进一步去调用Servlet容器中某个具体的Servlet(根据URL和Servlet的映射关系,找到相应的Servlet)
- 如果Servlet还未被加载,就用反射机制创建这个Servlet,并调用Servlet的init方法完成初始化
- 接着调用这个具体Servlet的service方法来处理请求,请求处理结果使用ServletReponse对象封装
- 把ServletResponse对象返回给HTTP服务器,HTTP服务器会把响应发送给客户端
tomcat是一个http服务器也是一个servlet容器
2、Tomcat总体架构tomcat设计了两个核心组件连接器(Connector)和容器(Container)来完成Tomcat的两大核心功能
- 连接器(Connector):负责对外交流,处理Socket连接,负责网络字节流与request和response对象的转换
- 容器(Container):负责内部处理,加载和管理servlet,以及具体处理Request请求
Coyote是tomcat中连接器的组件名称,是对外的接口,客户端通过Coyote与服务器建立连接,发送请求并接受响应
- Coyote封装了底层的网络通信(Socket请求及网络处理)
- Coyote使Catalina容器与具体的请求协议及IO操作完全解耦
- Coyote将Socket输入转换封装为Request对象,进一步封装后交由Catalina容器进行处理,处理请求完成后,
catalina通过Coyote提供的Response对象将结果写入输出流 - Coyote负责的是具体协议(应用层)和IO(传输层)相关内容
请求来临时通过ProtocolHandler将请求封装为Tomcat原生Request对象,再通过Adapter转化为ServletRequest交给Container处理
| 组件 | 作用 |
|---|---|
| EndPoin | EndPoin是Coyote通信端点,即通信监听接口,是具体Socket接收和发送处理器, 是对传输层的抽象,因此EndPoin用来实现TCP/IP协议 |
| Processor | Processor是Coyote协议处理接口,如果说EndPoint是用来实现TCP/IP协议,那么 Processor用来实现HTTP协议,Processor接收来自EndPoint的socket,读取字节流 解析成Tomcat Request对象 |
| ProtocolHandler | Coyote协议接口,通过EndPoint和Processor,实现针对具体协议的处理能力。 |
| Adapter | 由于协议不同请求信息也不尽相同,Tomcat定义了自得Request类来封装这些请求信息。 CoyoteAdapter负责将Tomcat Request转成ServletRequest,再调用容器 |
- Tomcat是由一系列可配置的(conf/server.xml)组件构成的Web容器,而Catalina是Tomcat的Servlet容器
其实,可以认为整个Tomcat就是一个Catalina实列,Tomcat启动的时候会初始化这实列,Catalina实列通过加载server.xml完成其他实列的创建,
创建并管理Server,Server创建并管理多个服务,每一个服务又可以有多个Connector和一个Container
一个Catalina实列
一个Server实列
多个Service实列
每个Service实列下可以有多个Connector实列和一container实列
-
Catalina
负责解析Tomcat的配置文件,一次来创建服务器Server组件并进行管理 -
Server
服务器表示整个Catalina Servlet容器以及其他组件,负责组装并启动Serlet引擎,Tomcat连接器,Servlet用过实现Lifecycle接口
提供一种优雅的启动和关闭整个系统的方式 -
Service
服务是Server内部组件,一个Server包含多个Service。它将若干个Connector -
Container
容器,负责处理用户的Servlet请求,并返回队形给Web用户的模块- Engine
表示整个Catalina的Servlet引擎,用来管理多个虚拟站点,一个Service最多只能有一个Engine,但是一个引擎可包含多个Host - Host
代表一个虚拟主机,或者说一个站点,可以给Tomcat配置多个虚拟主机地址,而一个虚拟主机下可包含多个Context - Context
表示一个web应用程序,一个Web应用可包含多个Wrapper - Wrapper
表示一个Servlet,Wrapper作为容器中的最底层,不能包含子容器
- Engine
Server标签
Service标签...
Executor标签...
Connector标签
Engine标签
Host标签...
Context标签...



