Я пишу приложение для передачи данных с использованием сервлета и хотел бы иметь возможность отправить ответ об ошибке, если возникла проблема после того, как ответ сервлета был записан.Это возможно?
Не со стороны сервера.Сервер не может вернуть уже сброшенные байты от клиента.Это точка невозврата.Я предполагаю, что это касается другого исключения, чем IOException
в ответе Writer
или OutputStream
.
Если бы это был HTML (даже если это плохая практика; HTML принадлежит JSP), вы может напечатать некоторый код 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);