Bild aus Datenbank ausgeben/anzeigen

Raphalon

Aktives Mitglied
Hallo,

ich möchte ein Bild aus einer Datenbank auf einer JSF-Seite ausgeben. Wenn ich das richtig verstanden habe, gibt es dafür keine "out-of-the-box"-Lösung mit Mojarra. Habe daher die Möglichkeit unter The BalusC Code: ImageServlet umgesetzt. Hierzu scheint es jedoch erforderlich zu sein, immer einen extra Request an den Server zu senden, also z.B. mittels http://localhost:8080/project/image?id=fob3q20e30ac20f9y624889545c59vtj "manuell" über den Browser einen Request zu senden (der Hash-Wert steht als Identifikator in der Datenbank). Über einen expliziten Request, bei dem der Hash-Wert auch schon bekannt ist, funktioniert das bei mir auch.

Wenn das Bild aber automatisch direkt in eine jsf-Seite eingebettet werden soll (etwa mitten <h:graphicImage value="image?id=#{bild.hash}" />), welche es selbst nicht direkt angefordert hat, ist mir unklar, wie ich das umsetzen kann. Das Bild wird also vom User nicht explizit angefordert - der Hash-Wert ist noch unbekannt im ursprünglichen Request. Er muß vom Server ermittelt werden und das Bild dann direkt in die Response eingebettet werden.

Wollte dem Autor obiger Lösung diese Frage entsprechend stellen, aber trotz verfügbarer openId scheitert ein Post in seinem Blog.

Soll ich irgendeinen Code angeben (letztlich ist er so wie in dem angegebenen Blog)?

Gruß,

Raphalon
 

homer65

Top Contributor
Du kannst das mit normalem HTML - dem img Tag - und einem Servlet machen, das das Image aus der Datenbank liest und anzeigt.
Unter http://www.edv-ehm.de/ findest die JMyScanner Anwendung, die sowas macht als Beispiel mit Quellcode.
 

homer65

Top Contributor
Habe mir mal den BalusC Code angeguckt. Der sieht ja soweit ok aus.
Allerdings muß man in web.xml noch declarieren, das das Servlet aufgerufen wird, falls xyz.png angesprochen wird.
 

Raphalon

Aktives Mitglied
Habe es auch in der web.xml angegeben - es wird auch aufgerufen, wenn ich direkt im Browser die URL aufrufe, die letztlich das Bild aus der Datenbank extrahiert und anzeigt (also z.B. http://localhost:8080/project/image?id=fob3q20e30ac20f9y624889545c59vtj). Es wird aber nicht angezeigt, wenn der Anwender sich z.B. einloggt und in der folgenden Inhaltsseite (JSF) ein <h:graphicImage value="image?id=#{bild.hash}" /> steht. Der Hash wird zwar durch das Servlet passend zu dem Benutzer herausgesucht und entsprechend ersetzt, so dass in der Antwortseite dann ein <img src="image?id=fob3q20e30ac20f9y624889545c59vtj" /> steht, aber das Servlet wird nicht ausgeführt.

Hier mal meine web.xml

[XML]<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">

<description>adm</description>

<!-- Faces Servlet -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<!-- Faces Servlet Mapping -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>

<session-config>
<session-timeout>120</session-timeout>
</session-config>

<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>

<filter>
<filter-name>Extensions Filter</filter-name>
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Extensions Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

<servlet>
<servlet-name>imageServlet</servlet-name>
<servlet-class>de.comp.tools.ImageServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>imageServlet</servlet-name>
<url-pattern>/image</url-pattern>
</servlet-mapping>
</web-app>[/XML]
 

homer65

Top Contributor
Bei <img src="image?id=fob3q20e30ac20f9y624889545c59vtj" /> wird das Servlet auch nicht aufgerufen.
Es würde nur aufgerufen bei:
<img src="image" />
Die Information über den Hash müßtest du dem Servlet auf andere Weise zukommen lassen.

Edit:
z.B. könntest du deinem Servlet einen generischen Namen zuweisen.
<servlet-mapping>
<servlet-name>imageServlet</servlet-name>
<url-pattern>/image*</url-pattern>
</servlet-mapping>
Man beachte den *
 
Zuletzt bearbeitet:

Raphalon

Aktives Mitglied
Das Mapping hatte ich falsch angegeben in meinem Posting *grumpf*. Es lautet natürlich so:
[XML]<servlet>
<servlet-name>imageServlet</servlet-name>
<servlet-class>de.comp.tools.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>imageServlet</servlet-name>
<url-pattern>/image/*</url-pattern>
</servlet-mapping>[/XML]
Mit
Code:
<img src="image" />
wird nichts gefunden - bei direktem Request über http://localhost:8080/admshow/image?id=aeb3... wird ein 404 zurückgeliefert.

Ist die Konfig wie oben angegeben, wird zwar das Servlet aufgerufen, aber nach wie vor nur dann, wenn ich den Request via URL-Eingabe in die Adresszeile des Browsers explizit mit der ID angebe, nicht aber innerhalb einer JSF-Seite.

Mal eine generelle Frage, die ich wohl bisher nicht ganz verstanden habe: Wann würde denn das Servlet im JSF-LifeCycle der Backing-Bean aufgerufen werden? Kann also ein erster Request (Bearbeitung durch Backing Bean) dazu führen, dass server-intern ein weiterer Request gesendet und bearbeitet (also durch das Servlet) wird, bevor der erste Request gerendered wird?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Dimax Bild speichern und auf JSP zeigen Web Tier 74
M JSF Bild aus DB in JSF darstellen Web Tier 7
M Bild in derby DB speichern Web Tier 18
5 Bild Pfad Servlet Web Tier 2
V Bild aus ArrayList via h:graphicImage anzeigen lassen Web Tier 4
P Bild hochladen Web Tier 9
D Servlet Bild als JPG darstellen - nur alternativer Text Web Tier 16
T Bild durch anderes Bild ersetzen mit Servlet Web Tier 3
J h:graphicImage lädt kein Bild. Web Tier 3
D JSF Template mit Bild Web Tier 3
R Anzeigeproblem von Bild in Jsp Web Tier 5
R Status als Bild anzeigen lassen. Wie? Web Tier 15
S Bild hochladen mit JSP - Parameter übergeben Web Tier 4
S Einträge aus Datenbank einzeln darstellen (JSP, JAVA, HTML) Web Tier 9
I Daten einer Datenbank in ein Formular einfügen Web Tier 3
J Datenbank optimal zu nutzen Web Tier 8
L Servlet Datenbank Web Tier 0
M JSP Mit JSP eine SQLite Datenbank editieren? Web Tier 1
X SQL Datenbank-Daten in ApplicationScoped ManageBean zwischenspeichern? Web Tier 4
P JSF Datenbank Probleme (Limit, Wiederholung) Web Tier 8
N Bilder aus Datenbank dynamisch in JSF streamen Web Tier 7
J Loginbereich mit Session und Datenbank Web Tier 5
E Servlet zum speichern einer Datei in einer Datenbank Web Tier 3
N Tabelle dynamisch mit Daten aus Datenbank füllen Web Tier 3
I Servlet connected nicht zur Datenbank Web Tier 2
S Problem mit Servlet und Zugriff auf Orace XE Datenbank Web Tier 2
N JSF-Tabelle erstellen aus Datenbank mittels JDBC Web Tier 12
R Servlet Alle Parameter ausgeben Web Tier 14
N JSF Text formatiert ausgeben Web Tier 3
N Struts 1.1 - Arraylist einzelnes Element ausgeben - Sessionattribute weitergeben Web Tier 3
J JSF List ausgeben Web Tier 6
D Anzahl Objekte in Liste in JSF ausgeben. Web Tier 2
A PDF als ByteArrayOutputStream in JSP ausgeben Web Tier 5
J Servlet soll XML ausgeben und Javascript soll dieses einlesen Web Tier 3
T Einfach nur Daten im JSP ausgeben Web Tier 2
K Jsp als Pdf ausgeben Web Tier 3
S nur eine Message auf Faceskontext ausgeben Web Tier 2
T Liste nach Anfangsbuchstaben getrennt ausgeben? Web Tier 2
S richfaces Datatable horizontal ausgeben Web Tier 2
N Info bei Start von WebApp ausgeben Web Tier 8
G Mit JSTL Rückgabe von Bean Methode ausgeben Web Tier 3
B JSF/Facelets - Fehlermeldung ausgeben Web Tier 13

Ähnliche Java Themen

Neue Themen


Oben