JSTL (JavaServer Pages Standard Tag Library) es una librería estándar de acciones JSP de propósito general, y aunque se llame a sí misma “librería” (singular), en realidad está compuesta por cinco librerías de accciones:

Librería Namespace Prefijo
core http://java.sun.com/jsp/jstl/core c
functions http://java.sun.com/jsp/jstl/functions f
I18N http://java.sun.com/jsp/jstl/fmt fmt
SQL http://java.sun.com/jsp/jstl/sql sql
XML http://java.sun.com/jsp/jstl/xml x

JSTL ofrece facilidades para implementar iteraciones, evaluar condiciones, capturar excepciones, formatear variables, e incluso acceder a base de datos o manipular XML, aunque el uso de estas últimas en la práctica no están recomendadas.

Es decir, JSTL proporciona las herramientas necesarias para realizar dentro de una página JSP las tareas que normalmente se hacen mediante código Java dentro de un servlet tradicional.

Dependencias

Para utilizar JSTL dentro de un proyecto es necesario añadir la correspondiente dependencia en el fichero pom.xml de Maven:

A pesar de ser estándar, JSTL tiene la consideración de librería externa no imprescindible. Determinados servidores, como el popular Tomcat por ejemplo, no la proporcionan, por lo que es necesario incluirla dentro de los war de las aplicaciones.

Librería “core”

La librería core permite crear variables, realizar iteraciones, evaluar condiciones, y ofrece una serie de acciones de propósito general para facilitar la creación de URLs y acceder a recursos.

c:out: Evalúa una expresión y añade el resultado a la respuesta. Es equivalente a añadir una cadena de texto al Writer de respuesta en un servlet tradicional. Permite indicar un valor por defecto y si los carácteres especiales se tienen que codificar como XML.


c:set: Establece, o crea si no existe, una variable en el ámbito dado. Si no se especifica ámbito por defecto la visibilidad de la variable se restringe a la página.

Admite una sintaxis alternativa que permite establecer el valor de las propiedades de un objeto:

c:remove: Elimina una variable del contexto.

c:if: Evalúa una condición dada, y si el resultado es true procesa el bloque que contiene. El resultado de la evaluación se puede recoger en una variable si es necesario. Es evidente que esto permite realizar un control de flujo condicional básico, como el que se haría por código en un servlet tradicional y generar contenido de forma dinámica.

c:choose: Evalúa condiciones y procesa el bloque de la condición que se cumple, o el bloque por defecto si existe y no se cumple ninguna condición.

c:forEach: Itera variables de tipo colección. Permite especificar los índices de inicio y final, el tamaño de paso, y una variable adicional que almacena todos estos parámetros y proporciona información sobre la iteración en curso dentro del bloque.

c:forTokens: Itera variables de texto que contiene tokens separados por un determinado delimitador dado.

c:catch: Permite capturar excepciones que se produzcan dentro de un bloque de un JSP y guardar la excepción en una variable de la página para que su valor pueda ser evaluado posteriormente y comprobar si se produjo una excepción.

c:redirect: Aborta el proceso del JSP en curso y envía una URL al cliente para que se redirija a ella. En un servlet tradicional es equivalente al llamar al método sendRedirect del objeto respuesta:

c:url: Facilita la construcción de URLs evitando tener que realizar concatenaciones de cadenas de texto por código.

c:import: Importa un recurso dada su URL y lo añade a la respuesta. Adicionalmente permite especificar una variable donde se almacena una referencia al recurso para que pueda ser accedido posteriormente.