java.lang.IllegalStateException: getOutputStream () wurde bereits für diese Antwort aufgerufen

8

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?

    
ama 22.08.2010, 06:32
quelle

11 Antworten

7
  

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.

Siehe auch:

BalusC 22.08.2010 06:38
quelle
6

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:

%Vor%

out.clear() hat mir auch geholfen, all diese leeren Zeilen von <%@page import=... und ähnlichem loszuwerden.

    
Josef Hammer 08.12.2012 19:38
quelle
2

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.

    
Soundlink 22.08.2010 09:27
quelle
1

Versuchen Sie es, es ist nicht die beste Lösung, aber es funktioniert.

%Vor%

Wo 'in' der InputStream ist (wenn Sie ihn verwenden), ist 'out2' das neue response.getOutputStream() und 'out' ist das Standard JspWriter .

    
Harke 01.09.2011 13:35
quelle
1
%Vor%     
Surendra 01.06.2013 14:52
quelle
0

Verwandle view_image.jsp in ein Servlet, das auf ViewImage abgebildet ist und rufe es wie

auf %Vor%

in Ihrer JSP-Datei.

    
Behrang 22.08.2010 08:51
quelle
0

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.

    
irreputable 22.08.2010 09:24
quelle
0

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.

    
Yan Yan 03.10.2013 15:20
quelle
0

Im Frühjahr können Sie dieses Problem lösen, indem Sie

ändern %Vor%

bis

%Vor%     
Jorge Gutiérrez Parejo 18.03.2016 12:53
quelle
0

Ich hatte diesen Code und reparierte ihn wie folgt:

%Vor%

Ich habe null zurückgegeben, weil ich von dieser Methode einen Download erwartet habe. Laut der Erklärung hier , habe ich mein Problem behoben.

    
Sizzler 16.09.2016 18:43
quelle
0

Wenn Sie in Servlets mit diesem Problem konfrontiert sind, senden Sie die Antwort vom Servlet an den Browser:

%Vor%

Dies sollte die erste Aussage sein, nachdem Sie Ihren HTML-Code im Servlet geschrieben haben, der schließlich an den Browser gesendet wird

    
Manish 14.10.2016 15:27
quelle

Tags und Links