La spécification Servlet 2.4 dit ceci à propos de WEB-INF (page 70):
Un répertoire spécial existe dans la hiérarchie d'application nommée
WEB-INF
. Ce répertoire contient toutes les choses liées à l'application qui ne sont pas dans la racine du document de l'application. Le
WEB-INF
nœud ne fait pas partie de l'arborescence des documents publics de l'application . Aucun fichier contenu dans l' WEB-INF
annuaire ne peut être servi directement à un client par le conteneur. Cependant, le contenu du
WEB-INF
répertoire est visible par le code de servlet à l'aide des appels de méthode getResource
et getResourceAsStream
sur le ServletContext
, et peut être exposé à l'aide des RequestDispatcher
appels.
Cela signifie que les WEB-INF
ressources sont accessibles au chargeur de ressources de votre application Web et ne sont pas directement visibles pour le public.
C'est pourquoi de nombreux projets mettent leurs ressources telles que des fichiers JSP, des JAR / bibliothèques et leurs propres fichiers de classe ou fichiers de propriétés ou toute autre information sensible dans le WEB-INF
dossier. Sinon, ils seraient accessibles en utilisant une simple URL statique (utile pour charger CSS ou Javascript par exemple).
Vos fichiers JSP peuvent être n'importe où d'un point de vue technique. Par exemple, au printemps, vous pouvez les configurer pour qu'ils soient WEB-INF
explicitement:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" >
</bean>
Les dossiers WEB-INF/classes
et WEB-INF/lib
mentionnés dans l' article sur les fichiers WAR de Wikipédia sont des exemples de dossiers requis par la spécification Servlet au moment de l'exécution.
Il est important de faire la différence entre la structure d'un projet et la structure du fichier WAR résultant.
La structure du projet reflétera dans certains cas partiellement la structure du fichier WAR (pour les ressources statiques telles que les fichiers JSP ou les fichiers HTML et JavaScript, mais ce n'est pas toujours le cas.
La transition de la structure du projet vers le fichier WAR résultant est effectuée par un processus de construction.
Alors que vous êtes généralement libre de concevoir votre propre processus de construction, de nos jours, la plupart des gens utiliseront une approche standardisée telle qu'Apache Maven . Entre autres choses, Maven définit les valeurs par défaut pour lesquelles les ressources de la structure du projet correspondent aux ressources de l'artefact résultant (l'artefact résultant est le fichier WAR dans ce cas). Dans certains cas, le mappage consiste en un processus de copie simple, dans d'autres cas, le processus de mappage comprend une transformation, telle que le filtrage ou la compilation et d'autres.
Un exemple : le WEB-INF/classes
dossier contiendra plus tard toutes les classes et ressources java compilées ( src/main/java
et src/main/resources
) qui doivent être chargées par le Classloader pour démarrer l'application.
Autre exemple : le WEB-INF/lib
dossier contiendra plus tard tous les fichiers jar nécessaires à l'application. Dans un projet maven, les dépendances sont gérées pour vous et maven copie automatiquement les fichiers jar nécessaires dans le WEB-INF/lib
dossier pour vous. Cela explique pourquoi vous n'avez pas de lib
dossier dans un projet maven.