如何检测tomcat请求的客户端断开连接?我已经读到应该执行response.getOutputStream().print(),然后执行response.getOutputStream().flush()并捕获IOException,但是有什么方法可以不用写任何数据就检测到呢?
编辑
servlet发送的数据流不一定结束,但不一定有任何数据流通过它(这是一个实时事件流)。我需要实际检测客户端断开连接的时间,因为此时我需要进行一些清理(需要发布的资源,等等)。如果我有可用的HttpServletRequest,如果客户端断开连接,会尝试从其中读取抛出的IOException吗?
发布于 2010-06-03 00:10:12
,我是否可以在不写任何数据的情况下检测到这一点?
不是,因为TCP/IP中没有一种无需写入任何数据就可以检测它的方法。
不必为那事担心了。只需完成请求操作并编写响应即可。如果客户端已经消失,这将导致IOException: connection重置,它将被抛到servlet容器中。对此你没什么好做的。
发布于 2010-06-03 11:37:06
需要在客户端断开连接时进行实际检测,因为此时我必须进行一些清理(需要发布的资源,等等)。
finally块的作用就在这里。无论结果如何,它都将被执行。例如。
OutputStream output = null;
try {
output = response.getOutputStream();
// ...
output.flush();
// ...
} finally {
// Do your cleanup here.
}--如果我有可用的HttpServletRequest,如果客户端断开连接,会尝试从其中读取抛出的IOException吗?
这取决于您是如何从它读取的,以及服务器内存中已经有多少请求体。在正常形式编码请求的情况下,每当事先调用getParameter()时,通常都会将其完全解析并存储在服务器内存中。调用getInputStream()一点用处都没有。最好是在回应上做。
发布于 2012-02-11 11:34:24
您是否尝试刷新响应的缓冲区: response.flushBuffer();似乎在客户端断开连接时抛出一个IOException。
https://stackoverflow.com/questions/2962196
复制相似问题