Tutorial JSTL (Biblioteca de etiquetas estándar JSP): etiquetas principales y personalizadas

En este tutorial de JSTL, veremos cómo el uso de diferentes etiquetas JSTL facilitará la codificación JSP.

¿Qué es JSTL?

JSTL representa Java biblioteca de etiquetas estándar de páginas del servidor, y es una colección de bibliotecas de etiquetas JSP personalizadas que proporcionan una funcionalidad de desarrollo web común. JSTL es una biblioteca de etiquetas estándar de JSP.

Ventajas de JSTL

A continuación se detallan las ventajas de JSTL:

  1. Etiqueta estándar: Proporciona una rica capa de funcionalidad portátil de páginas JSP. Es fácil para un desarrollador entender el código.
  2. Código ordenado y limpio: Como los scriplets confunden al desarrollador, el uso de JSTL hace que el código sea limpio y ordenado.
  3. Soporte automático de interospección de Javabeans: Tiene la ventaja de JSTL sobre los scriptlets JSP. El lenguaje de expresión JSTL maneja el código JavaBean muy fácilmente. No necesitamos abatir los objetos, que se han recuperado como atributos de alcance. Usar código de scriptlets JSP será complicado y JSTL ha simplificado ese propósito.
  4. Más fácil de leer para los humanos: JSTL se basa en XML, que es muy similar a HTML. Por lo tanto, es fácil de entender para los desarrolladores.
  5. Más fácil de entender para las computadoras: Herramientas como Dreamweaver y la página principal generan cada vez más código HTML. Las herramientas HTML hacen un gran trabajo al formatear el código HTML. El código HTML se mezcla con el código scriptlet. Como JSTL se expresa como etiquetas compatibles con XML, es fácil para la generación HTML analizar el código JSTL dentro del documento.

Etiquetas principales de JSTL

Las etiquetas principales son las etiquetas más utilizadas en JSP. Proporcionan apoyo para

  • Iteración
  • Lógica condicional
  • Captura de excepción
  • URL hacia adelante
  • Redirigir, etc.

Para usar etiquetas principales, primero debemos definir la biblioteca de etiquetas y, a continuación, se encuentra la sintaxis para incluir una biblioteca de etiquetas.

Sintaxis:

<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core%>

Aquí,

  • El prefijo se puede utilizar para definir todas las etiquetas principales y
  • uri es la biblioteca de taglib desde la que se importa

Veamos algunas de las etiquetas principales en detalle.

1. Fuera

  • El resultado de la expresión se muestra en la etiqueta de salida.
  • Puede escapar directamente de las etiquetas XML. Por lo tanto, no se evalúan como etiquetas reales.

Sintaxis:

<c:out value="" default="" escapeXML="">
  • Aquí el valor representa información para la salida y es obligatorio.
  • El valor predeterminado es no generar información y no es obligatorio.
  • escapeXML: es verdadero si escapa de caracteres XML.

Ejemplo:

Coretag_jsp1.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP1</title>
</head>
<body>

</body>
</html>

Explicación del código:

Línea de código 3: Este prefijo taglib es obligatorio para todas las etiquetas y el prefijo agregado es "c". Por lo tanto, se puede utilizar como prefijo para todas las etiquetas principales.

Línea de código 12: Aquí estamos usando coretag out con el prefijo "c" y esto imprimirá el valor en la etiqueta de expresión. Por lo tanto, la salida será el nombre.

Cuando ejecutas el código anterior, obtienes el siguientewing salida:

Etiquetas principales JSTL: fuera

Salida:

  • Obtenemos el valor como nombre de la etiqueta principal "out" que se imprimirá en el flujo de salida.

2. Atrapa

  • Detecta cualquier excepción arrojable que se produzca en el cuerpo y se muestra como resultado.
  • Se utiliza para manejar los errores y detectarlos.

Sintaxis:

<c:catchvar="">

Aquí var representa el nombre de la variable, que contendrá una excepción arrojable.

Ejemplo:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP2</title>
</head>
<body>
<c:catch var="guruException">
   <% int num = 10/0; %>
</c:catch>
The Exception is : ${guruException} 
</body>
</html>

Explicación del código:

Línea de código 3: Este prefijo taglib es necesario para todas las etiquetas y el prefijo agregado es "c", por lo que se puede utilizar como prefijo para todas las etiquetas principales.

Línea de código 11-13: Coretag catch se utiliza para detectar la excepción e imprimirla. Aquí la excepción se genera cuando 10/0 y esa excepción tiene el nombre "guruException".

Línea de código 14: Estamos imprimiendo la “guruException”.

Cuando ejecutes el código, obtendrás el siguientewing salida:

Etiquetas principales JSTL: captura

Salida:

  • Obtenemos una excepción aritmética como /por cero, y se imprime en la salida usando la variable "guruException"

3. Importar

  • Podemos importar el contenido de otro archivo a una página JSP como lo hicimos en JSP incluye acción.
  • Aquí también podemos incluir la URL y el contenido se mostrará en esa página.

Sintaxis:

<c:importvar="" uri="">

