So laden Sie eine Ressource aus dem WEB-INF-Verzeichnis eines Webarchivs

Lesezeit: 3 Minuten

So laden Sie eine Ressource aus dem WEB INF Verzeichnis eines Webarchivs
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.

1643912826 342 So laden Sie eine Ressource aus dem WEB INF Verzeichnis eines Webarchivs
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

So laden Sie eine Ressource aus dem WEB INF Verzeichnis eines Webarchivs
webcom

So funktioniert es bei mir ohne Servlet-Verwendung.

Angenommen, ich versuche, auf web.xml in project/WebContent/WEB-INF/web.xml zuzugreifen

  1. 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 ).

  2. 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.xmlaber 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


.

758640cookie-checkSo laden Sie eine Ressource aus dem WEB-INF-Verzeichnis eines Webarchivs

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy