Dateipfad zur Ressource in unserem Ordner war / WEB-INF?
95
Ich habe eine Datei in meinem War / WEB-INF-Ordner meines App Engine-Projekts. Ich habe in den FAQs gelesen, dass Sie von dort aus eine Datei in einem Servlet-Kontext lesen können. Ich weiß jedoch nicht, wie ich den Pfad zur Ressource bilden soll:
/war/WEB-INF/test/foo.txt
Wie würde ich meinen Pfad zu dieser Ressource erstellen, um sie mit File () zu verwenden, so wie es oben aussieht?
Es gibt verschiedene Möglichkeiten, dies zu tun. Solange die WAR-Datei erweitert ist (eine Reihe von Dateien anstelle einer .war-Datei), können Sie diese API verwenden:
Dadurch erhalten Sie den vollständigen Systempfad zu der Ressource, nach der Sie suchen. Dies funktioniert jedoch nicht, wenn der Servlet-Container die WAR-Datei niemals erweitert (wie Tomcat). Was funktioniert, ist die Verwendung der ServletContext- getResourceMethoden.
Der letztere Ansatz funktioniert unabhängig davon, welchen Servlet-Container Sie verwenden und wo die Anwendung installiert ist. Der erstere Ansatz funktioniert nur, wenn die WAR-Datei vor der Bereitstellung entpackt wurde.
EDIT:
Die Methode getContext () ist offensichtlich etwas, das Sie implementieren müssten. JSP-Seiten stellen es als contextFeld zur Verfügung. In einem Servlet erhalten Sie es von Ihrem, ServletConfigdas an die Servlet- init()Methode übergeben wird. Wenn Sie es zu diesem Zeitpunkt speichern, können Sie Ihren ServletContext jederzeit abrufen.
Es ist erwähnenswert, dass ich eine Initiale / in den Pfad einfügen musste, damit dies funktioniert: context.getResourceAsStream ("/ WEB-INF / test / foo.txt");
Mick Sear
1
Funktioniert bei Appengine nicht so einfach, da die Frage markiert ist.
Renascienza
2
Es wurde vor 6 Jahren als die richtige Antwort markiert. Entweder hat Google die App Engine-API geändert oder es liegt ein Fehler in Ihrer Bereitstellung vor. Wenn Sie ein Standard-Servlet ausführen, sollten Sie die context.getResourceAsStream()Variante verwenden können.
Berin Loritsch
2
Das scheint gut zu sein, aber ich verwende Java 1.8 und getContext () existiert standardmäßig nicht. Welche JAR-Datei wird benötigt, um es zu verwenden?
F1wade
3
ServletContext ist Teil des javax.servletPakets Ihrer J2EE-Bibliotheken. Sie erhalten einen Verweis darauf von der Servlet-Klasse (dh was erweitert wird java.servlet.GenericServlet). Übrigens hat GenericServlet jetzt eine Methode zu getServletContext()docs.oracle.com/javaee/6/api/javax/servlet/…
Berin Loritsch
3
Mit Java EE 7 können Sie die Ressource jetzt einfacher finden
context.getResourceAsStream()
Variante verwenden können.javax.servlet
Pakets Ihrer J2EE-Bibliotheken. Sie erhalten einen Verweis darauf von der Servlet-Klasse (dh was erweitert wirdjava.servlet.GenericServlet
). Übrigens hat GenericServlet jetzt eine Methode zugetServletContext()
docs.oracle.com/javaee/6/api/javax/servlet/…Mit Java EE 7 können Sie die Ressource jetzt einfacher finden
https://docs.oracle.com/javaee/7/api/javax/servlet/GenericServlet.html#getServletContext--
quelle
getServletContext()
?Ich weiß, dass dies spät ist, aber so mache ich es normalerweise,
quelle