Aquí var es un nombre de variable que es un identificador, que contendrá el nombre de archivo/uri.

uri es un nombre de archivo relativo o nombre de orina.

coretag_jsp31.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP 31</title>
</head>
<body>
<c:import var="displayfile" url="coretag_jsp32.jsp">
</c:import>
<c:out value="${displayfile}"/>
</body>
</html>

Coretag_jsp32.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<a>The file is diplayed after importing</a>
</body>
</html>

Explicación del código:

Coretag_jsp31.jsp

Línea de código 3: Este prefijo taglib es necesario para todas las etiquetas y el prefijo agregado es "c", por lo que se puede utilizar como prefijo para todas las etiquetas principales.

Línea de código 11-12: Aquí estamos importando el archivo coretag_jsp32.jsp a este archivo usando la etiqueta de importación

Línea de código 13: Aquí estamos imprimiendo el archivo coretag_jsp32.jsp usando nuestra etiqueta.

Cuando ejecutas el código anterior, obtienes el siguientewing salida.

Etiquetas principales JSTL: Importar

Salida:

  • Coretag_jsp32 se imprime en la salida ya que este archivo se importó en coretag_jsp31.jsp.

4. para cada uno

  • Se utiliza para iterar el número de elementos en una serie de declaraciones.
  • Es lo mismo que un bucle for de Java.

Sintaxis:

<c:forEach var="" begin=""  end="">
  • Aquí var representa el nombre de la variable que contendrá el nombre del contador.
  • El inicio representa el valor inicial del contador.
  • End representará su valor final

Ejemplo:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP4</title>
</head>
<body>
<c:forEach var="gurucount" begin="5" end="10">
 <c:out value="${gurucount}"/>
</c:forEach>
</body>
</html>

Explicación del código:

Línea de código 3: Este prefijo taglib es necesario para todas las etiquetas y el prefijo agregado es "c", por lo que se puede utilizar como prefijo para todas las etiquetas principales.

Línea de código 11-13: Aquí usamos el bucle "forEach" donde el nombre de la variable es "gurucount", que comenzó a contar como 5 y finalizó como 10. Estamos imprimiendo la variable gurucount que tiene números que comienzan del 5 al 10.

Cuando ejecutas el código, obtienes el siguientewing salida

Etiquetas principales JSTL: para cada uno

Salida:

  • El resultado que estamos obteniendo comienza del 5 al 10.

5. Si

  • Se utiliza para Pruebas .
  • Si la etiqueta se usa para probar una condición si es verdadera o no en función de esto, se ejecutará el bloque de código.

Sintaxis:

<c:if test="${condition}></c:if>

Aquí, si la condición es verdadera, se ejecuta una serie de declaraciones.

Ejemplo:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP5</title>
</head>
<body>
<c:set var="count" value="100"/>
<c:if test="${count == 100}">
   <c:out value="The count is 100"/>
</c:if>
</body>
</html>

Explicación del código:

Línea de código 3: Este prefijo taglib es necesario para todas las etiquetas y el prefijo agregado es "c", por lo que se puede utilizar como prefijo para todas las etiquetas principales.

Línea de código 11: Aquí estamos configurando la variable denominada cuenta en 100.

Línea de código 12-14: Aquí estamos usando la "condición si" donde verificamos si el recuento es igual a 100. Si es igual a 100, obtenemos el resultado como "El recuento es 100".

Cuando ejecutas el código anterior, obtienes el siguientewing salida

Etiquetas principales JSTL: si

Salida:

  • Como la condición "si" es verdadera, obtenemos el resultado "El recuento es 100".

6. redirigir

  • Se utiliza para redirigir la página actual a otra URL proporcionando la URL relativa de esta etiqueta.
  • Admite URL relativas al contexto

Sintaxis:

<c:redirect url="" context=""/>

Aquí la URL es la URL relativa a la que se debe redirigir y el nombre de contexto de la aplicación web local.

Ejemplo:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP6</title>
</head>
<body>
<c:redirect url="/"/>
</body>
</html>

Explicación del código:

Línea de código 3: Este prefijo taglib es necesario para todas las etiquetas y el prefijo agregado es "c", por lo que se puede utilizar como prefijo para todas las etiquetas principales.

Línea de código 11: Aquí usamos "etiqueta de redireccionamiento", donde especificamos el nombre de la URL, y cuando hacemos clic en esa página, se redirige al sitio que se ha proporcionado para la redirección.

Cuando ejecutas el código anterior, obtienes el siguientewing producción;

Etiquetas principales JSTL: redireccionamiento

Salida:

  • Obtenemos la URL de salida guru99.com que es redirigida por coretag_jsp6.jsp

Etiquetas personalizadas JSTL

  • Es un elemento de lenguaje JSP definido por el usuario.
  • Cuando JSP se traduce a un servlet, la etiqueta personalizada se convierte en una clase que actúa sobre un objeto y se llama como controlador de etiquetas.
  • Esas acciones cuando se ejecuta el servlet son invocadas por el contenedor web.
  • Para crear la etiqueta personalizada definida por el usuario, necesitamos crear el controlador de etiquetas que extenderá SimpleTagSupport y debe anular el método doTag().
  • Necesitamos crear un TLD donde necesitamos asignar el archivo de clase en el TLD.

