Saltar al contenido principal

8. Estructura y despliegue de aplicaciones web

Hasta ahora hemos preparado el servidor y hemos puesto en funcionamiento Tomcat. El siguiente paso es comprender qué contiene una aplicación web Java y cómo podemos desplegarla para que Tomcat la ejecute.

En Tomcat una aplicación puede desplegarse como una carpeta con la estructura adecuada o empaquetada en un archivo WAR.

Idea clave

Una aplicación web puede contener páginas, hojas de estilo, JavaScript, imágenes, clases Java, librerías y archivos de configuración.

Para que Tomcat pueda reconocerla correctamente, estos recursos deben seguir una estructura determinada.

8.1. Estructura de una aplicación web Java​

Una aplicación web Java dispone de un directorio raíz que representa la propia aplicación. Dentro de él podemos encontrar recursos públicos y una zona especial denominada WEB-INF.

Una estructura simplificada podría ser:

miapp/
├── index.html
├── css/
│ └── estilos.css
├── js/
│ └── app.js
├── img/
│ └── logo.png
└── WEB-INF/
├── classes/
├── lib/
└── web.xml

Recursos públicos​

Los archivos situados en la raíz de la aplicación o en carpetas como css, js o img pueden ser entregados directamente al cliente mediante una URL.

Por ejemplo:

miapp/index.html
miapp/css/estilos.css
miapp/img/logo.png

El directorio WEB-INF​

WEB-INF tiene un significado especial dentro de una aplicación web Java. Sus recursos no se sirven directamente al navegador.

Dentro de él podemos encontrar:

  • WEB-INF/classes/. Contiene clases Java compiladas y otros recursos de la aplicación.
  • WEB-INF/lib/. Contiene librerías empaquetadas como archivos JAR.
  • WEB-INF/web.xml. Puede contener el descriptor de despliegue de la aplicación.

También puede existir un directorio META-INF, utilizado para determinados metadatos y configuraciones del paquete.

Ejemplo

Si nuestra aplicación utiliza el contexto /miapp, un recurso público podría solicitarse así:

http://IP_DE_DEBIAN:8080/miapp/img/logo.png

Sin embargo, una petición como:

http://IP_DE_DEBIAN:8080/miapp/WEB-INF/web.xml

no debe permitir descargar ese archivo.

Estructura básica de una aplicación web Java con recursos públicos y directorio WEB-INF

8.2. El archivo WAR y el descriptor web.xml​

Qué es un archivo WAR​

WAR significa Web Application Archive.

Es un archivo que reúne en una sola unidad los recursos necesarios para desplegar una aplicación web Java manteniendo su estructura interna.

Un WAR puede contener:

  • Recursos HTML, CSS, JavaScript e imágenes.
  • Páginas JSP.
  • Clases Java compiladas.
  • Servlets.
  • Librerías JAR.
  • Archivos de configuración.

Por ejemplo:

biblioteca.war
├── index.html
└── WEB-INF/
├── classes/
├── lib/
└── web.xml

El empaquetado facilita el despliegue porque podemos trasladar una aplicación completa mediante un único archivo.

El descriptor de despliegue web.xml​

El archivo:

WEB-INF/web.xml

se denomina descriptor de despliegue.

Es un documento XML que puede declarar información sobre la aplicación, como:

  • Servlets y sus rutas.
  • Filtros.
  • Parámetros de inicialización.
  • Configuración de sesiones.
  • Restricciones de seguridad.
Perspectiva actual

web.xml sigue siendo válido, pero ya no es obligatorio en todas las aplicaciones.

Desde Servlet 3.0 muchos componentes pueden declararse mediante anotaciones, por ejemplo @WebServlet.

En aplicaciones actuales podemos encontrar configuración mediante anotaciones, mediante web.xml o combinando ambos mecanismos.

Terminología actual

Tomcat 10 utiliza las APIs Jakarta (jakarta.*).

En documentación antigua encontraremos referencias a Java EE, J2EE o paquetes javax.*. Una aplicación antigua puede necesitar adaptación antes de ejecutarse en Tomcat 10.

8.3. Desplegar una aplicación en Tomcat​

Desplegar una aplicación significa instalarla en Tomcat para que el contenedor pueda reconocerla, iniciarla y hacerla accesible mediante una URL.

Tomcat admite:

  • Una aplicación en forma de directorio expandido.
  • Un archivo .war.

En nuestra instalación de Debian, el directorio habitual de aplicaciones es:

/var/lib/tomcat10/webapps

El nombre de la aplicación y su contexto​

Tomcat asigna a cada aplicación una ruta de contexto (context path).

Si desplegamos:

biblioteca.war

la aplicación utilizará normalmente el contexto:

/biblioteca

y podremos acceder mediante:

http://IP_DE_DEBIAN:8080/biblioteca/

El nombre ROOT tiene un significado especial. Una aplicación denominada ROOT.war representa el contexto raíz:

http://IP_DE_DEBIAN:8080/
Relación entre el nombre de un archivo WAR, el contexto de Tomcat y la URL de la aplicación

Despliegue mediante Tomcat Manager​

En el apartado anterior configuramos Tomcat Manager. Esta interfaz permite desplegar aplicaciones desde el navegador.

Accedemos desde la máquina anfitriona a:

http://IP_DE_DEBIAN:8080/manager/html

Nos autenticamos con el usuario que configuramos con el rol manager-gui.

En la sección de despliegue podemos seleccionar y subir un archivo WAR.

Para realizar esta práctica utilizaremos una aplicación web mínima preparada para comprobar el proceso de despliegue. Descargar biblioteca.war

El proceso general es:

  1. Seleccionar el archivo .war.
  2. Enviarlo al servidor.
  3. Comprobar que Tomcat ha reconocido la aplicación.
  4. Acceder a su ruta de contexto desde el navegador.
Sección de despliegue de archivos WAR en Tomcat Manager
Aplicación desplegada en Tomcat
Otra forma de desplegar

Tomcat también puede detectar aplicaciones situadas directamente en su directorio webapps.

Por ejemplo:

/var/lib/tomcat10/webapps/biblioteca.war

Cuando el despliegue automático está habilitado, Tomcat puede reconocer el archivo y poner en marcha la aplicación.

Para nuestras primeras prácticas utilizaremos Tomcat Manager, porque permite observar con claridad qué aplicación hemos desplegado.

Lo veremos más adelante

En esta unidad nos interesa comprender qué es una aplicación desplegable y cómo ponerla en funcionamiento.

La administración detallada de aplicaciones —detenerlas, recargarlas, retirarlas, actualizar versiones y gestionar su ciclo de vida— se trabajará en la unidad dedicada a la instalación y administración de aplicaciones web en servidores de aplicaciones.

Antes de terminar la unidad

Comprueba que puedes explicar:

  1. Qué diferencia existe entre los recursos públicos de una aplicación y WEB-INF.
  2. Para qué sirven WEB-INF/classes y WEB-INF/lib.
  3. Qué contiene un archivo WAR.
  4. Qué es el descriptor de despliegue web.xml.
  5. Qué relación existe entre biblioteca.war, el contexto /biblioteca y su URL.
  6. Cómo podemos desplegar un WAR mediante Tomcat Manager.

8.4. Para saber más​

Para saber más

Si quieres ampliar los conceptos de este apartado, puedes consultar:

Estos recursos son complementarios y no es necesario estudiarlos en profundidad para seguir la unidad.