# PDF als ByteArrayOutputStream in JSP ausgeben



## aemik (2. Dez 2010)

Halo,

ich denke der Titel sagt schon alles. Hier mein Code:


```
<%@page import="java.io.*"%>
<%@page contentType="application/pdf"%>
<%
	ByteArrayOutputStream byteStream = (ByteArrayOutputStream)session.getAttribute("pdfStream");

	response.reset();
	response.setContentType("application/pdf");
	response.setContentLength(byteStream.size());

	out.clear();
	byteStream.writeTo(response.getOutputStream());
%>
```

Das PDF wird zwar angezeigt, aber es fiegt eine Exception:


```
java.lang.IllegalStateException: getOutputStream() has already been called for this response
```

In einem Servlet wäre das wahrscheinich garkein Problem, aber hier muss es in einer JSP passieren.
Jemand eine Idee?

Danke


----------



## thE_29 (2. Dez 2010)

Was ist wenn du den byteStream da einfach reingibst? Der Fehler sagt ja aus, dass die Methode schon aufgerufen wurde..


----------



## aemik (3. Dez 2010)

In einem Servlet funktioniert es einwandfrei, weil ich dort auf auf den Outputstream zugreifen kann.
In der JSP kann ich das nichtmehr ohne dass eine Exception fliegt.

Es funktioniert alles so wie ich es will in der JSP, aber ich will nicht immer eine Exception auslösen.


----------



## maki (3. Dez 2010)

JSPs sind dafür nicht gedacht, JSP sind für Text gedacht, der ContentType wird als text gesetzt bevor du die Chance bekommst es selber auf Binary umzustellen, nimm ein Servlet, ist ja kein Problem.


----------



## ARadauer (3. Dez 2010)

byteStream.writeTo(out);

klappt das?
auf der JSP müsste die out Variable ja schon vorhanden sein....


----------



## DerEisteeTrinker (3. Dez 2010)

Das Problem an den JSP-Seiten ist, dass sie erst ziemlich spät in der Reihe drankommen bei einem Web-Aufruf. Wenn du in die JSP-Seite kommst, dann steht im Header schon, dass das eine HTML-Seite wird und der Header darf nur einmal geschrieben werden. Nutze einfach ein Servlet, er zeigt es dann schon im Browser an oder der User hat eingestellt, dass er es herunterladen möchte.


----------

