首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在tomcat中检测客户端断开?

在tomcat中检测客户端断开?
EN

Stack Overflow用户
提问于 2010-06-02 22:55:24
回答 3查看 10.5K关注 0票数 11

如何检测tomcat请求的客户端断开连接?我已经读到应该执行response.getOutputStream().print(),然后执行response.getOutputStream().flush()并捕获IOException,但是有什么方法可以不用写任何数据就检测到呢?

编辑

servlet发送的数据流不一定结束,但不一定有任何数据流通过它(这是一个实时事件流)。我需要实际检测客户端断开连接的时间,因为此时我需要进行一些清理(需要发布的资源,等等)。如果我有可用的HttpServletRequest,如果客户端断开连接,会尝试从其中读取抛出的IOException吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-03 00:10:12

,我是否可以在不写任何数据的情况下检测到这一点?

不是,因为TCP/IP中没有一种无需写入任何数据就可以检测它的方法。

不必为那事担心了。只需完成请求操作并编写响应即可。如果客户端已经消失,这将导致IOException: connection重置,它将被抛到servlet容器中。对此你没什么好做的。

票数 9
EN

Stack Overflow用户

发布于 2010-06-03 11:37:06

需要在客户端断开连接时进行实际检测,因为此时我必须进行一些清理(需要发布的资源,等等)。

finally块的作用就在这里。无论结果如何,它都将被执行。例如。

代码语言:javascript
复制
OutputStream output = null;
try {
    output = response.getOutputStream();
    // ...
    output.flush();
    // ...
} finally {
    // Do your cleanup here.
}

--如果我有可用的HttpServletRequest,如果客户端断开连接,会尝试从其中读取抛出的IOException吗?

这取决于您是如何从它读取的,以及服务器内存中已经有多少请求体。在正常形式编码请求的情况下,每当事先调用getParameter()时,通常都会将其完全解析并存储在服务器内存中。调用getInputStream()一点用处都没有。最好是在回应上做。

票数 5
EN

Stack Overflow用户

发布于 2012-02-11 11:34:24

您是否尝试刷新响应的缓冲区: response.flushBuffer();似乎在客户端断开连接时抛出一个IOException。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2962196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档