Introducción a JSTL


¿Qué es JSTL? (JSP Standard Tag Library)

La librería JSTL es un componente dentro de la especificación del Java 2 Enterprise Edition (J2EE) y es controlada por Sun MicroSystems. JSTL no es más que un conjunto de librerías de etiquetas simples y estándares que encapsulan la funcionalidad principal que es usada comúnmente para escribir páginas JSP. Las etiquetas JSTL están organizadas en 4 librerías:

  • core: Comprende las funciones script básicas como loops, condicionales, y entrada/salida.
  • xml: Comprende el procesamiento de xml
  • fmt: Comprende la internacionalización y formato de valores como de moneda y fechas.
  • sql: Comprende el acceso a base de datos.
¿Cuál es el problema con los scriptlets JSP?

Nota: Un scriptlet JSP: <% int contador = 100; %>

La especificación JSP ahora se ha convertido en una tecnología estándar para la creación de sitios Web dinámicos en Java, y el problema es que han aparecido algunas debilidades:

  • El código Java embebido en scriptlets es desordenado.
  • Un programador que no conoce Java no puede modificar el código Java embebido, anulando uno de los mayores beneficios de los JSP: permitir a los diseñadores y personas que escriben la lógica de presentación que actualicen el contenido de la página.
  • El código de Java dentro de scriptlets JSP no pueden ser reutilizados por otros JSP, por lo tanto la lógica común termina siendo re-implementado en múltiples páginas.
  • La recuperación de objetos fuera del HTTP Request y Session es complicada. Es necesario hacer el Casting de objetos y esto ocasiona que tengamos que importar más Clases en los JSP.
¿Como mejoran esta situación la librería JSTL?
  • Debido a que las etiquetas JSTL son XML, estas etiquetas se integran limpia y uniformemente a las etiquetas HTML.
  • Las 4 librerías de etiquetas JSTL incluyen la mayoría de funcionalidad que será necesaria en una página JSP. Las etiquetas JSTL son muy sencillas de usarlas para personas que no conocen de programación, a lo mucho necesitarán conocimientos de etiquetas del estilo HTML.
  • Las etiquetas JSTL encapsulan la lógica como el formato de fechas y números. Usando los scriptlets JSP, esta misma lógica necesitaría ser repetida en todos los sitios donde es usada, o necesitaría ser movida a Clases de ayuda.
  • Las etiquetas JSTL pueden referenciar objetos que se encuentren en los ambientes Request y Session sin conocer el tipo del objeto y sin necesidad de hacer el Casting.
  • Los JSP EL (Expression Language) facilitan las llamadas a los métodos Get y Set en los objetos Java. Esto no es posible en la versión JSP 1.2, pero ahora está disponible en JSP 2.0. EL es usado extensamente en la librería JSTL.
¿Cuales son las desventajas de los JSTL?
  • Los JSTL pueden agregar mayor sobrecarga en el servidor. Los scriptlets y las librerías de etiquetas son compilados a servlets, los cuales luego son ejecutados por el contenedor. El código Java embebido en los scriptlets es básicamente copiado en el servlet resultante. En cambio, las etiquetas JSTL, causan un poco más de código en el servlet. En la mayoría de casos esta cantidad no es mensurable pero debe ser considerado.
  • Los scriptlets son más potentes que las etiquetas JSTL. Si desea hacer todo en un script JSP pues es muy probable que insertará todo el código en Java en él. A pesar que las etiquetas JSTL proporciona un potente conjunto de librerías reutilizables, no puede hacer todo lo que el código Java puede hacer. La librería JSTL está diseñada para facilitar la codificación en el lado de presentación que es típicamente encontrado en la capa de Vista si hablamos de la arquitectura Modelo-Vista-Controlador.
Ejemplo: JSTL sin scriptlets

Para demostrar el concepto de ordenamiento y mejor mantenimiento de los JSP, veamos 2 versiones de una página simple. La primera versión usa etiquetas scriptlets, y la segunda usa etiquetas JSTL. Ambas páginas implementan la misma lógica. Graban una lista de objetos AddressVO del Request y luego iteran a través de la lista, imprimiendo el atributo apellido de cada objeto (si el apellido no es null y de longitud diferente a 0). En cualquier otro caso, imprimirá "N/A". Finalmente, la página imprime la fecha actual.

