Cargar parámetros al iniciar un Servlet desde el Descriptor de Despliegue (web.xml)


Todos lo Servlets implementan el interface javax.servlet.Servlet bien directamente (en el caso de los Servelts genéricos) o indirectamente, en el caso de los servlets HTTP o JSP. Dicha interfaz incluye los siguientes métodos importantes:

  • init(): Define cualquier código de inicialización que debería ejecutarse cuando se carga el servlet en memoria.
  • service(): El método principal, llamado cuando el servlet recibe una solicitud de servicio. Define un paquete de lógica de procesamiento proporcionado por el servlet.
  • destroy(): Define cualquier código de limpieza requerido antes de eliminar el servlet de la memoria.

Cuando el contenedor servlet carga por primera vez un servlet invoca al método init() del servlet para inicializarlo. Luego según se hacen solicitudes para ejecutar el servlet, el contenedor servlet llama repetidamente al método service(). Finalmente, cuando el contenedor servlet no necesita el servlet, llama al método destroy() del servlet justo antes de descargarlo de la memoria.

Así pues, durante el tiempo de vida de un simple ejemplar servlet, los métodos init() y destroy() sólo son invocados una vez, mientras que el método service() será invocado cada vez que se haga una solicitud para ejecutar el servlet.

Así pues, si necesitamos una serie de parámetros que hemos de cargar cuando se inicia el servlet, lo haríamos en el método init(), como es el caso de nuestro ejemplo. Esto sería útil por ejemplo, a la hora de cargar los parámetros necesarios de una base de datos y establecer la conexión contra ella. Vamos más allá, y en nuestro caso, vamos a definir los parámetros directamente en el descriptor de despliegue (web.xml).

Para ello, necesitaremos una página JSP que contenga un simple formulario con un botón para hacer una petición a nuestro servlet, al que llamaremos “ServletCargaParam“:

  • index.jsp:

  • ServletCargaParam.java:

Crearemos nuestro servlet y sobrescribimos el método init(), haciendo la carga de nuestros dos parámetros del web.xml (p1, p2). Se pueden asociar una serie de parámetros a una aplicación, y para acceder a ellos la clase ServletContext proporciona dos métodos: getInitParameter y getInitParameterNames.

Además, estableceremos otros dos parámetros más (p3, p4) para pasarlos a través del ServletContext. Estos atributos del contexto son locales a la máquina virtual java en la que se crean. Si se quieren compartir (en una aplicación distribuida) han de ser definidos en una sesión, en una base de datos o ser un JavaBean.

La interfaz ServletContext permite acceder a recursos como ficheros HTML, GIF y JPEG mediante los métodos getResource y getResourceAsStream. Estos métodos no permiten obtener recursos dinámicos como JSP.:

  • web.xml:

Por último necesitamos modificar el descriptor de despliegue (web.xml) y añadir nuestros dos parámetros (p1, p2):

El resultado de nuestra prueba, será que nuestra página principal nos mostrará nuestro formulario con su botón para interactuar con el Servlet:

Al hacer click, se nos cargarán los parámetros y nos devolverá nuestra página resultado con la muestra del contenido de ambos parámetros:

Resultado de la ejecucion