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-INFnœud ne fait pas partie de l'arborescence des documents publics de l'application . Aucun fichier contenu dans l' WEB-INFannuaire ne peut être servi directement à un client par le conteneur. Cependant, le contenu du
WEB-INFrépertoire est visible par le code de servlet à l'aide des appels de méthode getResource
et getResourceAsStreamsur le ServletContext, et peut être exposé à l'aide des RequestDispatcherappels.
Cela signifie que les WEB-INFressources 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-INFdossier. 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-INFexplicitement:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" >
</bean>
Les dossiers WEB-INF/classeset WEB-INF/libmentionné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/classesdossier contiendra plus tard toutes les classes et ressources java compilées ( src/main/javaet src/main/resources) qui doivent être chargées par le Classloader pour démarrer l'application.
Autre exemple : le WEB-INF/libdossier 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/libdossier pour vous. Cela explique pourquoi vous n'avez pas de libdossier dans un projet maven.