Introducción a JSTL
Para utilizar JSTL en un proyecto JSP, es neecsario incluir los archivos jstl.jar y standard.jar en el classpath.
Etiquetas principales de JSTL Core
A continuación se presentan las etiquetas más importantes del núcleo de JSTL, con ejemplos prácticos en español.
<c:out> – Salida de contenido
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head><meta charset="UTF-8"><title>Ejemplo c:out</title></head>
<body>
<%
pageContext.setAttribute("persona", "Ana García");
%>
<h2><c:out value="${persona}"></c:out></h2>
<h2><c:out value="${persona2}" default="desconocido"></c:out></h2>
</body>
</html>
<c:set> – Asignar valores a atributos
<body>
<c:set var="usuario" value="Ana" scope="request"></c:set>
<h2><c:out value="${usuario}"></c:out></h2>
<jsp:useBean id="personaBean" class="com.ejemplo.modelo.Persona" scope="page"></jsp:useBean>
<c:set property="id" target="${personaBean}" value="001"></c:set>
<c:set property="nombre" target="${personaBean}" value="Ana García"></c:set>
<c:set property="edad" target="${personaBean}" value="25"></c:set>
<h2>ID: ${personaBean.id}</h2>
<h2>Nombre: ${personaBean.nombre}</h2>
<h2>Edad: ${personaBean.edad}</h2>
</body>
<c:remove> – Eliminar atributos de alcance
<body>
<c:set var="usuario" value="Ana" scope="request"></c:set>
<h2><c:out value="${usuario}" default="sin valor"></c:out></h2>
<c:remove var="usuario" scope="request"/>
<h2><c:out value="${usuario}" default="sin valor"></c:out></h2>
</body>
<c:catch> – Captura de excepciones
<body>
<c:catch var="error">
<%
int resultado = 1 / 0;
%>
</c:catch>
<h2>Mensaje de error: ${error}</h2>
</body>
<c:if> – Condicional simple
<body>
<jsp:useBean id="personaBean" class="com.ejemplo.modelo.Persona" scope="page"></jsp:useBean>
<c:set property="id" target="${personaBean}" value="001"></c:set>
<c:set property="nombre" target="${personaBean}" value="Ana García"></c:set>
<c:set property="edad" target="${personaBean}" value="25"></c:set>
<c:if test="${personaBean.nombre == 'Ana García'}" var="esAna" scope="page">
<h2>Es Ana García</h2>
</c:if>
<c:if test="${personaBean.edad < 18}">
<h2>Es menor de edad</h2>
</c:if>
</body>
<c:choose>, <c:when>, <c:otherwise> – Condicional múltiple
<body>
<jsp:useBean id="personaBean" class="com.ejemplo.modelo.Persona" scope="page"></jsp:useBean>
<c:set property="id" target="${personaBean}" value="001"></c:set>
<c:set property="nombre" target="${personaBean}" value="Ana García"></c:set>
<c:set property="edad" target="${personaBean}" value="25"></c:set>
<c:choose>
<c:when test="${personaBean.edad < 18}">
<h2>Menor de 18</h2>
</c:when>
<c:when test="${personaBean.edad == 18}">
<h2>Exactamente 18</h2>
</c:when>
<c:otherwise>
<h2>Mayor de 18</h2>
</c:otherwise>
</c:choose>
</body>
<c:forEach> – Iteración sobre colecciones
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="com.ejemplo.modelo.Persona, java.util.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head><meta charset="UTF-8"><title>Iteración con c:forEach</title></head>
<body>
<%
String[] mascotas = {"Luna", "Max", "Bella", "Rocky"};
pageContext.setAttribute("mascotas", mascotas);
%>
<c:forEach var="m" items="${mascotas}">
${m}
</c:forEach>
<hr/>
<c:forEach var="m" items="${mascotas}" step="2">
${m}
</c:forEach>
<hr/>
<c:forEach var="m" items="${mascotas}" begin="1" end="2">
${m}
</c:forEach>
<hr/>
<%
List<Persona> listaPersonas = new ArrayList<>();
listaPersonas.add(new Persona(1, "Carlos López", 30));
listaPersonas.add(new Persona(2, "María Pérez", 22));
listaPersonas.add(new Persona(3, "José Martínez", 45));
pageContext.setAttribute("listaPersonas", listaPersonas);
%>
<table border="1">
<tr><th>ID</th><th>Nombre</th><th>Edad</th></tr>
<c:forEach var="p" items="${listaPersonas}">
<tr>
<td>${p.id}</td>
<td>${p.nombre}</td>
<td>${p.edad}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
<c:forTokens> – Separación de cadenas
<body>
<%
String url = "www.ejemplo.com";
String nombres = "Carlos, María, José";
pageContext.setAttribute("url", url);
pageContext.setAttribute("nombres", nombres);
%>
<c:forTokens items="${url}" delims="." var="parte">
${parte}
</c:forTokens>
<hr/>
<c:forTokens items="${nombres}" delims="," var="nombre">
${nombre}
</c:forTokens>
</body>
<c:import> – Inclusión de páginas
<body>
<c:import url="pagina_ejemplo.jsp"></c:import>
<c:import url="otra_pagina.jsp"></c:import>
</body>
<c:url> – Construcción de URLs
<body>
<c:url value="http://www.ejemplo.com" var="urlCompleta">
<c:param name="usuario" value="carlos"></c:param>
<c:param name="edad" value="30"></c:param>
</c:url>
<a href="${urlCompleta}">Ir a ejemplo</a>
</body>
<c:redirect> – Redirección en el cliente
<body>
<c:redirect url="destino.jsp">
<c:param name="usuario" value="carlos"></c:param>
<c:param name="edad" value="30"></c:param>
</c:redirect>
</body>
<!-- destino.jsp -->
<body>
<h2>Usuario: ${param.usuario}</h2>
<h2>Edad: ${param.edad}</h2>
</body>