Ich habe ein Webarchiv mit einer Datei im WEB-INF-Verzeichnis.
Wie lade ich diese Datei in eine Java-Klasse?
Ich weiß, dass ich es in das Klassenverzeichnis legen und von dort laden kann. Es würde einfach in WEB-INF eingefügt werden.
Michael Willes
Ich habe ein Webarchiv mit einer Datei im WEB-INF-Verzeichnis.
Wie lade ich diese Datei in eine Java-Klasse?
Ich weiß, dass ich es in das Klassenverzeichnis legen und von dort laden kann. Es würde einfach in WEB-INF eingefügt werden.
Skaffmann
Verwenden Sie die getResourceAsStream()
Methode auf dem ServletContext-Objekt, zB
servletContext.getResourceAsStream("/WEB-INF/myfile");
Wie Sie einen Verweis auf den ServletContext erhalten, hängt von Ihrer Anwendung ab … möchten Sie dies von einem Servlet oder von einer JSP tun?
BEARBEITET: Wenn Sie sich in einem Servlet-Objekt befinden, rufen Sie an getServletContext()
. Wenn Sie sich in JSP befinden, verwenden Sie die vordefinierte Variable application
.
Wenn Sie sich innerhalb von Servlet befinden, können Sie getServletContext() direkt verwenden. 🙂
– Adel Ansari
10. Juli 09 um 9:20 Uhr
Sie können den servletContext auch über request->session->servletContext erreichen. In diesem Fall ist alles, was Sie haben, ein Anforderungsobjekt.
– Adel Ansari
10. Juli 09 um 9:23 Uhr
Auf Tomcat 6 muss ich tun application.getResourceAsStream("/WEB-INF/myConfig.xml");
– Leif Grünwoldt
1. November 10 um 20:22 Uhr
@AdeelAnsari: Ich habe deinen ersten Vorschlag in die Antwort aufgenommen, anstatt getServletConfig().getServletContext()
.
– Blaisorlade
3. Januar 12 um 17:03 Uhr
Zusätzlich zu ServletContext.getResourceAsStream(String)
, ServletContext.getResource(String)
-Methode kann auch nützlich sein, um eine URL zu erhalten, die auf die Datei verweist, anstatt einer InputStream
.
– Blaisorlade
3. Januar 12 um 17:10 Uhr
webcom
So funktioniert es bei mir ohne Servlet-Verwendung.
Angenommen, ich versuche, auf web.xml in project/WebContent/WEB-INF/web.xml zuzugreifen
Fügen Sie in der Registerkarte „Quelle“ der Projekteigenschaft den Quellordner hinzu, indem Sie auf den übergeordneten Container für den WEB-INF-Ordner zeigen (in meinem Fall WebContent ).
Lassen Sie uns nun den Klassenlader verwenden:
InputStream inStream = class.getClass().getClassLoader().getResourceAsStream("Web-INF/web.xml")
Dies wird zu Problemen führen, da die Verwendung der Klasse die Systemklasse verwendet.
– Tschad
31. Juli 18 um 2:12 Uhr
Dadurch werden alle Ihre Webressourcen kopiert WEB-INF/classes
und Sie greifen immer noch nicht zu WEB-INF/web.xml
aber WEB-INF/classes/WEB-INF/web.xml
. Obwohl das Konfigurieren des Quellordners in der IDE für viele Projekt-Setups nicht ausreicht, erhalten Sie am Ende eine Anwendung, die doppelt so groß ist und alle möglichen Duplizierungsprobleme aufweist.
– Tobias Liefke
7. August 20 um 6:45 Uhr
Das Problem, das ich beim Zugriff auf die SQLite-DB-Datei hatte, die ich auf meinem Java-Server (Jersey) erstellt hatte, war ausschließlich auf den Pfad zurückzuführen. Einige der Dokumente sagen, dass die jdbc-Verbindungs-URL wie folgt aussehen sollte: “jdbc:sqlite://path-to-file/sample.db”. Ich dachte, der doppelte Schrägstrich sei Teil eines htt-Protokollpfads und würde bei der Bereitstellung richtig zugeordnet, aber tatsächlich ist es ein absoluter oder relativer Pfad. Als ich also die Datei im Stammverzeichnis des WebContent-Ordners (Tomcat-Projekt) abgelegt habe, funktionierte ein URI wie dieser “jdbc:sqlite:sample.db”.
Das einzige, was mich warf, war, dass ich beim Durchlaufen des Debuggers eine Nachricht erhielt, die besagte: “Öffnen von db: … Berechtigung verweigert”. Ich dachte, es wäre eine Frage der Dateisystemberechtigungen oder vielleicht der SQL-Benutzerberechtigungen. Nachdem ich herausgefunden hatte, dass SQLite nicht das Konzept von Rollen/Berechtigungen wie MySQL usw. hat, habe ich schließlich die Dateiberechtigungen geändert, bevor ich zu der meiner Meinung nach richtigen Lösung kam, aber ich denke, es war nur eine schlechte Nachricht (dh Berechtigung verweigert, statt Datei nicht gefunden).
Hoffe, das hilft jemandem.
Schnelles Update. Dies funktionierte in Eclipse, schlug jedoch bei einer tatsächlichen Bereitstellung auf meiner Tomcat-Instanz fehl. Folgendes hat an beiden Orten funktioniert:
– Ted_Zactly
23. Juni 17 um 20:24 Uhr
Entschuldigung, ich habe die Änderungen nicht rechtzeitig hinzugefügt. Dies funktionierte sowohl in Eclipse als auch bei der Bereitstellung auf der Tomcat-Instanz: ServletContext-Kontext; DBConnection = DriverManager.getConnection(“jdbc:sqlite:”+context.getRealPath(“sample.db”));
– Ted_Zactly
23. Juni 17 um 22:16 Uhr
.