Rilevamento della disconnessione del client nel servlet di tomcat?

Come posso rilevare che il lato client di una richiesta di servlet di tomcat è stato disconnesso? Ho letto che dovrei fare un response.getOutputStream (). Print (), quindi un response.getOutputStream (). Flush () e prendere una IOException, ma c’è un modo in cui posso rilevare questo senza scrivere alcun dato?

MODIFICA :

Il servlet invia un stream di dati che non necessariamente termina, ma non ha necessariamente alcun stream di dati (è un stream di eventi in tempo reale). Devo effettivamente rilevare quando il client si disconnette perché ho qualche ripulitura che devo fare a quel punto (risorse da rilasciare, eccetera). Se ho HttpServletRequest disponibile, cercherò di leggere da quella una IOException se il client si disconnette?

c’è un modo in cui posso rilevare questo senza scrivere alcun dato?

No perché non esiste un modo in TCP / IP per rilevarlo senza scrivere alcun dato.

Non preoccuparti per questo Basta completare le azioni della richiesta e scrivere la risposta. Se il client è scomparso, ciò causerà una IOException: reset della connessione, che verrà gettato nel contenitore del servlet. Niente che devi fare al riguardo.

Devo effettivamente rilevare quando il client si disconnette perché ho qualche ripulitura che devo fare a quel punto (risorse da rilasciare, eccetera).

Lì il blocco finale è per. Sarà eseguito indipendentemente dal risultato. Per esempio

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

Se ho HttpServletRequest disponibile, cercherò di leggere da quella una IOException se il client si disconnette?

Dipende da come stai leggendo da esso e quanta parte del corpo della richiesta è già nella memoria del server. In caso di richieste codificate con modulo normale, ogni volta che si chiama getParameter() anticipo, di solito viene completamente analizzato e archiviato nella memoria del server. Chiamare getInputStream() non sarà affatto utile. Meglio farlo sulla risposta, invece.

Hai provato a svuotare il buffer della risposta: response.flushBuffer (); Sembra generare una IOException quando il client si disconnette.