一、请求处理大致过程
(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请求;