Set*_*eth 9 java tomcat servlets
如何检测tomcat servlet请求的客户端是否已断开连接?我已经读过我应该做一个response.getOutputStream().print(),然后是一个response.getOutputStream().flush()并捕获一个IOException,但有没有办法可以检测到这个而不写任何数据?
编辑:
servlet发出的数据流不一定会结束,但不一定有任何数据流通过它(它是一个实时事件流).我需要实际检测客户端何时断开连接,因为我需要进行一些清理工作(要释放的资源,等等).如果我有可用的HttpServletRequest,如果客户端断开连接,是否会尝试从中读取抛出IOException?
有没有办法可以在不写任何数据的情况下检测到这种情况?
不,因为TCP/IP没有办法在不写任何数据的情况下检测它.
别担心.只需完成请求操作并编写响应即可.如果客户端已经消失,那将导致IOException:connection reset,它将被抛入servlet容器中.你没有什么可以做的.
我需要实际检测客户端何时断开连接,因为我需要进行一些清理工作(要释放的资源,等等).
那个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()遗嘱根本没用.最好在响应上做到这一点.