Сообщение об исключении ясно:
Невозможно представить страницу исключения : getOutputStream () уже был вызван для этого ответа
java.lang.IllegalStateException: getOutputStream() уже был вызван для этого ответа
на org.apache.catalina.connector.Response. getWriter (Response.java:610)
An IOException
был сброшен, и вы повторно выбросили его как пользовательское исключение, которое заставило контейнер сервлетов показать страницу исключения, которая будет использовать getWriter()
для этого.Фактически вы должны отпустить любой IOException
, потому что это обычно точка возврата.
Например, IOException
может быть брошено во время работы, когда клиент прервал запрос.Лучше всего самостоятельно не ловить IOException
в Servlet API.Это уже объявлено в предложении throws
методов сервлета.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
FileObject fileObject = getItSomehow();
if (fileObject != null && fileObject.getBinData() != null) {
response.setHeader("Content-disposition", "attachment; filename=\"" + fileObject.getFilename() + "\"");
response.setContentType(fileObject.getFiletype());
response.setContentLength((int)fileObject.getFilesize().intValue());
response.getOutputStream().write(fileObject.getBinData());
} else {
// ???
}
}