2016-06-11 14 views
0

Ich habe an einer einfachen Java-Webanwendung gearbeitet, die JSP-Dateien enthält. Ich habe versucht, auf Ressourcendateien wie CSS-Datei und Bilder, die sich im Verzeichnis WEB-INF/classes befinden, über eine JSP-Datei zuzugreifen, die sich im Kontextstammverzeichnis der resultierenden WAR-Datei befindet.Zugriff auf Ressourcen im Ordner WEB-INF

Die Projektstruktur wurde basierend auf der empfohlenen Struktur unter Maven War Plugin Nutzungen erstellt. Ich habe mehrere Lösungen für ähnliche Probleme in diesem Forum durchgespielt, aber keine von ihnen hat für diese neue Struktur funktioniert.

Wie greifen wir auf eine Ressource im Verzeichnis WEB-INF/classes aus einer JSP-Datei zu, die sich beispielsweise im Kontextstammverzeichnis befindet? example WAR file with the mentioned structure

+0

Ich lege sie nicht in die WEB-INF, tatsächlich, wenn Sie den Link, den ich auf Maven War Plugin Nutzung freigegeben habe packt die Bilder, CSS-Dateien und etc. in das WEB-INF/Klassen-Verzeichnis. Es ist die empfohlene Struktur. –

Antwort

2

Wenn Sie diese Ressourcen über HTTP zugreifen möchten, sie müssen woanders sein - sie können nicht in WEB-INF sein. Diese Frage würde ein Duplikat sein, wie es anderswo mehrfach beantwortet wurde (schauen Sie einfach die verwandten Fragen Links für diese Frage). Eine Java-Webanwendung wird nie machen alle Ressourcen unter WEB-INF über HTTP zugänglich.

jedoch, wie Ihre Frage nach der „empfohlenen“ Standard-Dateistruktur ist, lassen Sie mich Ihnen sagen, wo die Dokumentation, die Sie verknüpfen, ist irreführend: Alle Ressourcen in src/main/resources wird oben auf dem Classpath beenden, zum Beispiel in WEB-INF/Klassen. Es wird nicht in dem Verzeichnis enden, in dem die Webapplikation es für die Welt verfügbar macht. Die Dokumentation verwendet jedoch ein Bild, das darauf hinweist, dass das Bild innerhalb der Webanwendung verwendet werden kann. Es kann nicht. Sie können auf den Classloader zugreifen, in Ihrem Fall zum Beispiel als: SomeClassFromYourWebapp.class.getResourceAsStream(). Dies geschieht typischerweise mit .properties Dateien, .xml oder ähnlichen, die zur Laufzeit als mit Bildern verarbeitet werden. Wirklich irreführende Dokumentation würde ich sagen (aber es ist korrekt, nur irreführend)

Technisch würde dies Ihre Frage nach "Wie greife ich auf die Ressource von einer JSP?" Beantworten, weil Sie diesen Code in einer JSP haben können. Ich glaube, dass Ihre Frage eher darin besteht, die Ressourcen über HTTP anzusprechen.

Und die Antwort auf dass ist: Verschieben Sie die Ressourcen, die Sie über HTTP src/main/webapp verfügbar benötigen und halten sie aus WEB-INF. Ansonsten sind sie nur auf dem Klassenpfad.

+0

Das heißt, es ist immer noch üblich, Ressourcen in WEB-INF oder in Classpath zu setzen und sie für http von hier aus zu bedienen. Spring macht das zum Beispiel für jsp. – user2189998

+1

@ user2189998 für jsp: Ja. Allerdings können Sie sie nie als /WEB-INF/index.jsp dann dienen (wie es der Punkt in dieser Antwort ist), aber Sie brauchen interne Umleitung Magie. Und ich habe es noch nie für CSS und Bilder gesehen, obwohl es (theoretisch) möglich ist. Es ist einfach zu viel Aufwand, wenn Sie nur eine Ressource mit einer URL benötigen. –

+0

Olaf Kock, wie Sie es erwähnt haben, funktionierte, als ich es nach src/main/webapp zog. –

Verwandte Themen