Con scriptlets JSP:
 1  <%@ page import="com.ktaylor.model.AddressVO, java.util.*"%>
 2
 3  <p><h1>Customer Names</h1></p>
 4  <%
 5  List addresses = (List)request.getAttribute("addresses");
 6  Iterator addressIter = addresses.iterator();
 7   while(addressIter.hasNext()) {
 8     AddressVO address = (AddressVO)addressIter.next();
 9     if((null != address) &&
10     (null != address.getLastName()) &&
11     (address.getLastName().length() > 0)) {
12  %>
13     <%=address.getLastName()%><br/>
14  <%
15     }
16     else {
17  %>
18     N/A<br/>
19  <%
20     }
21  }
22  %>
23  <p><h5>Last Updated on: <%=new Date()%></h5></p>

Con JSTL:

 1  <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
 2
 3  <p><h1>Customer Names</h1></p>
 4
 5  <c:forEach items="${addresses}" var="address">
 6    <c:choose>
 7       <c:when test="${not empty address.lastName}" >
 8         <c:out value="${address.lastName}"/><br/>
 9       </c:when>
10       <c:otherwise>
11         N/A<br/>
12       </c:otherwise>
13    </c:choose><br/>
14  </c:forEach><br/>
15
16  <jsp:useBean id="now" class="java.util.Date" />
17
18  <p><h5>Last Updated on: <c:out value="${now}"/></h5></p>
Instalación y configuración del JSTL

La librería JSTL es distribuida como un conjunto de archivos JAR que simplemente tenemos que agregarlo en el classpath del contenedor de servlets.

1. Debemos usar un contenedor de servlets compatible con la versión JSP 2.0 para usar el JSTL 1.1. El Apache Tomcat 5.0 [http://jakarta.apache.org/tomcat/] por ejemplo. En caso contrario, es posible usar el JSTL 1.0 en un contenedor que soporte por lo menos el JSP 1.2 y servlets 2.3.

2. Descargar la implementación JSTL de la página de proyecto Jakarta TagLibs [http://jakarta.apache.org/taglibs/binarydist.html]. La distribución binaria viene empaquetada como .zip o tar.gz. Desempaquete estos archivos en un directorio temporal.

3. Del directorio temporal, copie todos los archivos JAR que se encuentran en jakarta-taglibs/standard-1.0/lib al directorio /WEB-INF/lib de su aplicación Web. Esto incluirá los JAR específicos del JSTL así como también los otros JAR que depende de él.

4. Finalmente, importamos en las páginas JSP cada librería JSTL que la página necesitará. Eso lo hacemos agregando las directivas taglib apropiadas al inicio de la página JSP. Las directivas son:

core: <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
xml: <%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %>
fmt: <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
sql: <%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>

Ahora, creamos una página JSP y probamos algunas etiquetas simples para asegurarnos que la configuración del JSTL está bien hecha.

1  <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
2
3  Setting the value: "Hello World!"
4  <c:set var="hello" value="Hello World!"/>
5  <p/>
6  <c:out value="${hello}"/>

Cuando accedemos a esta página desde el navegador Web, si la configuración es correcta, deberíamos ver:

Setting the value: "Hello World!" 

Hello World!
¿Qué está sucediendo en la página JSP?

En la línea 1 la página helloword.jsp usa la directiva taglib para importar la librería núcleo de la etiqueta y asigna la letra "c" como prefijo. La letra "c" es usada para referenciar a las etiquetas núcleo en la página JSP. Las únicas 2 etiquetas que usamos en el ejemplo son c:set y c:out.

En la línea 4 c:set lo usamos para asignar el valor "Hello World" a la variable hello.

En la línea 6 c:out es usado para evaluar la variable hello con la expresión EL ${$hello}.

Conclusión

Espero que esta introducción a la librería JSTL haya ilustrado lo simple que es y nos permitirán reemplazar limpiamente a los scriptlets JSP. Usando las etiquetas JSTL, podemos reusar más nuestro código en las páginas JSP, podemos tener JSP más ordenados y legibles, y, lo mejor de todo, podemos tener a los diseñadores y a los proveedores de los contenidos trabajando en el mantenimiento de las páginas JSP.



Nombre:

Email:

Comentario: