java servlet如何确认客户端接收到响应

java servlet如何确认客户端接收到响应,java,servlets,tcp,Java,Servlets,Tcp,我有一个java servlet,它处理来自客户端的HTTP GET请求。在处理一个请求之后,它会发回HTTP200OK,并且响应包含几百字节的数据 存在一种特定的错误情况,即客户端几乎在发送响应的同时断开与网络的连接。servlet将数据写入输出流,并刷新输出流,并且定时是这样的,在刷新输出流时,服务器不知道客户端未连接。(客户端和服务器之间的某个点突然切断了连接,因此客户端没有机会正确关闭TCP连接-服务器看不到TCP RST。) 问题是,servlet有没有办法检测到这种情况?我已经检查了

我有一个java servlet,它处理来自客户端的HTTP GET请求。在处理一个请求之后,它会发回HTTP200OK,并且响应包含几百字节的数据

存在一种特定的错误情况,即客户端几乎在发送响应的同时断开与网络的连接。servlet将数据写入输出流,并刷新输出流,并且定时是这样的,在刷新输出流时,服务器不知道客户端未连接。(客户端和服务器之间的某个点突然切断了连接,因此客户端没有机会正确关闭TCP连接-服务器看不到TCP RST。)

问题是,servlet有没有办法检测到这种情况?我已经检查了两件事:

  • 我不会在servlet中抛出任何异常。我希望这种情况会导致IOException,但这似乎没有发生
  • 我对用于写入客户端的PrintWriter调用PrintWriter.checkError(),即使出现这种错误情况,它也会返回false(无错误)
  • 因此,据我所知,服务器无法知道发生了这种情况。但在我看来,这应该是可能的,因为缺少来自客户端TCP堆栈的确认。但是,这可能没有向servlet公开


    不确定这是否重要,但我使用的是Tomcat 7.0.26。

    它不能。容器可以完全缓冲响应,并且只有在Servlet代码退出后才能写入响应


    您不能依赖于将响应接收到应用程序中的客户端。这叫做幂等性:查一查。

    EJP谢谢你的回答。我想我理解幂等性的概念,但是你能详细说明“不能建立任何依赖”是什么意思吗?我的理解是,并非所有HTTP方法都需要幂等,例如POST。