Servlet引擎(例如Tomcat
或Jetty
)接收到HTTP请求并调用一个servlet,该servlet使用包含请求正文的HttpServletRequest
对象和InputStream
进行处理。
现在我想知道该引擎是否已经从网络中读取了整个请求,并且InputStream
只是内存中的缓冲区,还是它只读取了请求的一部分,当servlet调用InputStream.read
时,它实际上会读取套接字。
至少在POST请求的情况下,它必须这样做,以便可以从请求正文中的名称-值对形成requestParameterMap。
CoyoteInputStream
中读取流字节。
它 (CoyoteInputStream
) 从 InputBuffer
复制或读取字节流;
InputBuffer
从底层请求对象 CoyoteRequest
(该类为 org.apache.coyote.Request
) 中读取数据。
如果我们使用连接器 HTTP/1.1
,CoyoteRequest
从 Http11InputBuffer
中读取数据。
Http11InputBuffer
从 NIOSocketWrapper
中读取数据。
NIOSocketWrapper
从 NIOChannel
中读取数据。