En ingeniería de software , un archivo WAR ( Web Application Resource [ 1 ] o Web Application Archive [2] ) es un archivo utilizado para distribuir una colección de archivos JAR , JavaServer Pages , Java Servlets , clases Java , archivos XML , bibliotecas de etiquetas, páginas web estáticas ( HTML y archivos relacionados) y otros recursos que juntos constituyen una aplicación web .
Un archivo WAR puede firmarse digitalmente de la misma manera que un archivo JAR para permitir que otros determinen de dónde proviene el código fuente.
Hay archivos y directorios especiales dentro de un archivo WAR:
Suponiendo que los entornos de producción no promuevan una solución sin realizar pruebas suficientes antes de la implementación, un archivo WAR tiene una clara ventaja cuando se utilizan archivos de propiedades para identificar variables específicas del entorno. Por ejemplo, un servidor LDAP en un entorno de prueba puede ser algo como ldaps://testauth.example.com:636
. El servidor LDAP en un entorno de producción es ldaps://auth.example.com:636
. Un archivo de propiedades externo definiría el vínculo con algo como:
PÁGINA_ENLACE=ldaps://testauth.ejemplo.com:636
El código fuente lee el archivo de propiedades para determinar el servidor LDAP de destino. De esta manera, los desarrolladores pueden estar seguros de que el archivo WAR probado y verificado es exactamente el mismo que el que se está promocionando para producción.
Algunos [¿ quiénes? ] consideran que la implementación web mediante archivos WAR es desventajosa cuando se requieren cambios menores en el código fuente para entornos dinámicos. Cada cambio en el código fuente debe volver a empaquetarse e implementarse en el desarrollo. [3] Esto no requiere detener el servidor web si está configurado para la implementación en tiempo de ejecución. [4]
El siguiente archivo web.xml de ejemplo demuestra la declaración y asociación de un servlet :
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//Aplicación web DTD 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"><aplicación web> <servlet> <nombre-servlet> HelloServlet </nombre-servlet> <clase-servlet> mipaquete.HelloServlet </clase-servlet> </servlet> <servlet-mapping> <servlet-name> HelloServlet </servlet-name> <url-pattern> /HelloServlet </url-pattern> </servlet-mapping> <resource-ref> <description> Referencia de recurso a una fábrica para instancias de javax.mail.Session que pueden usarse para enviar mensajes de correo electrónico , preconfiguradas para conectarse al servidor SMTP apropiado . </description> <res-ref-name> mail/ Session </res-ref-name> <res-type> javax.mail.Session </res-type> <res-auth> Contenedor </res-auth> </resource-ref> </web-app>
El /WEB-INF/classes
directorio se encuentra en la ruta de clases de ClassLoader . (La ruta de clases consiste en una lista de ubicaciones desde las cuales la JVM puede cargar y ejecutar archivos). El directorio contiene las clases asociadas con la propia aplicación web..class
/WEB-INF/classes
Cualquier archivo JAR colocado en el /WEB-INF/lib
directorio también se colocará en la ruta de clase de ClassLoader.