Uso y Configuración de JSTL en Aplicaciones Web Java

La Biblioteca Estándar de Etiquetas JSP (JSTL) es un conjunto de etiquetas reutilizables que simplifican el desarrollo de aplicaciones web Java al encapsular funcionalidades comunes.

JSTL facilita tareas estructuradas como:

  • Iteración sobre colecciones.
  • Evaluación de condiciones lógicas.
  • Manipulación de documentos XML.
  • Etiquetas para internacionalización.
  • Operaciones SQL directas desde JSP.
  • Un marco para integrar etiquetas personalizadas.

Principalmente, JSTL, junto con las expresiones EL (Expression Lenguage), permite:

  1. Recuperar datos: EL reemplaza las expresiones scriptlets en JSP, accediendo a objetos y datos de diversos ámbitos (request, session, application, page). Soporta el acceso a propiedades de JavaBeans, eelmentos de listas, mapas y arrays.
  2. Realizar operaciones: EL facilita la ejecución de comparaciones relacionales, lógicas y aritméticas básicas directamente en la vista JSP.
  3. Acceder a objetos comunes de desarrollo web: EL proporciona objetos implícitos que ofrecen fácil acceso a objetos web comúnmente utilizados.
  4. Invocar métodos Java: A través de funciones EL personalizadas, es posible llamar a métodos de clases Java desde las expresinoes EL.

Instalación de la Biblioteca JSTL

Para integrar JSTL en un servidor Apache Tomcat:

