Servlet Auf Dateien im .war zugreifen

Decrayer

Mitglied
Hallo,

ich habe folgendes Problem: Ich wandel gerade ein normales Java-Programm in einen Webservice um. Das normale Java Program benutzt einige Unterordner und XML Konfigurationsdateien die beim start ausgelesen werden. Wenn ich das Ganze jedoch als Webservice in eine .war Datei packe und dann auf dem JBoss oder Tomcat ausführe, erhalte ich Fehlermeldungen die darauf hindeuten, dass genau diese Dateien nicht gefunden werden, obwohl ich diese extra in Eclipse unter "Deployment Assembly" hinzugefügt habe.

Wenn ich mir den root-Pfad für Dateizugriffe anzeigen lasse, dann sehe ich, dass es sich um den bin Ordner des JBoss handelt und ich überhaupt nicht in der .war Verzeichnisstruktur navigiere. Wie aber kann ich auf die Dateien die ich in das .war File gesteckt habe zugreifen? Wie lautet z.B. der Pfad, wenn ich auf das WEB-INF Verzeichnis zugreifen möchte?
 
Zuletzt bearbeitet:

turtle

Top Contributor
Wie lautet z.B. der Pfad, wenn ich auf das WEB-INF Verzeichnis zugreifen möchte?

Das ist nicht eindeutig zu beantworten. Die Spezifikation fügt automatisch WEB-INF/classes UND WEB-INF/lib zum Classpath hinzu.

Daher können Dateien daraus einfach geladen werden, beispielsweise
Java:
getClass().getClassLoader().getResourceAsStream("/config/config.txt");

Allgemeinen Zugriff auf das WEB-INF Verzeichnis gibt es ohne Weiteres nicht und müsstest du selber realisieren.
 

Decrayer

Mitglied
Ok, vielleicht formulier ich es einfach noch mal etwas konkreter:

Ich habe bisher in meinem WebService Projekt folgende Dateien/Ordner (Ausschnitt):

Code:
config.xml
data/
	adapters/
	excel/
	plugins/
		ExcelAdapter.jar
WebContent/
	META-INF/
	WEB-INF/


Und ich möchte auf die Datei config.xml zugreifen. Bisher mache ich das über:

Java:
File file = new File("config.xml");


Das funktionierte jetzt aber eben nicht mehr. Dann bin ich auf den Trichter gekommen, dass die ganzen Verzeichnisse und Dateien darin der .war Datei überhaupt nicht zugefügt worden sind und habe sie im Deployment Assembly eingetragen:

Source -> DeployPath

/data -> /data
config.xml -> /

Wenn ich mir das .war file dann anschaue, sieht es da so aus:

Code:
data/
	adapters/
	excel/
	plugins/
		ExcelAdapter.jar
META-INF/
WEB-INF/
config.xml

Also quasi fast genauso wie es auch in meinem Eclipse Entwicklungsordner drin steht, bis auf dass META-INF und WEB-INF jetzt nicht mehr den Überordner WebContent/ haben.

Wenn ich aber im code jetzt mir die Dateien und Verzeichnisse in data/ anzeigen lassen möchte, dann bekomme ich den Pfad nicht zusammen:

Java:
File f = new File("data/);

das gibt mir "Null" zurück.


Daher zwei Fragen:
Ist der DeployPath überhaupt richtig? Oder müsste ich die Sachen woanders hin packen?
Wie lautet der Pfad den ich bei new File() verwenden muss um z.B. auf die config.xml zuzugreifen?

Oder geht das überhaupt nicht mehr mit new File()? Wie sähe eine Alternative aus? Wäre dass dann "File file = getClass().getClassLoader().getResourceAsStream("/config.txt");"?
 
Zuletzt bearbeitet:

turtle

Top Contributor
Ok, vielleicht formulier ich es einfach noch mal etwas konkreter;)

Java:
File f = new File("data/);
funktioniert NICHT aus JAR oder WAR Dateien.

Deshalb solltest du die Dateien über den Classpath laden
Java:
		URL resource = getClass().getClassLoader().getResource("/config.xml");
Dieser Code sollte die Datei config.xml aus z.B. WEB-INF/classes laden.

Java:
		URL resource = getClass().getClassLoader().getResource("/config/config.xml");
Dieser Code sollte die Datei config.xml aus z.B. WEB-INF/classes/config laden.

Also musst du deine Dateien dorthin kopieren.

Eclipse macht dies automatisch mit allen Dateien aus dem src-Zweig und daher sollte es reichen die Dateien in den src-Ordner zu legen.
 

Ähnliche Java Themen

Neue Themen


Oben