java.lang.IllegalStateException: getOutputStream () уже был вызван для этого ответа

Я получаю следующее исключение, когда пытаюсь запросить загрузку изображений с сервера на на стороне клиента:

241132533 [TP-Processor1] ОШИБКА [/jspapps provided.[jsp] - Servlet.service () для сервлета jsp сгенерировал исключение java.lang.IllegalStateException: getOutputStream () уже был вызван для этого ответа

Может ли кто-нибудь объяснить мне это исключение, а также как его преодолеть?

8
задан BalusC 22 August 2010 в 06:39
поделиться

4 ответа

попробуйте удалить все тексты шаблонов из файла jsp. например,

1 <%@
2    ....
3 %>
4 <%
5    ....
6 %>

есть '\ n' между строками 3 и 4, и он рассматривается как текст шаблона, вызывается response.getWriter (), чтобы записать это '\ n' клиенту. после строки 6 также могут быть невидимые пробелы, которые испортят выходной поток. но строка 5 может вернуть раньше, чтобы этого избежать.

0
ответ дан 5 December 2019 в 10:00
поделиться

Убедитесь, что в вашем view_image.jsp исключен весь вывод. Простые переносы строк могут быть ответственны за генерацию вывода.

Например, если у вас есть такие декларации...

<%@ page import ... %>
<%@ page import ... %>

... вы должны написать их таким образом

<%@ page import ... %><%@ page import ... %><%
...%>

Если вы посмотрите на скомпилированный код сервлета, вы не должны увидеть out.write("\r\n") перед ответом изображения.

Лучшим способом было бы изменить ваш view_image.jsp на сервлет, но если вы не можете этого сделать, то удаление переносов строк в jsp является обходным решением.

2
ответ дан 5 December 2019 в 10:00
поделиться

может ли кто-нибудь объяснить мне это исключение

Вы пытаетесь записать двоичные данные в response.getOutputStream () , используя необработанный код Java внутри файла JSP, который сам уже использует response.getWriter () для записи любого текста шаблона. См. Также раздел Throws связанных документов javadocs.

, а также как с этим справиться?

Вместо этого напишите Java-код в реальном Java-классе. Создайте класс, который расширяет HttpServlet , переместите туда весь этот Java-код, отобразите его в web.xml и измените URL-адрес запроса, чтобы вместо этого вызвать сервлет.

См. Также:

7
ответ дан 5 December 2019 в 10:00
поделиться

Превратите view_image.jsp в сервлет, сопоставленный с ViewImage , и назовите его как

<img src='<%= request.getContextPath() %>/ViewImage?pat_acc=<%=Pat_Acct%>' style='position: absolute; left: 0pt; top: 0px;' "/> 

в вашем файле JSP.

0
ответ дан 5 December 2019 в 10:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: