Java servlet容器在调用doPost之前是否等待接收到完整的HTTP请求?

Java servlet容器在调用doPost之前是否等待接收到完整的HTTP请求?,java,jsp,servlets,Java,Jsp,Servlets,servlet容器何时调用doPost/doGet方法?在开始处理之前,它是否等待从web客户端接收完整的请求。或者在接收到HTTP头并识别HTTP请求的方法(POST、GET等)之后,它调用方法(doPost或doGet) 我的问题与下面链接中的问题完全相同: 但除此之外,假设servlet容器在识别HTTP方法和内容长度后立即调用doPost/doGet方法,那么如果web客户端在将完整的HTTP请求发送到web服务器/servlet容器之前终止,会发生什么情况呢。servlet线程如何意

servlet容器何时调用doPost/doGet方法?在开始处理之前,它是否等待从web客户端接收完整的请求。或者在接收到HTTP头并识别HTTP请求的方法(POST、GET等)之后,它调用方法(doPost或doGet)

我的问题与下面链接中的问题完全相同:


但除此之外,假设servlet容器在识别HTTP方法和内容长度后立即调用doPost/doGet方法,那么如果web客户端在将完整的HTTP请求发送到web服务器/servlet容器之前终止,会发生什么情况呢。servlet线程如何意识到收到的请求不完整。

我认为没有收到完整的内容,您得到的是一个可以从中读取内容的流

servlet线程如何知道接收到的请求未完成


好的,您有内容长度,这就是当请求时容器必须从流中读取的量,如果流由于某种原因不可用,容器将抛出异常。如果在您收到所有数据后客户端断开连接,则情况相同;在写回之前,您不会知道客户端已断开连接。

Servlet规范没有指定这一点。每个Servlet容器都可以选择以任何方式实现该行为。您想知道哪个Servlet容器?我想为Tomcat了解它。这是为了回答我自己的问题-Servlet线程如何知道接收到的请求不完整?当Servlet容器接收到HTTP头时,基于接收到的HTTP头,它调用doPost/doGet方法。它不会等待收到完整的请求(如内容长度所示)。如果应用程序开发人员调用了getParameter或其变体,那么此时,该方法将等待直到收到完整的请求。如果web客户端未发送完整请求就关闭,则getParameter返回null。应用程序开发人员需要明确地处理这个场景。我个人的意见是,getParameter应该有一种方法来判断这是一个网络I/O错误,而不是返回null。最好抛出一个异常。有什么想法吗?