Server Pfad

Status
Nicht offen für weitere Antworten.

MQue

Top Contributor
Hallo,

mal wieder eine unmögliche Frage, ich komm leider nicht drauf, ich hab in meiner Webanwendung eine Plain Old Java Klasse, in der ich einen Pfad auf ein Bild benötige, welche am Server im Ordner

Web Pages -> pics -> MeinBild.png (NetBeans hat den Ordner Web Pages für die Webdateien)

liegt.

Habs schon so probiert:

Java:
file = new File("./pics/MeinBild.png");

Da bekomme ich vom Tomcat die Fehlermeldung:

Code:
java.io.FileNotFoundException: C:\Programme\Apache Software Foundation\Apache 
Tomcat 6.0.18\bin\.\pics\MeinBild.png (Das System kann den 
angegebenen Pfad nicht finden)

Wie gebe ich den Pfad richtig an, damit ich am Server auf das Bild zugreifen kann?

Vielen Dank für die Hilfe
 
Oder direkt in einer JSP mit (vorrausetzung Core Tag Library inkludiert)
HTML:
<img src="<c:url value="/pics/MeinImage.png" />" />

Weiß ja nicht, ob du mit dem Bild noch was außer dem anzeigen machen möchtest.
 
Im dist- Ordner meiner IDE gibt es eine *.war in der sich ja alles befindet, der pics Ordner, der WEB-INF Ordner, in der sich die Ordner "classes" und "lib" befinden und ich weiß jetzt eben nicht wie ich in meiner *.class Datei im Ordner "classes" auf die Bilder im "pics" ordner komme, Ich möchte die Bilder im "pics"- Ordner lassen und nicht in eine *.jar verpacken und diese dann in den Classpath hinzufügen,

gibt es da eine Möglichkeit,

lg
 
Wo genau liegen denn die Bilder, im Classpath (WEB-INF/classes, WEB-INF/lib) oder einfach nur so in Ordnern?

Wenn sie im Classpath liegen, dann wird das mit der JSP nicht mehr funktionieren, da kein Client direkt auf WEB-INF zugreifen darf.
Würde da wohl ein sog. "Stream Servlet" bauen und dieses dann per JSP aufrufen, mit den entsprechenden Parametern in der URL, dann wie von FArt vorgeschlagen über den Classloader laden und streamen.

Oder einfach in einen Ordner der Webapp und dann so wie von habi55 vorgeschlagen aus der JSP laden.
 
Wo genau liegen denn die Bilder, im Classpath (WEB-INF/classes, WEB-INF/lib) oder einfach nur so in Ordnern?

Liegen einfauch nur so in einem Ordner auf gleicher ebene wie WEB-INF, da wird mir nichts anderes übrigbleiben als den "pics"- Ordner in den WEB-INF- Ordner zu kopieren, oder?

Vielen Dank,
lg
 
Mein Tipp: mach es richtig und baue nicht irgendeine Workaround, den du (wie man sieht) auch nur mit Mühe und Not hinbekommst...
Annahme: dir ist die Struktur eines WARs bekannt und du weißt auch was man wann wo darin ablegt. Greife NIE direkt (z.B. Fileoperationen) auf Ressorucen außerhalb der Webapplikation zu!
 
Mein Tipp: mach es richtig und baue nicht irgendeine Workaround, den du (wie man sieht) auch nur mit Mühe und Not hinbekommst...
Annahme: dir ist die Struktur eines WARs bekannt und du weißt auch was man wann wo darin ablegt. Greife NIE direkt (z.B. Fileoperationen) auf Ressorucen außerhalb der Webapplikation zu!

Komm leider nicht hin, ich poste mal die Verzeichnisstruktur hier, vielleicht könntet Ihr dann nochmal schreiben, wies gehen könnte, ich hab schon (fast) alles ausprobiert.
Ich möchte also von einem Source Package raus uf pics zugreifen.

lg

michael1234-albums-applikation-picture43-vs.png
 
