2008-11-20 4 views
10

Welchen Klassenpfad enthält ein Servlet-Containersatz?Servlet-Container und Klassenpfad

Nach meinem Verständnis sind drei Komponenten beteiligt. Die JAR-Dateien im Verzeichnis lib des Servlet-Containers und anschließend die Klassen in den WEB-INF/classes- und JAR-Dateien im Verzeichnis WEB-INF/lib. Die Klassen im Verzeichnis lib des Servlet-Containers werden dem Systemklassenpfad hinzugefügt, und der dynamische Klassenpfad enthält die JAR-Dateien im Verzeichnis lib und Klassen im Verzeichnis classes.

Worauf ist der dynamische Klassenpfad festgelegt? Zeigt der dynamische Klassenpfad auf alle Verzeichnisse unter WEB-INF oder enthält alle einzelnen Klassen und JAR-Dateien in WEB-INF/lib und WEB-INF/classes oder zeigt nur auf die zwei Verzeichnisse WEB-INF/classes und WEB-INF/lib? Angenommen, ich habe ein Verzeichnis namens foo in WEB-INF, das bar.properties enthält. Jetzt ist bar.properties auch im Klassenpfad?

Antwort

7

Der Klassenpfad "dynamic" listet WEB-INF/classes auf, jede JAR-Datei unter WEB-INF/lib als separaten Eintrag. Andere Ordner unter WEB-INF sind nicht enthalten.

In Ihrem Beispiel wird bar.properties nicht auf dem Klassenpfad sein. Verschieben Sie es zu WEB-INF/classes, oder legen Sie es in einer JAR-Datei unter WEB-INF/lib.

Der Rest des Klassenpfads hängt von Ihrem Servlet-Container ab. Es ist implementierungsspezifisch, aber die meisten Container haben zwei weitere Orte, an denen Klassen platziert werden können. Eines ist ein Verzeichnis, das für den Container sichtbar ist, aber nicht die Anwendungen, und das andere ist für den Container und alle Anwendungen sichtbar. Da die zweite ClassLoader für alle Anwendungen sichtbar ist, können static Mitglieder dieser Klassen verwendet werden, um Informationen zwischen Anwendungen auszutauschen.

+1

Wenn andere Ordner unter WEB-INF lib enthalten sind, sollte dann die Eigenschaftendatei nicht in den Klassenpfad aufgenommen werden? – Abhi

+0

Sorry, das war ein wichtiger Tippfehler, ich meinte "NICHT enthalten"! – erickson

2

In Ihrem Beispiel müsste bar.properties unter dem Klassenverzeichnis sein, um im Klassenpfad zu sein.