# Anzeigeproblem von Bild in Jsp



## Rokko_11 (21. Jan 2010)

Hi!

Ich habe ein Problem, wenn ich im Textfluss ein Bild aus einer Datenbank in einem JSP (innerhalb eines Popups) anzeigen lassen will.

ich löste das bisher folgendermaßen:

Im JSP:

```
<img src="GetImage.jsp?id=1" />
```


und im GetImage.jsp:

[Java]	response.setContentType("image/jpeg");

//...DBconnecten, DBabfrage und Blob holen... rs ist hierbei das ResultSet, welches maximal nur einnen Blob enthält

Blob blob = (rs.next()) ? rs.getBlob(1) : null;

	if (blob != null) {
		InputStream is = blob.getBinaryStream();
		BufferedImage image = ImageIO.read(is);
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response
				.getOutputStream());
		encoder.encode(image);
	}[/code]

Beim ersten Aufruf des Popupfensters mit Bild wird das Bild super angezeigt.
Bei jedem Weiteren Aufruf eines Popupfensters mit Bild wird es auch angezeigt, nur gibt mir Eclipse folgenden Fehler zurück:



```
SCHWERWIEGEND: Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
```

Was tun?


----------



## fastjack (22. Jan 2010)

Probier mal den OutputStream zu flushen etc.


----------



## maki (22. Jan 2010)

fastjack hat gesagt.:


> Probier mal den OutputStream zu flushen etc.


Keine gute Idee, denn dann kommt ausser den Headern nix mehr beim Client an 

@Rokko_11
JSP sind Templates für Text, deswegen setzen sie einen Header der darauf hinweist das text/html ankommt, du brauchst aber binärdaten, dafür nimmt man Servlets, nicht JSPs, abgesehen davon dass man Java Code auf jedenfall aus JSPs raushalten sollte.


----------



## nocturne (22. Jan 2010)

Soweit ich weis, gibt es keine saubere lösung.
Als größtenteil Problemfrei ist folgende lösung:

<%
	OutputStream outs = response.getOutputStream();
%>
<%@ page contentType="image/jpeg"%>
<%@ page import="java.awt.*,java.awt.image.*"%>
<%
	response.setHeader("Cache-Control", "no-cache");
	response.setHeader("Pragma", "no-cache");
	response.setDateHeader("Expires", 0);
	response.setContentType("image/jpeg");
...
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outs);

	encoder.encode(bufferedImage);
	outs.close();
	out.clear();
	out = pageContext.pushBody();
%>


----------



## maki (22. Jan 2010)

> Soweit ich weis, gibt es keine saubere lösung.


Doch, die gibt es, aber JSPs für Binäre ausgaben zu nehmen ist eben "unsauber"... das gehört aber auch zu den Servlet/JSP Grundlagen


----------



## Rokko_11 (24. Jan 2010)

Vielen Dank!

Hab jetzt den Quelltext fast 1:1 in ein Servlet reingeschrieben. Jetzt kommt kein Fehler mehr


----------

