JSTL significa Biblioteca de Etiquetas Estándar JSP. JSTL es la biblioteca de etiquetas estándar que proporciona etiquetas para controlar el comportamiento de la página JSP. Las etiquetas JSTL se pueden utilizar para iteración, declaraciones de control, internacionalización, SQL, etc. Vamos a examinar las etiquetas JSTL en detalle en este tutorial de JSTL. Anteriormente, vimos cómo podemos utilizar JSP EL y Etiquetas de Acción JSP para escribir código JSP como HTML, pero su funcionalidad es muy limitada. Por ejemplo, no podemos recorrer una colección utilizando EL o elementos de acción, y no podemos escapar etiquetas HTML para mostrarlas como texto en el lado del cliente. Aquí es donde las etiquetas JSTL son útiles, porque podemos hacer mucho más con ellas.
JSTL
JSTL forma parte de la API de Java EE e está incluido en la mayoría de los contenedores de servlets. Pero para usar JSTL en nuestras páginas JSP, necesitamos descargar los archivos JSTL para su contenedor de servlets. La mayoría de las veces, puedes encontrarlos en los proyectos de ejemplo de la descarga del servidor y puedes usarlos. Necesitas incluir estas bibliotecas en el directorio del proyecto de tu aplicación web WEB-INF/lib.
Archivos JSTL
Los archivos JSTL son específicos del contenedor, por ejemplo, en Tomcat, necesitamos incluir los archivos jar jstl.jar
y standard.jar
en la ruta de construcción del proyecto. Si no están presentes en el directorio lib del contenedor, debes incluirlos en tu aplicación. Si tienes un proyecto de Maven, las siguientes dependencias deben agregarse en el archivo pom.xml
, de lo contrario, obtendrás el siguiente error en las páginas JSP – eclipse No se puede encontrar el descriptor de la biblioteca de etiquetas para "https://java.sun.com/jsp/jstl/core"
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
Etiquetas JSTL
Basadas en las funciones de JSTL, se clasifican en cinco tipos.
-
Etiquetas principales de JSTL: Las etiquetas principales de JSTL proporcionan soporte para la iteración, la lógica condicional, capturar excepciones, URL, redireccionar respuestas, etc. Para usar las etiquetas principales de JSTL, debemos incluirlas en la página JSP como se muestra a continuación.
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
En este artículo, veremos las etiquetas principales importantes de JSTL.
-
Etiquetas de formato y localización de JSTL: Las etiquetas de formato de JSTL se proporcionan para formatear números, fechas y admitir la internacionalización a través de locales y paquetes de recursos. Podemos incluir estas etiquetas de JSTL en JSP con la siguiente sintaxis:
<%@ taglib uri="https://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
-
Etiquetas SQL de JSTL: Las etiquetas SQL de JSTL proporcionan soporte para la interacción con bases de datos relacionales como Oracle, MySql, etc. Usando las etiquetas SQL de JSTL, podemos ejecutar consultas de base de datos, incluimos estas etiquetas de JSTL en JSP con la siguiente sintaxis:
<%@ taglib uri="https://java.sun.com/jsp/jstl/sql" prefix="sql" %>
-
Etiquetas XML JSTL: Las etiquetas XML JSTL se utilizan para trabajar con documentos XML como el análisis de XML, la transformación de datos XML y la evaluación de expresiones XPath. La sintaxis para incluir etiquetas XML JSTL en una página JSP es:
<%@ taglib uri="https://java.sun.com/jsp/jstl/xml" prefix="x" %>
-
Etiquetas de funciones JSTL: Las etiquetas JSTL proporcionan una serie de funciones que podemos utilizar para realizar operaciones comunes, la mayoría de ellas son para manipulación de cadenas como la concatenación de cadenas, la división de cadenas, etc. La sintaxis para incluir funciones JSTL en una página JSP es:
<%@ taglib uri="https://java.sun.com/jsp/jstl/functions" prefix="fn" %>
Tenga en cuenta que todas las URI de etiquetas estándar de JSTL comienzan con https://java.sun.com/jsp/jstl/
y podemos usar cualquier prefijo que queramos, pero es mejor práctica usar el prefijo definido anteriormente porque todos los utilizan, así que no creará ninguna confusión.
Etiquetas Principales de JSTL
Las etiquetas principales de JSTL se enumeran en la siguiente tabla.
JSTL Core Tag | Description |
---|---|
<c:out> | To write something in JSP page, we can use EL also with this tag |
<c:import> | Same as jsp:include or include directive |
<c:redirect> | redirect request to another resource |
<c:set> | To set the variable value in given scope. |
<c:remove> | To remove the variable from given scope |
<c:catch> | To catch the exception and wrap it into an object. |
<c:if> | Simple conditional logic, used with EL and we can use it to process the exception from <c:catch> |
<c:choose> | Simple conditional tag that establishes a context for mutually exclusive conditional operations, marked by <c:when> and <c:otherwise> |
<c:when> | Subtag of <c:choose> that includes its body if its condition evalutes to ‘true’. |
<c:otherwise> | Subtag of <c:choose> that includes its body if its condition evalutes to ‘false’. |
<c:forEach> | for iteration over a collection |
<c:forTokens> | for iteration over tokens separated by a delimiter. |
<c:param> | used with <c:import> to pass parameters |
<c:url> | to create a URL with optional query string parameters |
Tutorial de JSTL
Vamos a ver algunos de los usos de las etiquetas principales de JSTL en una aplicación web sencilla. Nuestro proyecto incluirá un Java Bean y crearemos una lista de objetos y estableceremos algunos atributos que se utilizarán en el JSP. La página JSP mostrará cómo iterar sobre una colección, utilizando lógica condicional con EL y algunos otros usos comunes.
Tutorial de JSTL – Clase Java Bean
package com.journaldev.model;
public class Employee {
private int id;
private String name;
private String role;
public Employee() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
}
Tutorial de JSTL – Clase Servlet
package com.journaldev.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.journaldev.model.Employee;
@WebServlet("/HomeServlet")
public class HomeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Employee> empList = new ArrayList<Employee>();
Employee emp1 = new Employee();
emp1.setId(1); emp1.setName("Pankaj");emp1.setRole("Developer");
Employee emp2 = new Employee();
emp2.setId(2); emp2.setName("Meghna");emp2.setRole("Manager");
empList.add(emp1);empList.add(emp2);
request.setAttribute("empList", empList);
request.setAttribute("htmlTagData", "<br/> creates a new line.");
request.setAttribute("url", "https://www.journaldev.com");
RequestDispatcher rd = getServletContext().getRequestDispatcher("/home.jsp");
rd.forward(request, response);
}
}
Tutorial de JSTL – Página JSP
home.jsp
código:
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Home Page</title>
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<style>
table,th,td
{
border:1px solid black;
}
</style>
</head>
<body>
<%-- Using JSTL forEach and out to loop a list and display items in table --%>
<table>
<tbody>
<tr><th>ID</th><th>Name</th><th>Role</th></tr>
<c:forEach items="${requestScope.empList}" var="emp">
<tr><td><c:out value="${emp.id}"></c:out></td>
<td><c:out value="${emp.name}"></c:out></td>
<td><c:out value="${emp.role}"></c:out></td></tr>
</c:forEach>
</tbody>
</table>
<br><br>
<%-- simple c:if and c:out example with HTML escaping --%>
<c:if test="${requestScope.htmlTagData ne null }">
<c:out value="${requestScope.htmlTagData}" escapeXml="true"></c:out>
</c:if>
<br><br>
<%-- c:set example to set variable value --%>
<c:set var="id" value="5" scope="request"></c:set>
<c:out value="${requestScope.id }" ></c:out>
<br><br>
<%-- c:catch example --%>
<c:catch var ="exception">
<% int x = 5/0;%>
</c:catch>
<c:if test = "${exception ne null}">
<p>Exception is : ${exception} <br>
Exception Message: ${exception.message}</p>
</c:if>
<br><br>
<%-- c:url example --%>
<a href="<c:url value="${requestScope.url }"></c:url>">JournalDev</a>
</body>
</html>
Ahora, cuando ejecutamos la aplicación con la URL https://localhost:8080/JSTLExample/HomeServlet
, obtenemos la respuesta como se muestra en la siguiente imagen. En el ejemplo de JSTL anterior, estamos utilizando
c:catch
para capturar la excepción dentro del método de servicio JSP, es diferente del Manejo de Excepciones JSP con configuraciones de páginas de error. Eso es todo para un rápido resumen de las etiquetas de JSTL y un ejemplo del uso de etiquetas principales de JSTL. Referencia: Página de Wikipedia de JSTL
Source:
https://www.digitalocean.com/community/tutorials/jstl-tutorial-jstl-tags-example