Detectando a desconexão do cliente no servlet do tomcat?

Como posso detectar que o lado do cliente de uma solicitação de servlet do tomcat foi desconectado? Eu li que eu deveria fazer um response.getOutputStream (). Print (), em seguida, um response.getOutputStream (). Flush () e pegar um IOException, mas existe uma maneira que eu possa detectar isso sem escrever nenhum dado?

EDITAR :

O servlet envia um stream de dados que não termina necessariamente, mas não tem necessariamente nenhum stream de dados (é um stream de events em tempo real). Eu preciso realmente detectar quando o cliente se desconecta porque eu tenho alguma limpeza que eu tenho que fazer naquele momento (resources para liberar, etc.). Se eu tiver o HttpServletRequest disponível, tentarei ler a partir desse lance uma IOException se o cliente desconectar?

Existe uma maneira de detectar isso sem escrever nenhum dado?

Não, porque não há como TCP / IP detectá-lo sem gravar nenhum dado.

Não se preocupe com isso. Basta completar as ações de solicitação e escrever a resposta. Se o cliente desapareceu, isso causará uma IOException: reconfiguração de conexão, que será lançada no contêiner do servlet. Nada que você tenha que fazer sobre isso.

Eu preciso realmente detectar quando o cliente se desconecta porque eu tenho alguma limpeza que eu tenho que fazer naquele momento (resources para liberar, etc.).

Lá o bloco finally é para. Ele será executado independentemente do resultado. Por exemplo

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

Se eu tiver o HttpServletRequest disponível, tentarei ler a partir desse lance uma IOException se o cliente desconectar?

Depende de como você está lendo e quanto do corpo da solicitação já está na memory do servidor. No caso de solicitações codificadas de formulário normal, sempre que você chamar getParameter() antecipadamente, ele geralmente será totalmente analisado e armazenado na memory do servidor. Chamar o getInputStream() não será útil. Melhor fazer isso na resposta.

Você já tentou liberar o buffer da resposta: response.flushBuffer (); Parece lançar uma exceção IOException quando o cliente desconectou.