Anzeigeproblem von Bild in Jsp

Rokko_11

Mitglied
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:
HTML:
<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:


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

Was tun? :(
 
Zuletzt bearbeitet:
M

maki

Gast
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

Bekanntes Mitglied
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();
%>
 

Ähnliche Java Themen

Neue Themen


Oben