Servlets und Bilder

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo!

Hätte da eine Frage:

Ich habe ein Servlet geschrieben und versuche mir nun wie in HTML ein Bild anzeigen zu lassen. Das funktioniert aber nicht. Muß ich in das web.xml File den Ordner wo die Bilder liegen angeben, damit die Bilder gefunden werden?
Falls ja wie macht man das? Oder hat sonst irgendjemand eine Idee wo mein Fehler liegen könnte?

Quellcode für Image:





Danke für alle Antworten im voraus!
 
Ja ich kann das Bild im Browser öffnen!

Nähere Informationen:

Das Servlet von mir liegt im Ordner test im tomcat ordner servlet-examples. Der Ordner images mit dem Bild liegt in diesem Ordner test drin.

Den Pfad zur Bilddatei habe ich im Servlet wie folgt angegeben:

/test/Bild1.jpg.

Also eigentlich so wie man es in HTML auch macht. Aber aus irgendeinem Grund wird das Bild nicht geladen!
 
@bronks hat gesagt.:
Da kann eigentlich nur der Pfad verkehrt sein. Laß auf jeden Fall den ersten Slash weg.

So wie ich Deinen letzen Post verstanden habe müßte es eigentlich so heißen:

Code:
[img]test/images/Bild1.jpg[/img]
 
Ja Sorry!

Hab das mit dem Ordner images vergessen. Aber auch wenn ich den ersten Slash weglasse, funktioniert das nicht!
 
Der gleiche Dateiname, den Du in Deiner App in eine JSP bzw. HTML schreiben würdest gehört auch in das Servlet. Alle Pfade sind relativ zum Kontextpfad.

Ich empfehle Dir für diesen Test eine eigene Webapp zu erstellen. Für die servlet-examples habe ich noch nie interessiert, aber es kann sein, daß da etwas spezielles im Weg steht.
 
bronks hat gesagt.:
Der gleiche Dateiname, den Du in Deiner App in eine JSP bzw. HTML schreiben würdest gehört auch in das Servlet. Alle Pfade sind relativ zum Kontextpfad.

Das habe ich ja gemacht! Aber das funktioniert ja nicht.

Ich empfehle Dir für diesen Test eine eigene Webapp zu erstellen. Für die servlet-examples habe ich noch nie interessiert, aber es kann sein, daß da etwas spezielles im Weg steht.

Hier sehe ich keinen Sinn darin! Deswegen bleibt das Problem trotzdem bestehen.

Aber ne Frage: Kannst du mir sagen, was es mit response.setContentType("image/*") auf sich hat? Ich glaube nämlich, dass es daran liegt! Ich habe ja den response.setContentType("text/html") gesetzt.
 
@bronks hat gesagt.:
... Aber ne Frage: Kannst du mir sagen, was es mit response.setContentType("image/*") auf sich hat? Ich glaube nämlich, dass es daran liegt! Ich habe ja den response.setContentType("text/html") gesetzt.
Den ContentType image nimmt man, wenn das Servlet ein Image streamen soll. Für Dein Beispiel ist text/html richtig.
 
soll das heissen du hast ein Servlet, das das Bild "streamen" soll, d.h. das Servlet ist auf die URL

test/images/Bild1.jpg

gemappt? Dann den image-contenttype (oder gleich jpeg) und die Bytes direkt in den OutputStream schreiben
 
Das wird jetzt langsam kompliziert! Ich stell euch hier mal meinen Quellcode rein.
Zur Info:
Das Servlet holt anhand einer übergebenen ID Daten aus der DB und schreibt Sie in die dafür vorgesehenen Bereiche. Dies soll später auch für das Bild funktionieren. Aber momentan wäre ich schon ganz froh, wenn ich mir zuerst einmal irgendein Bild normal anzeigen lassen könnte. Der Rahmen der die Größe des Bildes angibt, wird angezeigt. Wenn ich im Browser dort auf Bild anzeigen gehe, kommt die Fehlermeldung, " Das die gesuchte Resource nicht gefunden werden kann" obwohl das die im selben Ordner liegt. Nämlich /servlet-examples/classes/test/images.


package test;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
import java.util.*;

public class Mitglied extends HttpServlet implements Serializable {
private static final String CONTENT_TYPE = "text/html";




//Process the HTTP Get request
public void service(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException
{
String strTextfeld1, strTextfeld2;
Connection con = null;
Statement stmt = null;
PrintWriter out = null;


ResultSet rs = null;
strTextfeld1 = request.getParameter("BID");
strTextfeld2 = request.getParameter("Trainingsdatum");
String wert1;
String wert2;
String wert3;
String wert4;
String wert5;
String wert6;
String wert7;
String wert8;
String wert9;
String wert10;
String wert11;
response.setContentType(CONTENT_TYPE);
out = response.getWriter();


try
{
Class.forName("com.mysql.jdbc.Driver");
try
{
con = DriverManager.getConnection("jdbc:mysql://localhost/test","root","root");
}
catch (Exception ex){}
try
{
stmt = con.createStatement();
}
catch (Exception ex){}
try
{
rs = stmt.executeQuery("SELECT Name,Vorname,Strasse,Hausnummer,PLZ,Wohnort,Geburtsdatum,Bild,Beitrag,Vertragsbeginn,Vertragsende FROM Mitgliedsdaten WHERE BID='"+strTextfeld1+"'");
}
catch (Exception ex){}
out.println("<html>");
out.println("<head>");
out.println("<title>Mitgliedsinformationen</title>");
out.println("</head>");
out.println("<body text='#000000' bgcolor='#FFFF00' link='#FF0000' alink='#FF0000' vlink='#FF0000'>");
out.println("<center>");
out.println("<h1>Mitgliedinformationen</h1>");
out.println("<table>");
out.println("<input type='hidden' name='BID' value='"+strTextfeld1+"'>");


try
{
while (rs.next())
{
out.println("<tr>");
response.setContentType("image/*");
out.println("<td>
Bild1.jpg
</td>");

response.setContentType(CONTENT_TYPE);
out.println("<td>&&&&&</td>");
out.println("<td> Name:");
out.println("

Vorname:");
out.println("

Strasse:");
out.println("

Hausnummer:");
out.println("

PLZ:");
out.println("

Wohnort:");
out.println("

Geburtsdatum:");
out.println("

Vertragsart:");
out.println("

Vertragsbeginn:");
out.println("

Vertragsende:");
out.println("
</td>");
out.println("<td>&&&&&</td>");

wert1 = rs.getString("Name").trim();
wert2 = rs.getString("Vorname").trim();
wert3 = rs.getString("Strasse").trim();
wert4 = rs.getString("Hausnummer").trim();
wert5 = rs.getString("PLZ").trim();
wert6 = rs.getString("Wohnort").trim();
wert7 = rs.getString("Geburtsdatum").trim();
wert8 = rs.getString("Bild").trim();
wert9 = rs.getString("Beitrag").trim();
wert10 = rs.getString("Vertragsbeginn").trim();
wert11 = rs.getString("Vertragsende").trim();

out.println("<td>" + wert1);
out.println("

" + wert2);
out.println("

" + wert3);
out.println("

" + wert4);
out.println("

" + wert5);
out.println("

" + wert6);
out.println("

" + wert7);
out.println("

" + wert9);
out.println("

" + wert10);
out.println("

" + wert11);
}

}
catch (Exception ex){}

out.println("</td>");
out.println("</tr>");
out.println("</table>");
out.println("
");
out.println("

Training</p>");
out.println("</center>");
out.println("</body>");
out.println("</html>");



}
catch (ClassNotFoundException e)
{
out.println(e.getMessage());
}
finally
{
try
{
if (con != null) con.close();
}
catch (SQLException ignored) {}
}
}

}
 
servlet-examples/classes/test/images.

du meinst wohl WEB-INF/classes?

Dateien die unterhalb des WEB-INF Ordners liegen können vom Webcontainer nicht an clients ausgeliefert werden!
 
Bleiglanz hat gesagt.:
servlet-examples/classes/test/images.

du meinst wohl WEB-INF/classes?

Genau! Also ganz genau: servlet-examples/web-inf/classes/test/images.

Bleiglanz hat gesagt.:
Dateien die unterhalb des WEB-INF Ordners liegen können vom Webcontainer nicht an clients ausgeliefert werden!

Heißt das, dass wenn ich den Ordner images, außerhalb des Web-inf Ordners verschiebe und den Link daraufhin ausrichte das Bild dann angezeigt werden sollte?

Ich habe das aber auch schon mal über die nicht ganz elegante Methode file:///C:............ versucht. Und es hat auch nicht funktioniert!
 
doch, das funktiniert

gib einen pfad absolut zur Wurzel deiner webapp an

z.B.

/images/foo.jpg

oder

das ist jetzt reines HTML: wenn dein Servlet auf /eins/zwei/drei/Foo gemappt ist, dann muss das src natürlich relativ zu DIESER Url angegeben werden)
 
Hab die Sache jetzt über einen Apache Webserver gelöst. Jetzt funktioniert es.

Danke für eure Hilfe!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben