【Tomcat】之 总体架构(1.2)
一、请求处理大致过程
(1)原始
Tomcat
是一个 Http
服务器
能够接收并且处理
http
请求, 所以tomcat
是一个http
服务器
使用浏览器向某一个网站发起请求, 发出的是 Http
请求, 那么在远程, Http
服务器接收到这个请求之后, 会调用具体的程序(Java
类)进行处理, 往往不同的请求由不同的 Java
类完成处理。
如图:
如果 HTTP 服务器(
tomcat
)直接调用业务处理类完成业务处理的话存在一定问题:tomcat
和 业务类耦合在一起了。
(2)改进
如图:
HTTP
服务器接收到请求之后把请求交给 Servlet
容器来处理, Servlet
容器通过 Servlet
接口调用业务类。
Servlet
接口和 Servlet
容器这一整套内容叫作 Servlet
规范。
注意:
Tomcat
既按照Servlet
规范的要求去实现了Servlet
容器, 同时它也具有HTTP
服务器的功能。
Tomcat
的两个重要身份:
-
http
服务器 -
Tomcat
是一个Servlet
容器
二、Servlet
容器处理流程
如图:
当用户请求某个 URL
资源时:
-
HTTP
服务器会把请求信息使用ServletRequest
对象封装起来 - 进一步去调用
Servlet
容器中某个具体的Servlet
- 在 2 中,
Servlet
容器拿到请求后, 根据URL
和Servlet
的映射关系, 找到相应的Servlet
- 如果
Servlet
还没有被加载, 就用反射机制创建这个Servlet
, 并调用Servlet
的init
方法来完成初始化 - 接着调用这个具体
Servlet
的service
方法来处理请求, 请求处理结果使用ServletResponse
对象封装 - 把
ServletResponse
对象返回给HTTP
服务器,HTTP
服务器会把响应发送给客户端。
三、系统总体架构
通过上面发现 tomcat
有两个非常重要的功能需要完成:
- 和客户端浏览器进行交互, 进行
socket
通信, 将字节流和Request/Response
等对象进行转换 -
Servlet
容器处理业务逻辑
如图:
Tomcat
设计了两个核心组件连接器(Connector
)和容器(Container
)来完成 Tomcat
的两大核心功能。
- 连接器, 负责对外交流
处理
Socket
连接, 负责网络字节流与Request
和Response
对象的转化;
- 容器, 负责内部处理
加载和管理
Servlet
, 以及具体处理Request
请求;