BLOB Image in JSP anzeigen

Stefan2902

Aktives Mitglied
Hallo,

Ich möchte gerne Bilder in einer JSP Seite anzeigen, die auf BLOB Images in meiner Mysql Datenbank beruhren.

Meine Datenbanktabelle sieht wie folgt aus: id (int), name (String), picture (BLOB)

Ich habe eine Klasse und Kollektion in Java programmiert, welche die Daten aus dieser Tabellen entgegennehmen.

In meiner JSP Seite hätte ich nun die Möglichkeit über
Code:
klasse.getPicture()
auf meinen BLOB zuzugreifen. Nach ein wenig Recherche habe ich festgestellt, dass man nicht direkt auf die BLOBs zugreifen kann. Ich muss zunächst einen BinärArray erzeugen und dann einen OutputStream erzeugen.

Im Internet habe ich gelesen, dass man das am besten mit einem ImageServlet macht. Nun meine Fragen:

1. Ist es wirklich Best Practise, dass man das Anzeigen dieser Bilder über ein ImageServlet realisiert?
2. Falls ja, stelle ich mir die Frage, was ich an das Servlet übergeben soll, da ich die BLOB Information ja schon in meinem JSP habe? In den Beispielen finde ich immer, dass eine ID übergeben wird und dann das Servlet über einen Datenbankabruf das BLOB liest. Das ist aber nicht notwendig, da ich den BLOB ja schon habe? Kann ich den BLOB vielleicht über die Session übergeben?
3. Ich habe versucht testweise ein ImageServlet anzulegen, nur leider wird es durch folgenden Aufruf in der JSP Seite nicht aufgerufen
Code:
<img src="/ImageServlet" width="150" height="200">
.
4. Eine generelle Frage: Wenn ich das Servlet nur als ImageServlet verwende, muss ich es dann in der web.xml genau wie alle anderen Servlets mappen?

Gruß

Stefan
 

ARadauer

Top Contributor
1. Ja ich würde es oft auch so machen, laden und als byte array zurück streamen, der browser zeigt es dann als bild an..
2. In der Session würde ich keien Blob halten, da da die Session extrem groß wird, was sehr schlecht skaliert. Im Request kannst du es auch nicht halten, da du beim aufruf des Img Tags eigentlich wieder in einem neuen Request bist. Also lade es einfach nicht in der jsp und in dem Image Servlet lädst dus dann... wie du das bild identifizierst... mhn ja kommt drauf an... über eine id des datensatzes oder ähnliches <img src="/ImageServlet?imgId=44" width="150" height="200">
3. dann hast du in deiner web.xml oder wo immer du deine Servlet konfigurierst etwas falsch gemacht... zeig das mal


Hast du ein Beispiel für so ein Servlet? ich könnte eines posten..
 

ARadauer

Top Contributor
Java:
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ImageLoader extends HttpServlet {

    private static final String MIME = "image/jpeg";

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      HttpSession session = request.getSession();

      String imgId = request.getParameter("imgId");

	  Connection connection = //wie auch immer connection besorgen...
      try {
		byte[] imageData =//wie auch immer die daten als byte array von der DB laden...
        response.setContentType(MIME);
        response.setHeader("Content-disposition", "inline; filename=Imaage_"+id+".jpg");
        response.setHeader("pragma", "cache");
        response.getOutputStream().write(imageData);

      } catch (Exception e) {
         //loggen
      }finally{
         connection.close();
      }		
   }
}
sowas würde reichen...
 

Stefan2902

Aktives Mitglied
Vielen Dank für die prompte Antwort.

Der Grund warum ich gefragt habe, ob es "best practise" ist, ist, weil ich cirka 20 kleine Bilder über das ImageServlet laden muss und dann in der JSP Seite anzeigen lassen möchte. Das bedeuted, dass ich 20 mal die Connection herstelle, eine SQL Query absetze usw. Da ich die BLOB Informationen ja schon vorliegen habe, dachte ich da gäbe es eine Alternative. Ist aber OK. Ich werde dann mal testen, ob das ImageServlet performant genug ist! Danke!!

Übergeben werde ich dann die ID, da diese eineindeutig ist.

Was die web.xml angeht, so seht diese z.Zt. wie folgt aus, da ich nur einen Controller verwende:

Code:
<!DOCTYPE web-app PUBLIC
  '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN'
  'http://java.sun.com/dtd/web-app_2_3.dtd'>
<web-app>
  <servlet>
    <servlet-name>mainController</servlet-name>
    <servlet-class>de.stefan.tippspiel.Controller</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>mainController</servlet-name>
    <url-pattern>/application</url-pattern>
  </servlet-mapping>
</web-app>

Um nun das ImageServlet einzubinden, würde ich die folgenden Einträge ergänzen:

Code:
...
  <servlet>
    <servlet-name>ImageController</servlet-name>
    <servlet-class>de.stefan.tippspiel.ImageController</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>ImageController</servlet-name>
    <url-pattern>/images</url-pattern>
  </servlet-mapping>
...

Macht das Sinn so?

Falls ja, wie würde dann der Call im JSP aussehen? Wäre sowas wie:

Code:
<img src="/images/ImageServlet" width="150" height="200">

richtig?

Danke und Gruß

Stefan
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
Das bedeuted, dass ich 20 mal die Connection herstelle, eine SQL Query absetze usw.
Meinst du Connections zur Datenbank? Das ist halt langsam, die müssten aus einem Connection Pool deines Servers kommen, aber ich denke das wird schon passieren.

Wenn du aber Connections vom Browswer zum Server meinst... das ist kein Problem, da sind moderne Browser und Server extrem optimiert und die 20 Verbindungen würden auch parallel abgearbeitet werden...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Anzeigen Blob gespeicherte Datei Allgemeine Java-Themen 6
E Blob Element kopieren Allgemeine Java-Themen 12
N BLOB Farbwert auslesen Allgemeine Java-Themen 2
ARadauer Blob aus byte Array erstellen? Allgemeine Java-Themen 3
D Image bewegt sich nicht nach Klicken auf Button Allgemeine Java-Themen 15
Mozart53 JLabel nur meinen Text verschieben ohne Image Allgemeine Java-Themen 3
Y Wie bekomme ich durch getImage an das Image heran? Allgemeine Java-Themen 1
J jsch direktes streamen in ein image Allgemeine Java-Themen 11
A 2D-Grafik Einfachster Ansatz, um sich wiederholende Figur in einem 2D-Image zu erkennen Allgemeine Java-Themen 1
T 2D-Grafik Chart als Image erstellen Allgemeine Java-Themen 3
G Image in Shape wandeln Allgemeine Java-Themen 1
T Swing Image rotieren Allgemeine Java-Themen 1
I nach Image Load in ListView, kann Ordner nicht mehr gelöscht werden Allgemeine Java-Themen 1
C pfad vom Image ausgeben lassen Allgemeine Java-Themen 5
Bananabert Swing jtree : image als user object Allgemeine Java-Themen 2
M Image auslesen Allgemeine Java-Themen 2
G Pixelanzahl aus Raw Image Datei Allgemeine Java-Themen 1
H OCR und Image Processing Allgemeine Java-Themen 4
M Image für PDF nicht verfügbar - Runnable .jar Allgemeine Java-Themen 3
BRoll Image RGB Werte auslesen und vergleichen Allgemeine Java-Themen 8
K Image zu BufferedImage konvertieren Allgemeine Java-Themen 9
K Image beim catchen ist immer null Allgemeine Java-Themen 9
X Image Processing libary für JavaSE und Android Allgemeine Java-Themen 2
Crashbreaker RCP-View Image öffnen und darstellen Allgemeine Java-Themen 7
S IMAGE ARRAY laden Allgemeine Java-Themen 6
B Image oder GridControl? Allgemeine Java-Themen 8
B Image Thinning Allgemeine Java-Themen 3
A Input/Output Buffered Image zu Byte Array und zurück konvertieren Allgemeine Java-Themen 4
F Datentypen Floppy-Image-Dateisystem Allgemeine Java-Themen 5
F Image - Ausschnitt bekommen Allgemeine Java-Themen 3
J Teil eines Image/ImageIcon zeichnen Allgemeine Java-Themen 2
N Unable to convolve src image Allgemeine Java-Themen 7
H image in jtextarea/JLabel einbinden... Allgemeine Java-Themen 4
Aigu Bilderkennung / Image Analysis Allgemeine Java-Themen 2
M Nochmal I-Frame zu Image Allgemeine Java-Themen 4
M JPEG Image komprimieren Allgemeine Java-Themen 2
M Probleme mit Image Extraction aus PDF Allgemeine Java-Themen 2
V Image laden - URL über ClassLoader ermitteln Allgemeine Java-Themen 2
G sun.awt.image.OffScreenImage Serializable machen Allgemeine Java-Themen 5
T Image in gif umwandeln Allgemeine Java-Themen 14
G itext größe von image Allgemeine Java-Themen 2
T JPanel to Image? Allgemeine Java-Themen 6
K Image Resizer Allgemeine Java-Themen 4
D Image runterscalieren, aber schlechte Quali? Allgemeine Java-Themen 3
L Buffered Image teilweise zeichnen Allgemeine Java-Themen 6
P Image erzeugen Allgemeine Java-Themen 7
B Image libraries Allgemeine Java-Themen 3
MQue Image über Komponente Allgemeine Java-Themen 3
P Image auf JPanel auf JFrame Allgemeine Java-Themen 3
P Image auf einem Panel mit null-Layout Allgemeine Java-Themen 8
E Image unterscheiden Allgemeine Java-Themen 16
E Image auf einem JLabel darstellen Allgemeine Java-Themen 3
F BufferedImage -> Image Allgemeine Java-Themen 4
E Wie bekomme ich mein Image in das Fenster Allgemeine Java-Themen 2
T Muster/Zeichen/Texterkennung auf einem Image Allgemeine Java-Themen 9
L Linien, Recktecke und Elipsen zeichnen ohne Image Allgemeine Java-Themen 2
T Disk Image Library (iso,mdf,nrg,bin) Allgemeine Java-Themen 6
S KeyListener! Image Problem! Allgemeine Java-Themen 2
S Image als Background Allgemeine Java-Themen 5
B Image(png) versenden Allgemeine Java-Themen 3
N Image -> cropImage Allgemeine Java-Themen 3
T Image mithilfe von DirectColorModel und Pixel erstellen Allgemeine Java-Themen 3
G Image in der Größe ändern Allgemeine Java-Themen 2
C probleme mit image Allgemeine Java-Themen 4
C Pixelfarbe aus einem image auslesen Allgemeine Java-Themen 6
M Image Skalieren Allgemeine Java-Themen 23
D ByteArray für Image-Icon laden. Allgemeine Java-Themen 4
T iso datei (Image) mit Java einlesen und Inhalt entpacken Allgemeine Java-Themen 3
O Image mit transparenten farben wie bei *.GIF ? Allgemeine Java-Themen 3
B Image#getScaledInstance & Graphics2D#drawImage ClassCast Allgemeine Java-Themen 3
H Speicher freigeben klappt nicht bei Image Objekten, warum? Allgemeine Java-Themen 8
H Skalieren von Image -> java.lang.OutOfMemoryError - WARUM Allgemeine Java-Themen 18
T Auf ein Image geklickt Allgemeine Java-Themen 13
J ISO image erzeugen Allgemeine Java-Themen 3
J Wie mache ich den Hintergrund einer Image durchsichtig? Allgemeine Java-Themen 7
G Aus JPanel Image Hohlen Allgemeine Java-Themen 3
D BufferedReader in image umwandeln Allgemeine Java-Themen 3
S Image Datei serializieren Allgemeine Java-Themen 3
G JFrame nimmt mein Image nicht Allgemeine Java-Themen 2
F Image als GIF oder JPEG abspeichern Allgemeine Java-Themen 2
kodela StatusBar-Anzeigen auch in Log-Datei ausgeben Allgemeine Java-Themen 3
berserkerdq2 Text über einen Shape anzeigen (Scenebuilder) Allgemeine Java-Themen 1
C Kalender mit Tageswerten anzeigen Allgemeine Java-Themen 23
W Datum anzeigen Allgemeine Java-Themen 10
OnDemand Anzeigen was eine Applikation macht Allgemeine Java-Themen 1
Lukas2904 Swing Anzeigen lassen das das Programm geschlossen wurde Allgemeine Java-Themen 3
Lukas2904 Wie kann man cps (ClicksPerSecond) in einer GUI anzeigen lassen? Allgemeine Java-Themen 4
I if-eingaben nur einmal anzeigen Allgemeine Java-Themen 6
B Long in einen Double umwandeln und im Label anzeigen Allgemeine Java-Themen 7
L Tess4j Umlaute anzeigen Allgemeine Java-Themen 3
N Daten einer JCoTable in JTextArea anzeigen Allgemeine Java-Themen 7
N HTTP Interpretierten Seitenquellcode anzeigen Allgemeine Java-Themen 30
M Java- Bild gewissen Anzahl von Sekunden anzeigen?! Allgemeine Java-Themen 4
M Java (GUI) Code verdoppeln oder anzeige mehrmals anzeigen? Allgemeine Java-Themen 8
E Swing Interaktive Flächen auf der GUI anzeigen lassen Allgemeine Java-Themen 5
P GUI: ArrayList anzeigen funktioniert nicht Allgemeine Java-Themen 5
A Swing Immer aktuelle Mausposition anzeigen lassen Allgemeine Java-Themen 7
O Threads Aktivität anzeigen... Allgemeine Java-Themen 5
P jCheckBox auf der zusammengeknüpften Programmierung anzeigen lassen Allgemeine Java-Themen 3
0 Animiertes Gif anzeigen - NullPointer Exception Allgemeine Java-Themen 19

Ähnliche Java Themen

Neue Themen


Oben