Ich erhalte die folgende Ausnahme, wenn ich versuche, Bilder vom Server auf der Client-Seite zu laden:
241132533 [TP-Prozessor1] FEHLER [/jspapps].[jsp] - Servlet.service () für Servlet jsp hat Ausnahme ausgelöst java.lang.IllegalStateException: getOutputStream () wurde bereits für diese Antwort
aufgerufen
Kann mir jemand diese Ausnahme erklären und auch, wie ich darüber hinweg komme?
kann mir jemand diese Ausnahme erklären
Sie versuchen, Binärdaten in % co_de zu schreiben % verwendet rohen Java-Code in einer JSP-Datei, die selbst bereits response.getOutputStream()
um einen Vorlagentext zu schreiben. Siehe auch den Throw Teil der verknüpften Javadocs.
und auch, wie man darüber hinwegkommt?
Schreiben Sie Java-Code stattdessen in eine echte Java-Klasse. Erstellen Sie eine Klasse, die response.getWriter()
extends
, alles verschieben Java-Code dort, ordnen Sie es in HttpServlet
und ändern Sie die Anfrage-URL stattdessen das Servlet aufrufen.
Ich bin gerade über diese alte Frage gestolpert, da ich das gleiche Problem hatte. Am Ende war es ziemlich einfach, die Ausnahme loszuwerden: Rufen Sie einfach out.clear()
vorher auf:
out.clear()
hat mir auch geholfen, all diese leeren Zeilen von <%@page import=...
und ähnlichem loszuwerden.
Stellen Sie sicher, dass die gesamte Ausgabe in Ihrem view_image.jsp
gelöscht wird. Einfache Zeilenumbrüche können für die Generierung von Ausgaben verantwortlich sein.
Zum Beispiel, wenn Sie diese Deklarationen haben ...
%Vor%... du solltest sie so schreiben
%Vor% Wenn Sie sich den kompilierten Servlet-Code anschauen, sollten Sie out.write("\r\n")
nicht vor Ihrer Bildantwort sehen.
Ein besserer Weg wäre, Ihre view_image.jsp
in ein Servlet zu ändern, aber wenn Sie das nicht können, ist das Entfernen der Zeilenumbrüche in der JSP eine Umgehungslösung.
Versuchen Sie alle Schablonentexte aus der jsp-Datei zu entfernen. zum Beispiel
%Vor% Es gibt ein '\ n' zwischen Zeile 3 und 4, und es wird als Vorlagentext behandelt, response.getWriter () wird aufgerufen, um '\ n' in den Client zu schreiben. Nach Zeile 6 könnte es auch unsichtbare Leerzeichen geben, die den Ausgangsstrom vermasseln. aber Zeile 5 kann return
früh, um das zu vermeiden.
Ich habe gerade das gleiche Problem in meiner jüngsten Arbeit gefunden.
Wir haben einen Servlet-Filter, in dem wir die ServletResponse.getWriter () -Methode verwenden, um den Body zu schreiben, und in einigen Spring MVC-Controllern verwenden wir auch response.getOutputStream (), um etwas wie Bilder (Array von Bytes) in den Body zu schreiben .
Da jede Anfrage einen Filter durchläuft, basierend auf dem Java-API-Dokument:
"Entweder diese Methode (getWriter ()) oder getOutputStream () kann aufgerufen werden, um den Body zu schreiben, nicht beides."
Das ist der Grund, warum wir die "java.lang.IllegalStateException: getOutputStream ()" für diese Antwort "exception" aufgerufen haben.
In diesem Filter habe ich den Code folgendermaßen geändert:
%Vor%Es hat dieses Problem für mich behoben.
Im Frühjahr können Sie dieses Problem lösen, indem Sie
ändern %Vor%bis
%Vor%