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

时间:2013-04-22 19:58:14

标签: java servlets tcp

我有一个java servlet来处理来自客户端的HTTP GET请求。处理完请求后,它会发回HTTP 200 OK,响应中包含几百个字节的数据。

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

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

  1. 我没有在servlet中抛出任何异常。我希望这种情况会导致IOException,但似乎没有发生。
  2. 我在用于写入客户端的PrintWriter上调用PrintWriter.checkError(),即使出现此错误情况,它也会返回false(无错误)。
  3. 据我所知,服务器无法知道这种情况。但在我看来,它应该可能基于客户端的TCP堆栈缺乏确认。但也许这不会暴露给servlet。

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

1 个答案:

答案 0 :(得分:0)

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

您不得依赖于在您的应用程序中收到响应的客户。这称为幂等性:查找它。