Mein Tipp: mach es richtig und baue nicht irgendeine Workaround, den du (wie man sieht) auch nur mit Mühe und Not hinbekommst...
Annahme: dir ist die Struktur eines WARs bekannt und du weißt auch was man wann wo darin ablegt. Greife NIE direkt (z.B. Fileoperationen) auf Ressorucen außerhalb der Webapplikation zu!
Ist doch hier gar nicht der Fall 😉

Was er will ist einfach Bilder die in der WebApp liegen aus einem Servlet laden, der Weg wurde schon beschrieben.

Nebenbei, wie würdest du das machen ohne direkt auf das Dateisystem zuzugreifen, wenn deine WebApp permantente Dateien speichert? Innerhalb der WebApp ist das imho keine gute Idee.
Den Weg den ich da gehe ist in der web.xml ein Init-Param zu erzeugen mit dem Pfad zum Ordner für die Dateien.

Klar, in einem EJB Server würde da ein JCA Connector diesen Dienst leisten, aber für WebApp kenne ihc so etwas nicht.

@Michael, wo ist denn jetzt das Problem, oder läuft alles?
 
Hab dir doch den Link gepostet... den ServletContext holen, dann mit getRealPath("/pics") den Pfad holen und schon hast du den Pfad zum Verzeichnis, dann noch das Unterverzeichnis + den Dateinamen angeben.
 
Was er will ist einfach Bilder die in der WebApp liegen aus einem Servlet laden, der Weg wurde schon beschrieben.

Eben. Das macht man wenn ich richtig informiert bin über einen Classloader oder (wenn es um statische Inhalte aus der Webapplikation geht) über den ServletContext mit getResource bzw. getResourceAsStream (zumindest steht das so in der Servlet Spec SRV.3.5).

Nebenbei, wie würdest du das machen ohne direkt auf das Dateisystem zuzugreifen, wenn deine WebApp permantente Dateien speichert? Innerhalb der WebApp ist das imho keine gute Idee.
Den Weg den ich da gehe ist in der web.xml ein Init-Param zu erzeugen mit dem Pfad zum Ordner für die Dateien.
Klar, in einem EJB Server würde da ein JCA Connector diesen Dienst leisten, aber für WebApp kenne ihc so etwas nicht.
Von schreiben war ja nicht die Rede, denn das macht die Sache (wie du schon gesagt hast) komplizierter und ist in einer Webapplikation keine gute Idee (laut J2EE-Spec verboten).
 
Eben. Das macht man wenn ich richtig informiert bin über einen Classloader oder (wenn es um statische Inhalte aus der Webapplikation geht) über den ServletContext mit getResource bzw. getResourceAsStream (zumindest steht das so in der Servlet Spec SRV.3.5).
Ok, da stand ich vorhin auf dem Schlauch.
Hast recht, sollte nicht als File geladen werden!

@Michael1234, nimm lieber diese Mthode: : Interface ServletContext)

Von schreiben war ja nicht die Rede, denn das macht die Sache (wie du schon gesagt hast) komplizierter und ist in einer Webapplikation keine gute Idee (laut J2EE-Spec verboten).
Soweit ich weiss bezieht sich das aber auf EJBs, aber wenn man die WebApp in einem Cluster hat, ist es natürlich genauso daneben.
 
Zuletzt bearbeitet von einem Moderator:
Soweit ich weiss bezieht sich das aber auf EJBs, aber wenn man die WebApp in einem Cluster hat, ist es natürlich genauso daneben.

Webapplikation und JEE kann man nicht so einfach trennen, ganz abgesehen von Clustering usw. Beide Specs haben durchaus Überschneidungen bzw. enge Berührungspunkte. Auch Webserver wie Tomcat bewegen sich immer mehr in Richtung Applikationsserver.

Man sollte als Entwickler im Entperpriseumfeld beide Specs kennen und sich immer entsprechend konform verhalten. Das hat einfach viele Vorteile, denn man spart sich oft viel Ärger (der meistens erste sehr spät eintritt, nämlich im produktiven Betrieb oder bei einer Migration oder nach Einspielen eines Patches). Dazu kommt, dass in der Regel das Design davon profitiert, z.B. durch klare Trennung der Verantwortlichkeiten.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben