JSTL: Leyendo atributos de la cabecera de una petición

En este tutorial aprenderemos como hacer uso de JSTL y Expresion language para recuperar información de la cabecera de una petición.

JSTL: Leyendo atributos de la cabecera de una petición

0. Índice de contenidos.

1. Introducción

Java Standard Tag Library (JSTL) es un conjunto de tags que nos ayudan a resolver las situaciones más comunes a nivel de presentación.
JSTL nos permitirá entre otras cosas setear, obtener y mostrar variables del entorno, iterar colecciones, crear condiciones lógicas y formatear fechas y números etc .. .
JSTL comienza a ser sumamente útil cuando se combina con un lenguaje de expresiones Expression Language (EL). EL es una sintáxis para referenciar objetos, atributos y crear expresiones lógicas.
EL y JSTL en conjunto forman una solución muy simple y poderosa para resolver las posibles dificultades de la presentación.

En el tutorial de hoy veremos como usar dicha combinación para recuperar atributos de la cabecera de la petición y así poder renderizar distintos componentes de presentación.
Como veremos a continuación en el ejemplo, la necesidad surge a partir del distinto comportamiento de un componente JSF en Internet Explorer y Firefox y por tanto la aplicación funciona correctamente o no
en función del navegador que estemos utilizando.

2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware : Portátil Mac Book Pro 15″ (2,6 Ghz Intel Core i7, 4 GB DDR3).
  • Sistema Operativo:Mac OS X Snow Leopard 10.6.7
  • Tomcat 7.x
  • Mozilla Firefox 3.6.17
  • Internet Explorer 8
  • JSF 2.0.3
  • JSP 2.2
  • EL 2.2

3. Pre-Requisitos

Para el correcto funcionamiento del ejemplo propuesto es imprescindible hacer uso de EL 2.0 o superior debido principalmente al uso de funciones.
Para ello la manera más facil es correr nuestra aplicación bajo Tomcat 7.X que automaticamente nos proporciona soporte para JSP 2.2 Y EL 2.2.

4. Ejemplo práctico

Lo primero de todo y para que sea más cómodo seguir el tutorial os dejo los fuentes del ejemplo aquí . Como vereís a continuación el ejemplo propuesto no puede ser más sencillo, sin embargo es suficiente para ver el potencial de JSTL y EL a la hora de resolver ciertas dificultades a nivel de presentación.

Al acceder a la aplicación http://localhost:8080/jstl-el/ encontraremos una pantalla inicial con dos enlaces. Ambos enlaces nos mostrarán pantallas iguales a diferencia del soporte de JSTL y EL.

Hacemos «click» en el primer enlace y navegaremos a la siguiente pantalla:

cuyo código es el siguiente:




	

	
	<h:outputText value="#{msg['app_title']}" />



	
	
	

Como podéis comprobar esta página no tiene ningún misterio y lo que he pretendido con ella es que podáis observar el distinto comportamiento del componente JSF en ambos navegadores (IE,Firefox) y así tener una idea exacta del problema que provoca dicho componente. Si os fijáis en la linea 17 es donde definimos el componente JSF con un evento de cambio de valor. Sin embargo si hacéis uso de IE os daréis cuenta de que el cambio de valor se produce cuando el componente pierde el foco, es decir cuando hacemos «click» en el componente y este queda marcado todavía no se ha producido ningún evento y viceversa.

Aquí es donde entra en juego la alianza entre JSTL y EL que nos va a permitir obtener información de la cabecera de la petición. Desde la página de inicio hacemos «click» en el segundo enlace y nos mostrará una pagina exactamente igual que la anterior. Sin embargo si analizamos su código veremos algunas diferencias:




	

	
	<h:outputText value="#{msg['app_title']}" />
	



	
	
	

Básicamente lo que se pretende con este código es asociar un evento de cambio de valor al componente siempre que el navegador no sea IE. Si el navegador es IE lo que se hace es asociar un evento click para que en ambos navegadores el comportamiento del componente sea el mismo.

En las lineas 3 y 4 se hace referencia a las URL’s de los distintos tags que vamos a utilizar a nivel de presentación. La mayoria son los de siempre pero cabe destacar «http://java.sun.com/jsp/jstl/functions». Para completar correctamente el ejemplo es necesario hacer uso de de una función pasandole como parámetro un atributo de la cabecera de la petición.

En la línea 18 vemos como hacer uso de la función containsIgnoreCase pasandole como parámetro el atributo User-Agent de la cabecera y el valor por el que lo queremos comparar. Esto devolvera true si el User-Agent de la cabecera contiene la cadena MSIE y false en caso contrario. Además hacemos uso del if de JSTL para evaluar el resultado de la función de EL.

Ahora si comprobáis el comportamiento de esta página en ambos navegadores podréis ver que es exactamente el mismo.Eso si cuando hagamos uso de IE la pantalla renderizará un componente con el evento «click» y cuando sea otro navegador se renderizará el componente con el evento «change».

5. Conclusiones.

Seguramente alguno de vosotros estará pensando que no es necesario todo esto para el caso que os he propuesto. Pues bien, nos os falta razón ya que conociendo el comportamiento del componente en IE podríamos haber utilizado el evento «click» y funcionaría correctamente en ambos navegadores pero no quería dejar pasar esta oportunidad de daros a conocer un poquito más acerca de JSTL y EL ya que en más de una ocasión me ha sido verdaderamente útil para resolver ciertas dificultades a nivel de presentación. Por este motivo os recomiendo que le echéis una ojeada al siguiente enlace Expression Language Specification -Version 2.1 para aprender un poco más a fondo como JSTL y EL pueden beneficiaros en vuestros desarrollos.

Espero que les sirva de utilidad.

Un saludo.

Saúl

mailto:sgdiaz@autentia.com

Comentarios

2 respuestas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad

Información básica acerca de la protección de datos

  • Responsable: IZERTIS S.A.
  • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
  • Legitimación: Consentimiento del interesado
  • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
  • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

Consultor tecnológico de desarrollo de proyectos informáticos. Puedes encontrarme en Autentia Ofrecemos servicios de soporte a desarrollo, factoría y formación. Somos expertos en Java/Java EE

¿Quieres publicar en Adictos al trabajo?

Te puede interesar

22/06/2026

Juan Antonio Jiménez Torres

Vamos a instrumentalizar un SDD para un microservicio bancario. En este artículo sobre SDD - Spec Driven Development, instrumentalizado sobre OpenSpec vamos a construir una PoC de algo más serio que una tabla periódica. Un microservicio bancario muy simplificado que gestione cuentas y permita hacer transferencias

16/06/2026

Juan Antonio Jiménez Torres

Este es el segundo artículo sobre SDD, Spec Driven Development, instrumentalizado sobre OpenSpec. Pero esta vez nos acercaremos usando softwere gratuito. Por un lado OpenCode en lugar de ClaudeCode y usando el modelo gratuito Gemma4 de Google en lugar de otros de pago.

08/06/2026

Juan Antonio Jiménez Torres

Aprenderemos sobre SDD – Spec Driven Development instrumentalizado sobre OpenSpec. Haremos un primer acercamiento usando ClaudeCode con Sonnet, para luego, en un artículo posterior pasarnos a la versión gratuita de OpenCode con Gemma4