Ventajas de las etiquetas personalizadas en JSP

Estas son las ventajas de las etiquetas personalizadas en JSP:

  • Estuche de carga – Una acción descrita en una biblioteca de etiquetas debe poder utilizarse en cualquier contenedor JSP.
  • Simple – Los usuarios no sofisticados deben poder comprender y utilizar este mecanismo. A los proveedores de funcionalidad JSP debe resultarles fácil ponerla a disposición de los usuarios como acciones.
  • Expresivo – El mecanismo debe admitir una amplia gama de acciones, incluidas acciones anidadas, elementos de secuencias de comandos dentro de cuerpos de acciones, creación, uso y actualización de variables de secuencias de comandos.
  • Utilizable desde diferentes lenguajes de scripting – Aunque la especificación JSP actualmente sólo define la semántica de los scripts en el lenguaje de programación Java, queremos dejar abierta la posibilidad de otros lenguajes de scripting.
  • Construido sobre conceptos y maquinaria existentes– No queremos reinventar lo que existe en otros lugares. Además, queremos evitar conflictos futuros siempre que podamos predecirlos.

Sintaxis:

Considere que estamos creando la etiqueta testGuru y podemos usar la clase taghandlertestTag, que anulará el método doTag().

<ex:testGuru/>
Class testTag extends SimpleTagSupport{ public void doTag()}

Además, tendremos que asignar esta clase testTag en TLD (Descriptor de biblioteca de etiquetas), ya que el contenedor JSP creará automáticamente una asignación entre el archivo de clase y el uri que se ha mencionado en el archivo TLD.

Interfaz de etiquetas JSP

  • Esta clase tendrá que extender la clase SimpleTagSupport.
  • Esta clase tendrá que anular el método doTag() que forma parte de la clase SimpleTagSupport (la anulación es un método que se hereda de la clase principal).
  • Esta interfaz es una subinterfaz de la interfaz JSPTag.
  • Proporciona métodos para realizar al inicio y al final de la etiqueta.
  • Además, necesitamos mapear esta clase en TLD, es decir, el descriptor de biblioteca de etiquetas.

Estamos considerando en el siguiente ejemplo.

Método de interfaz de etiqueta

  • doTag() es un método que debemos anular y que tendrá el contenido de la etiqueta.
  • Toma el contexto JSP actual usando getJSPContext()

Ejemplo:

Etiqueta personalizada_jsp1.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Custom Tag</title>
</head>
<body>
<ex:guruTag/>
</body>
</html>

Personalizado.tld

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>2.0</jsp-version>
  <short-name>Test TLD</short-name>
  <tag>
    <name>guruTag</name>
    <tag-class>demotest.guruTag</tag-class>
    <body-content>empty</body-content>
  </tag>
</taglib>

guruTag.java(TagHandler)

package demotest;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;

public class guruTag extends SimpleTagSupport{
	public void doTag() throws JspException,IOException
	{
		JspWriter out = getJspContext().getOut();
		out.println("Guru Tag");
	}

}

Explicación del código:

guruTag.java(TagHandler)

Línea de código 6:La clase guruTag extiende la clase SimpleTagSupport que está presente en el jar javax.servlet.JSP

Línea de código 7: Aquí estamos anulando el método doTag() que lanza JspException e IOException.

Línea de código 9-10: En este método, el código se incrustará en una etiqueta personalizada a la que se llamará. Estamos tomando un objeto de JspWriter y eso imprimirá "Guru Tag".

Personalizado.tld

Línea de código 6: Aquí el nombre de la etiqueta personalizada es "guruTag".

Línea de código 7:La clase de etiqueta es taghandlerclass, es decir, guruTag.java. Toma la ruta completa del archivo del controlador, que incluye la ruta del directorio de la ubicación del archivo.

Etiqueta personalizada_jsp1.jsp

Línea de código 3:Este prefijo taglib es necesario para todas las etiquetas y el prefijo agregado es "ex", por lo que se puede usar como prefijo para todas las etiquetas principales y el uri es custom.tld que asigna el controlador de etiquetas.

Línea de código 11: Aquí estamos definiendo la etiqueta personalizada "guruTag", que llamará al método doTag() de la clase controladora y se ejecutará el código que contiene.

Cuando ejecutas el código anterior, obtienes el siguientewing salida

Interfaz de etiquetas JSP

Salida:

  • Obtenemos el resultado como "GuruTag" de guruTag.java, es decir, TagHandler, que anula el método doTag() y que imprime "Guru Tag" como resultado.

Resumen

  • En esta sección, aprendimos sobre la biblioteca de etiquetas estándar JSP en la que creamos etiquetas principales y etiquetas personalizadas.
  • Las etiquetas principales incluyen etiquetas for, if, redirigir, importar y capturar, que fueron etiquetas utilizadas con fines básicos en JSP.
  • Además, creamos etiquetas personalizadas en las que podemos definir las etiquetas y usarlas en JSP.