Desarrollo Web Java: Servlets, JSP y Contenedores en Aplicaciones Empresariales

Clasificado en Informática

Escrito el en español con un tamaño de 6,81 KB

Conceptos Fundamentales de Servlets y Contenedores Web

Contenedor Web

El Contenedor Web es el soporte fundamental para las comunicaciones, simplificando la interacción entre el servidor web y los servlets.

Gestión del Ciclo de Vida

Controla la creación y destrucción de los servlets, incluyendo la carga de clases, la instanciación y la inicialización (método init()).

Soporte Multihilo

Asigna un hilo Java diferente a cada petición recibida por un servlet, permitiendo el procesamiento concurrente.

Seguridad Declarativa

Permite definir políticas de seguridad mediante un descriptor de despliegue en formato XML.

Descriptor de Despliegue (DD)

El Descriptor de Despliegue (web.xml) es un archivo XML donde se configuran los parámetros de inicialización de la aplicación o de servlets específicos. Estos parámetros se consideran constantes y pueden definirse para un servlet en particular o para toda la aplicación.

Se obtienen mediante getServletConfig().getInitParameter("nombreParametro").

El contenedor es responsable de leer el DD, crear pares nombre/valor y pasarlos al objeto ServletConfig, que a su vez se pasa como parámetro al método init() del servlet.

ServletContext

El objeto ServletContext permite obtener información sobre el contenedor web. Los servlets pueden almacenar información en él, accesible por todos los servlets de la aplicación, en forma de pares nombre/valor (String/Object). Estos se denominan atributos y funcionan de manera similar a un HashMap.

Es importante destacar que ServletContext no es thread-safe por defecto. Para asegurar la sincronización al modificar sus atributos, es necesario sincronizar explícitamente el propio objeto ServletContext, ya que sincronizar solo los métodos doGet()/doPost() no garantiza la seguridad de hilo para el contexto compartido.

Gestión de la Sesión

Dado que HTTP es un protocolo sin estado, recordar las acciones de un usuario a lo largo de múltiples peticiones puede ser complejo. Las soluciones comunes incluyen:

  • Cookies: Pequeños archivos de texto almacenados en el cliente.
  • Reescritura de URL: Añadir información de sesión directamente en la URL.
  • Campos ocultos (hidden fields) en formularios: Transmitir datos de sesión en el cuerpo de la petición.

La solución más robusta en Servlets es el empleo del objeto HttpSession. Este objeto permite almacenar información del estado de la sesión entre el contenedor y un cliente particular. Al igual que ServletContext, es crucial sincronizar el acceso a HttpSession si se van a modificar sus atributos de forma concurrente.

Encadenamiento de Servlets (Request Dispatching)

El encadenamiento de servlets permite que un servlet decida si la petición del cliente debe continuar su procesamiento en otro servlet o JSP, en lugar de generar la respuesta directamente. Los diferentes servlets en la cadena reenvían referencias a los objetos de petición (HttpServletRequest) y respuesta (HttpServletResponse) recibidos en los métodos doGet() o doPost().

El objeto de petición puede ser modificado para añadir información extra que será accesible por el siguiente servlet en la cadena. Esta técnica es útil para:

  • Evitar la repetición de tareas.
  • Realizar tareas de autenticación o pre-procesamiento.
  • Implementar un diseño modular en la capa de presentación, donde cada servlet se encarga de una acción específica.

Archivos WAR (Web Application Archive)

Un archivo WAR es un formato de archivo estándar para empaquetar una aplicación web Java. Contiene todos los componentes necesarios para desplegar la aplicación en un contenedor web, incluyendo:

  • Descriptor de Despliegue (web.xml)
  • Servlets
  • Páginas JSP
  • Librerías de etiquetas personalizadas
  • Archivos HTML, CSS, JavaScript e imágenes
  • Clases Java compiladas y librerías externas (JARs)

Elementos Clave de JavaServer Pages (JSP)

Elementos JSP

Scripting Elements

Los elementos de scripting permiten insertar código Java directamente en la página JSP, el cual se ejecutará en el momento de la petición. Incluyen:

  • Scriptlets (<% ... %>): Bloques de código Java.
  • Declaraciones (<%! ... %>): Declaración de variables y métodos a nivel de clase.
  • Expresiones (<%= ... %>): Imprimen el valor de una expresión Java.

Directivas JSP

Las directivas permiten especificar información acerca de la página JSP que permanece constante para todas las peticiones. Las más comunes son:

  • <%@ page ... %>: Configura atributos de la página (idioma, buffer, manejo de errores).
  • <%@ include ... %>: Incluye contenido de otro archivo en tiempo de traducción.
  • <%@ taglib ... %>: Declara el uso de una librería de etiquetas.

Acciones JSP

Las acciones (etiquetas XML estándar) ejecutan acciones predefinidas sobre la información requerida en el momento de la petición JSP. Ejemplos incluyen:

  • <jsp:include>: Incluye contenido de otro recurso en tiempo de ejecución.
  • <jsp:forward>: Redirige la petición a otro recurso.
  • <jsp:useBean>: Instancia o localiza un JavaBean.
  • <jsp:setProperty> y <jsp:getProperty>: Establecen y obtienen propiedades de JavaBeans.

Expression Language (EL)

El Expression Language (EL) permite acceder de forma concisa a objetos manejados por la aplicación (beans, propiedades, etc.) sin necesidad de código Java explícito. Simplifica la presentación de datos en las JSP.

El código Java incrustado en JSP (y EL) puede acceder a los siguientes objetos implícitos:

  • request (HttpServletRequest)
  • response (HttpServletResponse)
  • pageContext (PageContext)
  • session (HttpSession)
  • application (ServletContext)
  • out (JspWriter)
  • config (ServletConfig)
  • page (instancia del servlet JSP)

Entradas relacionadas: