서블릿을 사용하여 데이터 전송 응용 프로그램을 작성 중이며 서블릿 응답이 기록 된 후 문제가 발생하면 오류 응답을 보내고 싶습니다. 그게 가능하니?
서버 쪽에서가 아닙니다. 서버는 이미 플러시 된 바이트를 클라이언트에서 다시 가져올 수 없습니다. 이것은 반환의 지점입니다. 응답의 Writer
또는 OutputStream
에 대해 IOException
과 다른 예외가 있다고 가정합니다. (이 가난한 연습 임에도 불구하고, HTML은 JSP에서 소속)가 HTML 인 경우
, 당신은 은 위치 변경과 같이 강제로 일부 JS 코드 인쇄 수 :
try {
writer.write(someHtml);
} catch (SomeException e) {
writer.write("<script>window.location = 'error.jsp';</script>");
// ...
}
는하지만이 아니다 HTML 이외의 응답에서도 가능합니다. 미리 전체 응답을 메모리 또는 임시 디스크에 버퍼해야합니다. 버퍼링이 흠 잡을 데 없다면 다시 응답에 파이프 할 수 있습니다.
try {
processAndSaveInMemoryOrTempDiskFile(someData, byteArrayOrFileLocation);
} catch (SomeException e) {
throw new ServletException(e, "Processing some data failed.");
}
copyFromMemoryOrTempDiskToResponse(byteArrayOrFileLocation, writer);