Tomcat——Tomcat处理请求流程

2021-11-13  本文已影响0人  小波同学

前言

tomcat从架构上看,包含Service,Engine,Host,Context,Wrapper。那么,当用户发起一个请求时,tomcat是如何将url映射到具体的Wrapper上的呢?

Mapper组件机制

Tomcat 设计了 Mapper(映射)组件 完成 url和Host、Context、Wrapper等组件容器的映射。

Mapper组件的核心功能是提供请求路径的路由映射,根据某个请求路径通过计算得到相应的Servlet(Wrapper)。

与url到Wrapper映射相关的类位于org.apache.catalina.mapper包下,包含四个类:

Mapper主要功能是完成url到Wrapper的映射,有三个主要的功能

总体结论

一个Service有一个Engine,而一个Engine中有一个Mapper。根据Engine,Host,Context及Wrapper的对应关系,易得到以下的结论。

因此,Mapper的构成可以用下图表示


当一个请求到来时,Mapper组件通过解析请求URL里的域名和路径,再到自己保存的
Map里去查找,就能定位到一个Servlet。请你注意,一个请求URL最后只会定位到一个
Wrapper容器,也就是一个Servlet。

从Tomcat的设计架构层面来分析Tomcat的请求处理。

步骤如下:

请求流程源码解析

在Tomcat的整体架构中,我们发现Tomcat中的各个组件各司其职,组件之间松耦合,确保了整体架构的可伸缩性和可拓展性,那么在组件内部,如何增强组件的灵活性和拓展性呢? 在Tomcat中,每个Container组件采用责任链模式来完成具体的请求处理。

在Tomcat中定义了Pipeline 和 Valve 两个接口,Pipeline 用于构建责任链, 后者代表责
任链上的每个处理器。Pipeline 中维护了一个基础的Valve,它始终位于Pipeline的末端
(最后执行),封装了具体的请求处理和输出响应的过程。当然,我们也可以调用
addValve()方法, 为Pipeline 添加其他的Valve, 后添加的Valve 位于基础的Valve之
前,并按照添加顺序执行。Pipiline通过获得首个Valve来启动整合链条的执行 。

未完待续。。。。。。

参考:
https://www.cnblogs.com/wansw/p/10244039.html

https://blog.csdn.net/nblife0000/article/details/60364847

https://blog.csdn.net/jiaomingliang/article/details/47414657

https://blog.csdn.net/nmjhehe/article/details/115533383

上一篇下一篇

猜你喜欢

热点阅读