현재 Jersey/Tomcat을 사용하여 REST 웹 서비스를 개발 중입니다 (그러나 일반적인 서블릿/컨테이너 응답을 환영합니다). 클라이언트가 MySQL 연결에서 많은 양의 데이터를 반환하는 서비스에서 일부 GET 요청을 수행하는 경우.서블릿에서 예기치 않은 요청 처리하기
OOM 예외를 피하기 위해 MySQL 용 스트리밍 모드를 사용합니다.
그러나로드하는 동안 클라이언트가 요청을 중단하면 MySQL 연결이 닫히지 않습니다. 그 후에 서버는 한 번에 하나의 "스트리밍"요청 만 가능하기 때문에 다른 요청을 처리하지 않습니다.
질문은 다음과 같습니다. 요청이 내 서버에서 종료 될 때마다 (보통 또는 비정상적으로) 어떻게 알림을받을 수 있습니까? 어떤 종류의 리스너를 등록 할 수 있습니까? 또는 UncaughtExceptionHandler를 사용 하시겠습니까?
저지에서 예외를 처리하여 "응답"으로 변환하는 방법은 많이 있지만 요청의 조기 종료를 처리하는 방법은 없습니다. 저지 또는 톰캣은 알림없이 내 스레드를 단순히 파괴 할 수도 있습니다. 스레드 인터럽트가 발생할 때마다 내 메서드의 중요한 부분에서 일부 예외를 잡을 수 있습니까? 다른 측면에서 연결을 중단 반면 flush()
또는 close()
이 response.getOutputStream()
에서 호출 될 때마다 당신의 도움에 미리
감사합니다, 보통
없습니다 - 서블릿이 당신을 위해 그것을 할 것입니다. 또한, PrintWriter를 사용한다면 flush 대신 checkError를 사용하십시오. –
@andrew : http://stackoverflow.com/questions/1829784/should-i-close-the-servlet-outputstream/1829823#1829823 – BalusC