La especificación Servlet 2.4 dice esto sobre WEB-INF (página 70):
Existe un directorio especial dentro de la jerarquía de la aplicación denominada
WEB-INF. Este directorio contiene todas las cosas relacionadas con la aplicación que no están en la raíz del documento de la aplicación. El
WEB-INFnodo no forma parte del árbol de documentos públicos de la aplicación . Ningún archivo contenido en el WEB-INFdirectorio puede ser servido directamente a un cliente por el contenedor. Sin embargo, el contenido del
WEB-INFdirectorio es visible para el código de servlet usando las llamadas al método getResource
y getResourceAsStreamen el ServletContext, y puede exponerse usando las RequestDispatcherllamadas.
Esto significa que los WEB-INFrecursos son accesibles para el cargador de recursos de su aplicación web y no son directamente visibles para el público.
Es por eso que muchos proyectos ponen sus recursos como archivos JSP, JAR / bibliotecas y sus propios archivos de clase o archivos de propiedades o cualquier otra información confidencial en la WEB-INFcarpeta. De lo contrario, serían accesibles utilizando una URL estática simple (útil para cargar CSS o Javascript, por ejemplo).
Sus archivos JSP pueden estar en cualquier lugar desde una perspectiva técnica. Por ejemplo, en Spring puede configurarlos para que estén WEB-INFexplícitamente:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" >
</bean>
Las carpetas WEB-INF/classesy WEB-INF/libmencionadas en el artículo de archivos WAR de Wikipedia son ejemplos de carpetas requeridas por la especificación Servlet en tiempo de ejecución.
Es importante hacer la diferencia entre la estructura de un proyecto y la estructura del archivo WAR resultante.
La estructura del proyecto en algunos casos reflejará parcialmente la estructura del archivo WAR (para recursos estáticos como archivos JSP o archivos HTML y JavaScript, pero este no es siempre el caso.
La transición de la estructura del proyecto al archivo WAR resultante se realiza mediante un proceso de compilación.
Si bien generalmente es libre de diseñar su propio proceso de compilación, hoy en día la mayoría de las personas utilizará un enfoque estandarizado como Apache Maven . Entre otras cosas, Maven define valores predeterminados para qué recursos en la estructura del proyecto se asignan a qué recursos en el artefacto resultante (el artefacto resultante es el archivo WAR en este caso). En algunos casos, el mapeo consiste en un proceso de copia simple, en otros casos el proceso de mapeo incluye una transformación, como el filtrado o la compilación y otros.
Un ejemplo : la WEB-INF/classescarpeta contendrá más tarde todas las clases y recursos compilados de Java ( src/main/javay src/main/resources) que el Cargador de clases debe cargar para iniciar la aplicación.
Otro ejemplo : la WEB-INF/libcarpeta contendrá más tarde todos los archivos jar necesarios para la aplicación. En un proyecto de Maven, las dependencias se administran por usted y Maven copia automáticamente los archivos jar necesarios en la WEB-INF/libcarpeta. Eso explica por qué no tienes una libcarpeta en un proyecto maven.