Я получаю следующее исключение, когда пытаюсь запросить загрузку изображений с сервера на на стороне клиента:
241132533 [TP-Processor1] ОШИБКА [/jspapps provided.[jsp] - Servlet.service () для сервлета jsp сгенерировал исключение java.lang.IllegalStateException: getOutputStream () уже был вызван для этого ответа
Может ли кто-нибудь объяснить мне это исключение, а также как его преодолеть?
попробуйте удалить все тексты шаблонов из файла jsp. например,
1 <%@
2 ....
3 %>
4 <%
5 ....
6 %>
есть '\ n' между строками 3 и 4, и он рассматривается как текст шаблона, вызывается response.getWriter (), чтобы записать это '\ n' клиенту. после строки 6 также могут быть невидимые пробелы, которые испортят выходной поток. но строка 5 может вернуть
раньше, чтобы этого избежать.
Убедитесь, что в вашем view_image.jsp
исключен весь вывод. Простые переносы строк могут быть ответственны за генерацию вывода.
Например, если у вас есть такие декларации...
<%@ page import ... %>
<%@ page import ... %>
... вы должны написать их таким образом
<%@ page import ... %><%@ page import ... %><%
...%>
Если вы посмотрите на скомпилированный код сервлета, вы не должны увидеть out.write("\r\n")
перед ответом изображения.
Лучшим способом было бы изменить ваш view_image.jsp
на сервлет, но если вы не можете этого сделать, то удаление переносов строк в jsp является обходным решением.
может ли кто-нибудь объяснить мне это исключение
Вы пытаетесь записать двоичные данные в response.getOutputStream ()
, используя необработанный код Java внутри файла JSP, который сам уже использует response.getWriter ()
для записи любого текста шаблона. См. Также раздел Throws связанных документов javadocs.
, а также как с этим справиться?
Вместо этого напишите Java-код в реальном Java-классе. Создайте класс, который расширяет
HttpServlet
, переместите туда весь этот Java-код, отобразите его в web.xml
и измените URL-адрес запроса, чтобы вместо этого вызвать сервлет.
Превратите view_image.jsp в сервлет, сопоставленный с ViewImage
, и назовите его как
<img src='<%= request.getContextPath() %>/ViewImage?pat_acc=<%=Pat_Acct%>' style='position: absolute; left: 0pt; top: 0px;' "/>
в вашем файле JSP.