检测tomcat servlet中的客户端断开连接?

Set*_*eth 9 java tomcat servlets

如何检测tomcat servlet请求的客户端是否已断开连接?我已经读过我应该做一个response.getOutputStream().print(),然后是一个response.getOutputStream().flush()并捕获一个IOException,但有没有办法可以检测到这个而不写任何数据?

编辑:

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

use*_*421 8

有没有办法可以在不写任何数据的情况下检测到这种情况?

不,因为TCP/IP没有办法在不写任何数据的情况下检测它.

别担心.只需完成请求操作并编写响应即可.如果客户端已经消失,那将导致IOException:connection reset,它将被抛入servlet容器中.你没有什么可以做的.

  • *"你没有什么可以做的."* - 你无能为力. (2认同)

Bal*_*usC 5

我需要实际检测客户端何时断开连接,因为我需要进行一些清理工作(要释放的资源,等等).

那个finally区块是为了.无论结果如何,都将执行.例如

OutputStream output = null;
try {
    output = response.getOutputStream();
    // ...
    output.flush();
    // ...
} finally {
    // Do your cleanup here.
}
Run Code Online (Sandbox Code Playgroud)

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

取决于您如何阅读它以及服务器内存中已有多少请求正文.在正常格式编码请求的情况下,无论何时getParameter()预先调用,它通常都会被完全解析并存储在服务器内存中.召唤getInputStream()遗嘱根本没用.最好在响应上做到这一点.