检测tomcat servlet中的客户端断开?
我如何检测tomcat servlet请求的客户端已经断开? 我读过,我应该做一个response.getOutputStream()。print(),然后一个response.getOutputStream()。flush()并捕获一个IOException,但有没有办法检测到这种情况,而不写任何数据?
编辑 :
servlet发出的数据stream不一定结束,但不一定有任何数据stream过(这是一个实时事件stream)。 我需要实际检测客户端何时断开连接,因为在这一点上我需要做一些清理工作(释放资源,等等)。 如果我有HttpServletRequest可用,将试图读取,抛出一个IOException,如果客户端断开连接?
有没有一种方法可以检测到这一点,而不写任何数据?
没有,因为没有写入任何数据的TCP / IP检测方法。
别担心。 只需完成请求操作并编写响应即可。 如果客户端已经消失,那么会导致一个IOException:连接重置,它将被抛入到servlet容器中。 没有什么你必须做的。
我需要实际检测客户端何时断开连接,因为在这一点上我需要做一些清理工作(释放资源,等等)。
有finally
块是为了。 无论结果如何,它都会被执行。 例如
OutputStream output = null; try { output = response.getOutputStream(); // ... output.flush(); // ... } finally { // Do your cleanup here. }
如果我有HttpServletRequest可用,将试图读取,抛出一个IOException,如果客户端断开连接?
取决于你如何阅读,请求正文已经在服务器内存中。 如果是正常forms的编码请求,每当事先调用getParameter()
,通常都会被完全parsing并存储在服务器内存中。 调用getInputStream()
将getInputStream()
。 相反,最好在响应上做。
您是否尝试刷新响应的缓冲区:response.flushBuffer(); 似乎在客户端断开连接时抛出IOException。