WARS ("Web-Archives") en Tomcat

WAR's

Toda aplicación en Tomcat se encuentra agrupada en WARS ("Web-Archives"), la estructura de un WAR es definida por Sun (el creador de Java) la cual debe ser implementada en cualquier producto de "Servlet Engine"(Web-Container).

WARS en Tomcat

Cuando recién se instala "Tomcat" éste ya contiene varios WARS, los cuales contienen ejemplos y documentación, estos WARS se encuentran bajo el directorio /usr/local/tomcat/webapps, donde /usr/local/tomcat es el directorio raíz de Tomcat (TOMCAT_HOME) definido al instalar Tomcat

Si se desciende a este directorio se observará que además de los archivos *.war existe además un directorio con el mismo nombre del WAR, esto es, si existen WAR's por nombre ROOT.war y examples.war también existen directorios llamados ROOT y examples.

Estos directorios son los que precisamente contienen la estructura del archivo WAR, esto es, el archivo WAR en sí no es legible sino que tiene que ser expandido/descomprimido para ser leído.

Estructura de un Archivo WAR

La estructura de un Archivo WAR es la siguiente:

Este tipo de estructura permite portabilidad a las diversas aplicaciones que son desarrolladas en Java, esto es , si se genera una aplicación para Foros o transacciones financieras estas se pueden contener en un archivo WAR, concentrando cualquier clase Java dentro de /WEB-INF/classes, parámetros específicos en /WEB-INF/web.xml , archivos JAR's en /WEB-INF/lib/ y los diversos JSP's,CSS y documentos HTML bajo el directorio raíz del archivo WAR.

Después de explorar la estructura de un WAR, seguramente se hará la pregunta: Como se lleva esta aplicación a los usuarios finales en Internet ?

Ejecución de WARS en Tomcat

Los siguientes pasos describen como interactúa "Tomcat" con WARS, tome en cuenta que este proceso muy probablemente difiera de otros "Servlet Engines(Web-Containers)" como ServletExec y los diversos "Java Application Servers" en el mercado.

Cuando se lleva acabo la ejecución de Tomcat éste inspecciona y automáticamente expande cualquier archivo WAR que se encuentra bajo el directorio webapps, si observa a detalle los registros ("Logs") de Tomcat notará algunas lineas como las siguientes:

2003-12-13 02:55:13 - ContextManager: Adding context Ctx( /examples )
2003-12-13 02:55:13 - ContextManager: Adding context Ctx( /admin )
2003-12-13 02:55:13 - ContextManager: Adding context Ctx(  )  <--- WAR ROOT 
2001-12-13 02:55:13 - ContextManager: Adding context Ctx( /test )

Estas lineas indican que han sido expandidos 4 WARS con nombres examples,admin,test y uno llamado ROOT, esta expansión genera un directorio llamado de la misma manera que el archivo WAR.

Una vez creados estos directorios (expandidos de WARS) Tomcat toma la información solicitada al sitio de estos directorios, lo anterior significa que si su sitio se llama www.apservidor.com y un usuario intenta visitar su página principal le aparecerá el archivo que se encuentra en el directorio ROOT, si se intenta visitar www.apservidor.com/admin aparecerá el archivo inicial del directorio admin y así sucesivamente.

Lo anterior generalmente ofrece el comportamiento deseado, siendo que se expande el WAR de acuerdo a su nombre, si se incluye un WAR llamado foros este será accesible del directorio llamado foros del sitio (www.apservidor.com/foros) , sin embargo , existen ocasiones en las que es conveniente permitir acceso a cierto WAR bajo otro directorio diferente a su nombre.

Si tiene un WAR llamado registro.war es posible que desee sea utilizado/accesible en varios lugares de un sitio y no necesariamente bajo www.apservidor.com/registro, esta variación se logra modificando el parámetro Context de server.xml .

Creación de WARS en Tomcat

Finalmente cabe mencionar las maneras en que pueden ser creados los archivos WARS, existen varias, a continuación se mencionan las más comunes:

Finalmente recuerde que la creación de WAR'S no es obligatoria sino solo una manera de transferir y modularizar aplicaciones, si coloca la estructura de un WAR bajo el directorio webapps en Tomcat esto funcionará de la misma manera que si hubiera sido descomprimido/expandido el archivo WAR.