我有一个处理来自客户端的 HTTP GET 请求的 java servlet。处理完请求后,它会发回 HTTP 200 OK,响应中包含几百字节的数据。
有一个特定的错误情况,即客户端几乎在发送响应的同时与网络断开连接。数据由servlet写入输出流,输出流被flush,时序是flush输出流的时候,server不知道client没有连接。(连接被客户端和服务器之间的某个点突然切断,因此客户端没有机会正确关闭 TCP 连接 - 服务器看不到 TCP RST。)
问题是,servlet 有没有办法检测到这种情况?我已经检查了两件事:
- 我没有在 servlet 中抛出任何异常。我希望这种情况会导致 IOException ,但这似乎没有发生。
- 我在用于写入客户端的 PrintWriter 上调用 PrintWriter.checkError(),即使发生此错误情况,它也会返回 false(无错误)。
据我所知,服务器没有办法知道这种情况发生。但在我看来,这应该是可能的,因为缺乏来自客户端 TCP 堆栈的确认。但也许这并没有暴露给 servlet。
不确定是否重要,但我使用的是 Tomcat 7.0.26。