美文网首页Tomcat
Tomcat之CoyoteAdapter源码分析

Tomcat之CoyoteAdapter源码分析

作者: loveFXX | 来源:发表于2020-05-23 12:39 被阅读0次

    处理请求接入点


    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属性值中

    相关文章

      网友评论

        本文标题:Tomcat之CoyoteAdapter源码分析

        本文链接:https://www.haomeiwen.com/subject/pngpohtx.html