# [MySQL, Servlet] Blob anzeigen



## heffernan (17. Jun 2008)

Hallo,

angetzeigt werden soll ein Bild, dass als Blob in einer MySQL Datenbank hinterlegt ist. Soweit so gut und in der Java-Welt gibt es genug Beispiele 


```
public void doPost(HttpServletRequest request,
			HttpServletResponse response) throws IOException, ServletException {
			
		ServletOutputStream out 	= response.getOutputStream();
		startDBConnection();
		Blob photo 					= null;	    
		ResultSet rs 				= null;
		PreparedStatement ps 		= null;
		try {
			ps = conn.prepareStatement("SELECT bild FROM test");
			rs = ps.executeQuery();
			if (rs.next()) {
				response.setContentType("image/jpeg");
				photo 					= rs.getBlob(1);
				InputStream in 			= photo.getBinaryStream();
				Image image 			= ImageIO.read(in);
				BufferedImage outImg 	= new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
		
				Graphics g = outImg.getGraphics();
				g.drawImage(image, 0,0,null);
				g.dispose();
		
				JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
				encoder.encode(outImg);				
			}	
		}
		catch (SQLException e) {} 
		catch (IOException ex) {}
		  	
		endDBConnection();
```

Problematisch wird es nun, wenn ich in diesem Servlet auch HTML Code ausgeben möchte. Derzeit greife ich auf das Bild in anderen Servlets zu indem ich die URL dieses Servlets als SRC angebe. Sofern ich den ContentType hier in text/html ändere und versuche den encoder als SRC für ein Bild anzugeben, klappts nicht. Was auch nicht weiter verwunderlich ist ^^

Gibt es eine Möglichkeit sowohl das Bild als auch HTML Code im ServletOutputStream unterzubringen?

lG aus Berlin,
Stephan


----------



## maki (17. Jun 2008)

Der OutputStream kann nur einen Content Type haben.

Das hier ist aber nicht dein ernst, oder?

      catch (SQLException e) {}
      catch (IOException ex) {}


----------



## heffernan (17. Jun 2008)

Hehe, der Code ist ein Provisorium.

Gibt es eine andere Möglichkeit diesen Blob darzustellen?


----------



## maki (17. Jun 2008)

Ich verstehe ehrlich gesagt dein Problem nicht.

Wenn du das Bild in einer JSP/HTML Seite anzeigen willst, dann mit einem IMG Tag (oder was auch immer) und als Source das Servlet angeben, so wie von dir beschrieben.

HTML Code solltest du nicht in diesem Servlet ausgeben, es sollte sich rein um Binäre Daten kümmern, in diesem Falle eben Bilder.


----------



## heffernan (17. Jun 2008)

Ich frage aus purem Interesse 

Die vorhandene Projektstruktur setzt nur auf Servlets. MVC wird weitgehend ignoriert und die beschriebene Funktion wird nur an einer Stelle bzw. einem Servlet verwendet. Habe mich entsprechend gefragt ob HTML Ausgabe UND Blob Anzeige via "image / jpeg" ContentType auch in einem Servlet zu machen sind.

lG aus Berlin,
Stephan


----------



## maki (17. Jun 2008)

Klar geht das, musst nur den Content Type ändern, dann kannst du alles senden, aber so etwas sollte man nicht machen, lieber sauber trennen.

JSPs eignen sich sehr gut um HTML zu erzeugen, Servlets für Binärdaten und das C in MVC


----------

