Martin Jung: Tomcat: getOutputStream() has already been called

Beitrag lesen

Hi,

das bedeutet, dass Du versuchst, den OutputStream zu "fetchen", nachdem er - direkt oder indirekt - benutzt wurde.
Wenn Du Dir die entsprechenden Quellcode-Dateien im tomcat/work/DeinContext-Verzeichnis analysierst, siehst Du das auch:

"JspWriter out = null;"

und
"pageContext = _jspxFactory.getPageContext(this, request, *response*, ....);"
"out = pageContext.getOut();" // hierdurch wird über "10 Ecken", u.a. durch Erzeugung eines JSPWriters-Objekts "response.getWriter()" aufgerufen -> somit ist die Bedingung für das Werfen der IllegalStateException erfüllt!
Dies geschieht (zumindest mit Tomcat) also automatisch, wenn Du JSPs verwendest.

Als Workaround fällt mir auf Anhieb ein (ungetestet):

1.

<%@ page contentType="DeinMimeTyp" %>
<% response.sendRedirect("DeineURL/DeinContext/DeinFileName"); %>
Dazu muss sich die Datei im Pfad des entsprechenden Web-Kontextes befinden (wenn Context-Switching erlaubt ist, sollte auch ein anderer funktionieren).

2. Verlagere diese Funktionalität komplett in ein Servlet. Hier kannst Du mit "response.getOutputStream()" problemlos arbeiten.

Viel Grüße,
Martin