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:
ServletContext context = getContext();
String fullPath = context.getRealPath("/WEB-INF/test/foo.txt");
http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletContext.html#getRealPath(java.lang.String)
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- getResource
Methoden.
ServletContext context = getContext();
URL resourceUrl = context.getResource("/WEB-INF/test/foo.txt");
oder alternativ, wenn Sie nur den Eingabestream möchten:
InputStream resourceContent = context.getResourceAsStream("/WEB-INF/test/foo.txt");
http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletContext.html#getResource(java.lang.String)
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 context
Feld zur Verfügung. In einem Servlet erhalten Sie es von Ihrem, ServletConfig
das an die Servlet- init()
Methode übergeben wird. Wenn Sie es zu diesem Zeitpunkt speichern, können Sie Ihren ServletContext jederzeit abrufen.