Tomcat

Tomcat之CoyoteAdapter源码分析

2020-05-23  本文已影响0人  loveFXX

处理请求接入点


image.png
service

org.apache.catalina.connector.CoyoteAdapter#service
这里传入的request是org.apache.coyote.Request类型,是从Socket读取数据后设置的包含各种MessageBytes类型的对象。CoyoteAdapter是处理这种请求Request的一个委托类
Request和Response分别在两个不同的包
org.apache.coyote.Request、rg.apache.coyote.Response
org.apache.catalina.connector.Request、org.apache.catalina.connector.Response


image.png

①、应用层面的请求和相应对象设置属性值。
创建对象,连接对象,设置请求数据的解码


image.png
②、解析请求postParseRequest
底层适配类CoyoteAdapter解析底层(coyote包下)req、res,并配置Catalina和应用层request、response的属性值
image.png
③、容器调用invoke
设置同步支持(如果支持异步的话)
image.png

postParseRequest

解析和设置Catalina 和配置的请求参数
1、schemeMB和secure设置
req.schemeMB=http和request.secure=false


image.png

2、proxyPort/proxyHost设置


image.png
3、请求uriMB
image.png
4、decodedUriMB设置
image.png

parsePathParameters方法解析路径参数,删除路径参数并转换成字节
url解码,


image.png
5、serverName获取
image.png
6、version
image.png
7、request.mappingData设置
image.png
这里org.apache.catalina.connector.Request#mappingData属性值都是null
7.1、map
image.png
7.2、internalMap
①、映射指定的uri

org.apache.catalina.mapper.Mapper#internalMap


image.png
②、获取mappedHost
image.png
③、mappingData.host赋值
image.png
④、Context映射
image.png
image.png
⑤、contextPath设置
image.png
⑥、context和contextSlashCount设置
image.png
⑦、Wrapper设置
image.png
对path请求进行截取/testservlet/hello 到/hello
image.png
Match匹配规则

Rule 1 精确匹配 -- Exact Match


image.png

对requestPath、wrapper、wrapperPath、matchType=MappingMatch.EXACT赋值(path=/hello不是仅仅一个/)。如果仅仅一个/则matchType=MappingMatch.CONTEXT_ROOT


image.png
Rule 2 前缀匹配 -- Prefix Match
image.png
image.png

Rule 3 扩展匹配-- Extension Match


image.png
Rule 4 对servlet资源处理-- Welcome resources processing for servlets
image.png
image.png
image.png
image.png
文件处理
image.png
Rule 7 默认servlet-- Default servlet
image.png
image.png

映射之后设置


image.png
org.apache.catalina.connector.Request#mappingData映射之后
image.png
8、session处理
image.png
mapRequired = false 结束while循环
image.png
9、请求被暂停,mappingData映射数据被重置
image.png
10、redirect重定向
image.png
11、Filter trace method
image.png
12、doConnectorAuthenticationAuthorization
image.png
org.apache.coyote.Request#remoteUser是否被设置
image.png
org.apache.coyote.Request#authType是否被设置
image.png

invoke

调用容器

总结:

CoyoteAdapter类就是把org.apache.coyote.Request类(接近Socket底层类,可以简单理解为传输层)转换到org.apache.catalina.connector.Request类(可以简单理解为应用层)的过程。
具体实现就是匹配map,设置到connector.Request.mappingData属性值中

上一篇下一篇

猜你喜欢

热点阅读