estructura de archivos de guerra
Cada aplicación web, cuando se carga en el servidor web, se empaqueta en un solo archivo .war. WAR ahora significa Recursos de aplicaciones web, aunque solía ser Web ARchive. De hecho, este es un archivo zip que contiene una aplicación web empaquetada.
Así es como se ve el contenido típico de un archivo war:
/index.html
/guestbook.jsp
/images/logo.png
/js/jquery.js
/WEB-INF/web.xml
/WEB-INF/classes/com/codegym/Util.class
/WEB-INF/classes/com/codegym/MainServlet.class
/WEB-INF/classes/application.properties
/WEB-INF/lib/util.jar
/META-INF/MANIFEST.MF
Dentro del archivo war hay recursos web estáticos como archivos .html, .css, .js, etc. También puede haber imágenes, videos y, en general, cualquier archivo. Pueden estar en la raíz o en subcarpetas, no importa. Tomcat simplemente los servirá si se solicitan.
Digamos que su aplicación web está cargada en el servidor web con el nombre apple, luego cuando se solicita http://localhost/apple/images/logo.png , Tomcat devolverá el archivo /images/logo.png .
Por separado, vale la pena señalar la carpeta WEB-INF . Está diseñado para almacenar código Java en él. Tomcat no dará a conocer su contenido.
/WEB-INF/clases/ | directorio para clases Java no JAR compiladas, incluidas las clases de servlet y los archivos de recursos que necesita el cargador antes de ejecutar la aplicación |
/WEB-INF/lib/ | lugar para almacenar bibliotecas jar |
/WEB-INF/web.xml | descriptor de despliegue |
estructura de archivos war y proyecto maven
Ahora pasemos a la jerarquía de directorios del proyecto Maven. Puedes ver el diseño completo del catálogo en el manual oficial. Aquí nos familiarizaremos con él en una versión algo abreviada, excluyendo los recursos de prueba. Entonces, la jerarquía de directorios estándar de Maven se ve así:
src/principal/java | códigos fuente de clases de aplicaciones y bibliotecas de acuerdo con la jerarquía de paquetes generalmente aceptada |
src/principal/recursos | archivos de recursos de la aplicación: configuración de la base de datos, archivos de localización, etc. |
src/principal/webapp | recursos de aplicaciones web (archivos JSP, archivos de texto, scripts, etc.) |
Como puede ver, difiere significativamente de la estructura del archivo WAR que conoce. Pero lo que realmente sucede al compilar una aplicación web es simplemente mover y concatenar archivos en la estructura definida en la especificación Java EE.
El directorio src/main/webapp define la raíz de contexto de la aplicación web (cuando se implementa en un servidor, la raíz de contexto es la misma que el nombre del archivo WAR) y ya contiene el directorio WEB-INF. Es decir, los contenidos de src/main/webapp se transfieren por completo a la aplicación web.
Todas sus clases de Java se compilan en archivos de clase y, manteniendo su estructura de paquete, se mueven al directorio /WEB-INF/classes/ . Los archivos JAR de las bibliotecas incluidas, que se definen en las dependencias de Maven pom.xml como definimos anteriormente, se mueven al directorio /WEB-INF/lib/ .
Los recursos de la aplicación src/main/resources se mueven al classpath de la aplicación, específicamente al mismo directorio /WEB-INF/classes/ .
Para que te quede completamente claro, mira este diagrama, que te ayudará a comprender cómo y qué va en cada lugar al construir un proyecto:
GO TO FULL VERSION