Die Lösung der root der webapp von getResource
Ich habe eine Datei-Struktur, wie dies in meiner webapp:
webapp/
├── META-INF
└── WEB-INF
├── reports
│ └── info.txt
└── web.xml
3 directories, 2 files
Ich brauche, um /WEB-INF/reports/info.txt
aus einer Klasse etwa so:
this.getClass().getResource("/WEB-INF/reports/info.txt");
Wird dies beheben? Ich werde es testen, aber ich bin mir nicht sicher, wie Sie Sie Tomcat classloader behebt Dinge. Wenn dies nicht funktioniert, wie bekomme ich die Datei?
InformationsquelleAutor Naftuli Kay | 2012-01-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, zunächst
this.getClass().getResource
sollte nicht arbeiten (obwohl ich nicht versuchen). Es ist nicht ein classpath, es ist ein ServletContext, so müssen SieServletContext.getResource
.Problem ist, ist es nicht notwendig, eine Datei: es kann ein Eintrag in einer KRIEGS-Archiv. Also je nachdem, was genau Sie wissen, die Antwort kann anders sein.
Verwenden wir ein Feder-utility-Klasse, die verarbeitet sowohl Dateien (über
ServletContext.getResourcePaths
wenn verfügbar) und Kriege (überServletContext.getResource
). Wenn Sie Frühjahr, dass der beste Weg sein kann. Wenn nicht, werden Sie wahrscheinlich benötigen, um re-implementieren der Lösung.Alternativ können Sie cal verwenden Sie einfach
ServletContext.getResourceAsStream
—es ist nicht egal, wo genau die Ressource gespeichert wird. So lange, wie Sie benötigen Ihren Inhalt und nicht den Weg, Sie sollten in Ordnung sein.Wenn Sie es brauchen, das außerhalb des Behälters, halten Ressourcen in den classpath ein, und berühren Sie nicht die Servlet-API.
Mit Spring ist
ResourceLoader
/ApplicationContext
um Dateien zu laden. Awesomeness 🙂genießen Sie 🙂
InformationsquelleAutor alf
Nein, es wird nicht verrechnet.
Class.getResource
lädt die Ressourcen aus dem Klassenpfad und den webapp-root-Verzeichnis, die selbst nicht auf dem classpath.In Auftrag zu ergattern, die Ressource, die Sie brauchen, um zu halten die
ServletContext
, auf die man dann aufrufen kannServletContext.getResource("/WEB-INF/reports/info.txt")
. Das sollte funktionieren.Erhalten Sie die
ServletContext
mitServlet.getServletConfig().getServletContext()
.Alternativ, bewegen Sie Ihre
reports
- Verzeichnis unter der/WEB-INF/classes
- Verzeichnis (das ist auf dem classpath). Sie können dann Ihre Datei mitInformationsquelleAutor skaffman