Die Servlet 2.4-Spezifikation sagt dies über WEB-INF aus (Seite 70):
Innerhalb der genannten Anwendungshierarchie existiert ein spezielles Verzeichnis
WEB-INF
. Dieses Verzeichnis enthält alle mit der Anwendung verbundenen Elemente, die sich nicht im Dokumentstamm der Anwendung befinden. Der
WEB-INF
Knoten ist nicht Teil des öffentlichen Dokumentbaums der Anwendung . Keine im WEB-INF
Verzeichnis enthaltene Datei darf vom Container direkt an einen Client geliefert werden. Der Inhalt des
WEB-INF
Verzeichnisses ist jedoch für Servlet-Code mit den Methodenaufrufen getResource
und getResourceAsStream
auf dem sichtbar ServletContext
und kann mithilfe der RequestDispatcher
Aufrufe verfügbar gemacht werden .
Dies bedeutet, dass WEB-INF
Ressourcen für den Ressourcenlader Ihrer Webanwendung zugänglich und für die Öffentlichkeit nicht direkt sichtbar sind.
Aus diesem Grund legen viele Projekte ihre Ressourcen wie JSP-Dateien, JARs / Bibliotheken und ihre eigenen Klassendateien oder Eigenschaftendateien oder andere vertrauliche Informationen in den WEB-INF
Ordner. Andernfalls wäre der Zugriff über eine einfache statische URL (nützlich zum Laden von CSS oder Javascript).
Ihre JSP-Dateien können jedoch aus technischer Sicht überall sein. Zum Beispiel können Sie sie im Frühjahr so konfigurieren, dass sie WEB-INF
explizit vorhanden sind:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" >
</bean>
Die im Wikipedia- Artikel WAR-Dateien genannten Ordner WEB-INF/classes
und sind Beispiele für Ordner, die zur Laufzeit von der Servlet-Spezifikation benötigt werden.WEB-INF/lib
Es ist wichtig, den Unterschied zwischen der Struktur eines Projekts und der Struktur der resultierenden WAR-Datei zu machen.
Die Struktur des Projekts spiegelt in einigen Fällen teilweise die Struktur der WAR-Datei wider (für statische Ressourcen wie JSP-Dateien oder HTML- und JavaScript-Dateien, dies ist jedoch nicht immer der Fall.
Der Übergang von der Projektstruktur in die resultierende WAR-Datei erfolgt durch einen Erstellungsprozess.
Während Sie normalerweise frei sind, Ihren eigenen Erstellungsprozess zu entwerfen, verwenden heutzutage die meisten Leute einen standardisierten Ansatz wie Apache Maven . Unter anderem definiert Maven Standardeinstellungen, für welche Ressourcen in der Projektstruktur welche Ressourcen im resultierenden Artefakt zugeordnet sind (das resultierende Artefakt ist in diesem Fall die WAR-Datei). In einigen Fällen besteht die Zuordnung aus einem einfachen Kopierprozess, in anderen Fällen umfasst der Zuordnungsprozess eine Transformation, z. B. Filtern oder Kompilieren und andere.
Ein Beispiel : Der WEB-INF/classes
Ordner enthält später alle kompilierten Java-Klassen und -Ressourcen ( src/main/java
und src/main/resources
), die vom Classloader geladen werden müssen, um die Anwendung zu starten.
Ein weiteres Beispiel : Der WEB-INF/lib
Ordner enthält später alle JAR-Dateien, die von der Anwendung benötigt werden. In einem Maven-Projekt werden die Abhängigkeiten für Sie verwaltet und Maven kopiert die erforderlichen JAR-Dateien automatisch in den WEB-INF/lib
Ordner für Sie. Das erklärt, warum Sie keinen lib
Ordner in einem Maven-Projekt haben.