Método Manual

  1. Descarga: Obtenga el paquete binario de JSTL desde el repositorio oficial de Apache (ej. jakarta-taglibs-standard-1.1.2.zip).

  2. Descompresión y Copia de JARs: Extraiga el archivo descargado. Copie los archivos standard.jar y jstl.jar ubicados en el directorio lib/ del paquete descomprimido a la carpeta /WEB-INF/lib/ de su proyecto web.

  3. Copia de Archivos TLD: Localice los archivos .tld dentro del paquete JSTL descomprimido y cópielos en el directorio /WEB-INF/ de su proyecto.

  4. Configuración en web.xml: Añada la siguiente configuración al archivo web.xml de su aplicación para mapear los URIs de las bibliotecas de etiquetas a sus respectivas ubicaciones de archivos TLD: ```

         <?xml version="1.0" encoding="UTF-8"?>
         <web-app version="2.4"
             xmlns="http://java.sun.com/xml/ns/j2ee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
                 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    
             <jsp-config>
                 <taglib>
                     <taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>
                     <taglib-location>/WEB-INF/fmt.tld</taglib-location>
                 </taglib>
                 <taglib>
                     <taglib-uri>http://java.sun.com/jstl/fmt-rt</taglib-uri>
                     <taglib-location>/WEB-INF/fmt-rt.tld</taglib-location>
                 </taglib>
                 <taglib>
                     <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
                     <taglib-location>/WEB-INF/c.tld</taglib-location>
                 </taglib>
                 <taglib>
                     <taglib-uri>http://java.sun.com/jstl/core-rt</taglib-uri>
                     <taglib-location>/WEB-INF/c-rt.tld</taglib-location>
                 </taglib>
                 <taglib>
                     <taglib-uri>http://java.sun.com/jstl/sql</taglib-uri>
                     <taglib-location>/WEB-INF/sql.tld</taglib-location>
                 </taglib>
                 <taglib>
                     <taglib-uri>http://java.sun.com/jstl/sql-rt</taglib-uri>
                     <taglib-location>/WEB-INF/sql-rt.tld</taglib-location>
                 </taglib>
                 <taglib>
                     <taglib-uri>http://java.sun.com/jstl/x</taglib-uri>
                     <taglib-location>/WEB-INF/x.tld</taglib-location>
                 </taglib>
                 <taglib>
                     <taglib-uri>http://java.sun.com/jstl/x-rt</taglib-uri>
                     <taglib-location>/WEB-INF/x-rt.tld</taglib-location>
                 </taglib>
             </jsp-config>
         </web-app>
    
    
    

Método con Maven

Si utiliza Maven, puede añadir las siguientes dependencias a su archivo pom.xml para gestionar JSTL automáticamente:


<!-- JSTL Core &-->
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.1.2</version>
    <scope>runtime</scope>
</dependency>

<!-- Standard Taglibs (required by some JSTL versions) &-->
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
    <scope>runtime</scope>
</dependency>

Acceso a Datos con Expresiones EL

La sintaxis básica para acceder a datos con EL es ${identificador}. Al ejecutarse, una expresión EL invoca pageContext.findAttribute(identificador), buscando el objeto en los ámbitos page, request, session y application en ese orden. Si se encuentra, devuelve el objeto; de lo contrario, retorna una cadena vacía (no null).

EL simplifica la obtención de propiedades de JavaBeans, así como el acceso a elementos de arrays, colecciones y mapas.

Ejemplo de Acceso a Datos en JSP

datos_ejemplo.jsp:


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="com.ejemplo.dominio.Persona"%>
<%@ page import="com.ejemplo.dominio.Direccion"%>

<html>
<head>
    <title>Acceso a Datos con EL</title>
    <meta charset="utf-8" />
</head>

<body>
    <%
        request.setAttribute("nombreUsuario", "Juan Pérez");
    %>
    <!-- ${nombreUsuario} es equivalente a pageContext.findAttribute("nombreUsuario") -->
    Accediendo a un atributo simple: ${nombreUsuario}
    <hr>

    <%
        Persona personaEjemplo = new Persona();
        personaEjemplo.setEdad(30);
        request.setAttribute("persona", personaEjemplo);
    %>
    Accediendo a una propiedad de Bean: ${persona.edad}
    <hr>

    <%
        Persona personaConDireccion = new Persona();
        Direccion dir = new Direccion();
        dir.setNombreCalle("Avenida Siempre Viva");
        personaConDireccion.setDireccion(dir);
        request.setAttribute("personaCompleta", personaConDireccion);
    %>
    Accediendo a propiedad anidada: ${personaCompleta.direccion.nombreCalle}
    <hr>

    <%
        Persona p1 = new Persona();
        p1.setNombre("Ana");

        Persona p2 = new Persona();
        p2.setNombre("Luis");

        List<Persona> listaPersonas = new ArrayList<>();
        listaPersonas.add(p1);
        listaPersonas.add(p2);

        request.setAttribute("lista", listaPersonas);
    %>

    <!-- Accediendo a un elemento específico de la lista por índice -->
    Elemento de lista en índice 1: ${lista[1].nombre}

    <!-- Iterando sobre una lista con JSTL c:forEach -->
    Iterando sobre la lista:
    <c:forEach var="itemPersona" items="${lista}">
        <span>${itemPersona.nombre}</span>
    </c:forEach>
    <hr>

    <%
        Map<String, String> mapaDatos = new LinkedHashMap<>();
        mapaDatos.put("claveA", "Valor A");
        mapaDatos.put("claveB", "Valor B");
        mapaDatos.put("123", "Valor Numérico");
        request.setAttribute("mapa", mapaDatos);
    %>

    <!-- Accediendo a datos de un mapa por clave -->
      Valor para clave 'claveB': ${mapa.claveB}
      Valor para clave '123': ${mapa["123"]}
      <hr>
      <!-- Iterando sobre un mapa con JSTL c:forEach -->
      Iterando sobre el mapa:
      <c:forEach var="entrada" items="${mapa}">
          ${entrada.key}=${entrada.value}<br/>
      </c:forEach>
    <hr>
</body>
</html>

Clase Persona.java (Ejemplo)


package com.ejemplo.dominio;

public class Persona {
    private String nombre;
    private Direccion direccion;
    private Integer edad;

    public Integer getEdad() {
        return edad;
    }

    public void setEdad(Integer edad) {
        this.edad = edad;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public Direccion getDireccion() {
        return direccion;
    }

    public void setDireccion(Direccion direccion) {
        this.direccion = direccion;
    }
}

Clase Direccion.java (Ejemplo)


package com.ejemplo.dominio;

public class Direccion {
    private String nombreCalle;

    public String getNombreCalle() {
        return nombreCalle;
    }

    public void setNombreCalle(String nombreCalle) {
        this.nombreCalle = nombreCalle;
    }
}

Etiquetas: jstl jsp EL Java EE Taglibs

Publicado el 8-29 02:59