# Servlets und Bilder



## Guest (6. Mrz 2006)

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!


----------



## bronks (6. Mrz 2006)

In der web.xml mußt Du nichts eintragen.

Kannst Du das Bild direkt im Browser aufrufen?


----------



## @bronks (6. Mrz 2006)

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 (6. Mrz 2006)

@bronks hat gesagt.:
			
		

> /test/Bild1.jpg


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:


```
[img]test/images/Bild1.jpg[/img]
```


----------



## @bronks (7. Mrz 2006)

Ja Sorry! 

Hab das mit dem Ordner  images vergessen. Aber auch wenn ich den ersten Slash weglasse, funktioniert das nicht!


----------



## bronks (7. Mrz 2006)

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 (8. Mrz 2006)

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 (8. Mrz 2006)

@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.


----------



## Bleiglanz (8. Mrz 2006)

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


----------



## Guest (9. Mrz 2006)

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> 
	

	
	
		
		

		
		
	


	




</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) {}
    }
  }

}


----------



## Bleiglanz (9. Mrz 2006)

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 (9. Mrz 2006)

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!


----------



## Bleiglanz (10. Mrz 2006)

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)


----------



## Guest (10. Mrz 2006)

Hab die Sache jetzt über einen Apache Webserver gelöst. Jetzt funktioniert es. 

Danke für eure Hilfe!


----------

