Tomcat源码五:读取、解析、封装一个请求

版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在页面明显位置给出原文链接。 https://blog.csdn.net/mengxiangqihangz/article/details/88543306


前一篇 到了 Http11NioProcessor 的process一个SocketWrapper(就是KeyAttachment实例)

读取数据

======================================================
此段也可以不了解,直接通过debug,一步一步走下去,不跨线程不影响理解
Http11NioProcessor 继承了 AbstractHttp11Processor 继承了AbstractProcessor

  • 构造方法
    在这里插入图片描述
    在这里插入图片描述
    也就是process 与 inputBuffer 、outputBuffer 、request 和response 是绑定死的,而不是外部传入的
    ======================================================

Http11NioProcessor

  • AbstractHttp11Processor 的process()
    在这里插入图片描述
    读取数据,并不是Http11NioProcessor 自己读取,而是交由 InternalNioInputBuffer 进行真正的读取
  • InternalNioInputBuffer parseRequestLine()
    在这里插入图片描述
    fill方法,可以理解为装填。就是把 通道中的数据读取到 buf 中。 然后开始解析buf
  1. request 的methodMB
    在这里插入图片描述
  2. 解析请求路径和参数
    在这里插入图片描述
  3. protocol
    在这里插入图片描述
  • InternalNioInputBuffer parseHeaders
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
5. parseHeaders 小结
在这里插入图片描述
最终解析的结果如上图,就是将读取的数据,封装到processor 的inputBuffer 中的headers中。
MimeHeaderField 中含两个属性 nameB、valueB 刚好相当于键值对

===》 至此读取数据完成

猜你喜欢

转载自blog.csdn.net/mengxiangqihangz/article/details/88543306
今日推荐