JSTL

Este documento se publica bajo la licencia "Creative Commons Attribution License". Para ver una copia de la licencia visita http://creativecommons.org/licenses/by/1.0/ o envía una carta a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

04 abril 2004

Revision History
Revision 104 abril 2004
alpha JSTL 1.0
Revision 225 mayo 2004
alpha JSTL 1.1

Abstract

Tutorial y referencia de la especificación JavaServer Pages Standard Tag Library (JSTL) versión 1.1.


Table of Contents

Introducción
Introducción
¿Que es JSTL?
JSTL es fácil
Historia de JSTL
Instalar JSTL
Expression Language (EL)
EL
Operadores
Literales
Objetos implícitos
Funciones EL
Etiquetas
Core
Bases de datos
I18n y formateo
XML
Validadores de bibliotecas (TLVs)
¿Que es un TLV?
TLVs de JSTL
Repaso a XPath
¿Que es XPath?
Selección
Expresiones XPath
Métodos

Introducción

Introducción

JSP

¿Que es JSP?

  • JSP significa Java Server Pages (Páginas Java en el Servidor).

  • JSP es una tecnología Java para escribir programas que se ejecutan en el servidor.

  • Existen muchos servidores capaces de ejecutar páginas JSP: Tomcat, JBoss, Resin, etc.

¿Que es una página JSP?

  • Una página JSP es un fichero de texto.

  • Una página JSP es HTML convencional al que se le añaden instrucciones JSP ejecutables.

  • Las instrucciones JSP están formadas por etiquetas similares a las del código HTML.

  • Una página JSP tiene la extensión .jsp.

  • Este es un ejemplo de página JSP:

    <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt_rt"  %>
    <jsp:useBean id="now" class="java.util.Date" />
    <html>
    <body>
      Hoy es <fmt:formatDate value="${now}" dateStyle="full" />
    </body>
    </html>
    y su resultado

    Figure 1. 

¿Como se ejecuta?
  • Si el usuario pide una página con extensión .html el servidor se la envía.

  • Si el usuario pide una página con extensión .jsp el servidor ejecuta el JSP y añade el resultado al HTML original de la página.

  • Para ejecutar una página JSP, el servidor realiza internamente varias operaciones:

    • Convierte la página JSP en código Java.

    • Compila el código Java.

    • Ejecuta el código Java.

¿Para que sirve?

  • Programar con instrucciones JSP es más rápido porque no necesitamos compilar.

  • JSP permite crear páginas dinámicas (o sea, páginas cuyo contenido varia en cada ejecución).

  • Con JSP podemos responder a peticiones o información que el usuario nos envía.

  • Con JSP podemos acceder a bases de datos o realizar cualquier operación posible con Java.

  • JSP puede incluir instrucciones JSP y/o código en Java pero este último no es aconsejable porque produce páginas complicadas de mantener.

JSTL

¿Que es JSTL?
  • JSTL significa Java Standard Template Library (biblioteca de etiquetas estándar para Java).

  • JSTL es un subconjunto de las etiquetas disponibles en JSP 2.0.

  • JSTL no contiene código Java.

  • JSTL es sencillo.

¿Qué requiere?
  • Conocimientos básicos acerca del desarrollo de aplicaciones Web en Java.

  • Un servidor capaz de ejecutar JSP 2.0.

  • Instalar una implementación de JSTL: jstl-1.0.2.jar (20k), standard-1.0.4.jar (503k).

¿Que es JSTL?

JSTL es una biblioteca que implementa funciones de uso frecuente en aplicaciones JSP. En concreto, JSTL proporciona

  • Cinco bibliotecas de etiquetas JSP:

    • Funciones comunes de iteración sobre datos, operaciones condicionales, e importación de otras páginas.

    • Internacionalización y formateo de texto.

    • Funciones de manipulación de cadenas.

    • Procesamiento de XML.

    • Acceso a bases de datos.

  • Un lenguaje de expresión para referenciar objetos y sus propiedades sin necesidad de código Java.

  • Validadores de bibliotecas de etiquetas (Tag Library Validators, TLVs).

JSTL requiere un contenedor de JSP 2.0.

JSTL es fácil

Por su simplicidad, JSTL solo requiere conocimientos rudimentarios de Java, JSP, y aplicaciones Web. Cualquier desarrollador puede comenzar a usarlo de forma casi inmediata.

JSTL facilita la referencia a objetos:

<%-- con JSP --%>
<%= session.getAttribute("username").getFirstName()%>

<%-- con JSTL --%>
${sessionScope.username.firstName}

[PENDIENTE] más ejemplos.

Historia de JSTL

Con JSTL se pretendía recopilar las etiquetas JSP más usadas en una biblioteca estándar que pudiera usarse en todos los contenedores JSP

La especificación JSTL se desarrollo bajo el auspicio del JCP (Java Community Process, Proceso Comunitario Java). El JCP es un proceso supervisado por SUN pero abierto a empresas, e individuos particulares, que guía el desarrollo y aprobación de los estándares para el lenguaje Java. En la actualidad (mayo 2004) el JCP cuenta con 700 participantes.

Las iniciativas para crear un estándar dentro del proceso JCP se conocen como JSR (Java Specificacion Request, Petición de Especificación Java). La JSR nº 52 se llamó "A Standard Tag Library for JavaServer Pages", o abreviadamente JSTL. Fue solicitada originalmente por Eduardo Pelegri-Llopart y Anil Vijendran, empleados de SUN. En su desarrollo participaron individuos como Jason Hunter, y representantes de varias organizaciones (ASF, Adobe, BEA, y otras).

La especificación JSTL 1.0 fue terminada el 11 de julio de 2002. Unos días después apareció la primera implementación creada por miembros del proyecto Taglibs de la fundación Apache. La última versión de JSTL a día de hoy (mayo de 2004) es la 1.1, implementada por el proyecto Taglibs.

JSTL es opcional en J2EE 1.4.

Instalar JSTL

Descargar el software

Para trabajar con JSTL necesitamos

  • Un kit de desarrollo java como el Java Standard Edition (J2SE) de Sun.

  • Un servidor que ejecute Servlets y JSP como Tomcat. JSTL 1.0 necesita JSP 1.2 y Servlets 2.3 implementadas por Tomcat 4. JSTL 1.1 requiere JSP 2.0 y Servlets 2.4, implementadas por Tomcat 5. O dicho de otro modo, si vas a trabajar con la última versión de JSTL (la 1.1) usa Tomcat 5.

  • Una implementación de JSTL como la proporcionada por el proyecto Taglibs de Apache. La distribución (jakarta-taglibs-standard-1.1.0.zip) contiene documentación, ejemplos, la implementación en sí, y varios jars de dependencias. Si quieres ahorrar tiempo baja solo los jars siguientes: jstl-1.0.2.jar (20k), standard-1.0.4.jar (503k).

  • Si vas a trabajar con expresiones XPath necesitaras jaxen-full.jar, y saxpath.jar, de la distribución de Jaxen, el motor XPath escogido por Sun para JSTL. Jaxen es un interfaz XPath para evaluar expresiones en DOM, JDOM, dom4j, o EXML. Esta presente en el Web Services Developer Pack de Sun.

El fichero jar jstl-1.0.2.jar contiene clases javax.servlet.jsp.jstl.* con la API de JSTL. El fichero standard-1.0.4.jar contiene los paquetes con la implementación de JSTL.

Instalar Tomcat

Para instalar Tomcat

  • Usamos un paquete especifico de nuestro sistema operativo, o simplemente bajamos la distribución en zip o tar.gz y la descomprimimos donde nos plazca.

  • Establecemos la variable de entorno CATALINA_HOME apuntando al directorio de instalación.

Con la distribución en zip/tar.gz el resultado es similar a este:

Figure 2. Tomcat 5 en Windows

Tomcat 5 en Windows
Cada directorio tiene un propósito, pero por ahora solo necesitamos saber que en bin están los scripts de arranque del servidor, y en webapps las aplicaciones Web.

Crear una aplicación de ejemplo

En Tomcat, cada aplicación Web se añade en un subdirectorio de CATALINA_HOME/webapps. Además el estándar requiere que tenga cierta estructura de directorios. Sin entrar en detalles, necesitaremos una estructura como esta:

$CATALINA_HOME/webapps/miAplicacion
└───WEB-INF
    ├───classes
    └───lib
            commons-logging-1.0.3.jar
            jstl-1.0.2.jar
            standard-1.0.4.jar

Observa que web.xml no es obligatorio según la especificación Servlet, y tampoco necesitamos crearlo para declarar los descriptores de etiquetas, porque desde JSP 1.2 es posible (y aconsejable) empaquetarlos con la propia implementación binaria. En JSTL los descriptores están en el fichero standard-1.0.1.jar.

En cualquier caso, no esta de más añadir un web.xml. Se coloca bajo el directorio WEB-INF:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
         version="2.4">

    <description>JSTL test</description>    
    <display-name>JSTL test</display-name>
</web-app>                

Si reiniciamos Tomcat, la aplicación será accesible en http://localhost:8080/miAplicacion, pero no veremos nada a menos que añadamos alguna página JSP.

Crear una página JSP con JSTL

Siguiendo con la aplicación Web de la sección anterior, vamos a crear una página JSTL.

En toda página JSP hay que declarar la biblioteca a la que pertenece cada etiqueta que usemos. Puesto que son varias líneas, lo más comodo es hacer las declaraciones en un fichero aparte, y luego incluir dicho fichero en nuestras páginas JSP. Este sistema evita repetir el mismo texto en todas las páginas, y si en el futuro añadimos más bibliotecas, solo tendremos que modificar un único fichero.

  • Añade una página $CATALINA_HOME/webapps/miAplicacion/taglibs.jsp con las siguientes declaraciones:

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

  • Añade una página $CATALINA_HOME/webapps/miAplicacion/index.jsp que importe la anterior usando una directiva include:

    <%@include file="taglibs.jsp" %>
    <html>
    <body>
      <c:out value="Hola mundo"/>
    </body>
    </html>
    En este ejemplo hemos usado la etiqueta c:out de la librería core para mostrar un mensaje.

Generar un proyecto JSTL con Maven

En la sección anterior creamos un proyecto de ejemplo directamente sobre el servidor Tomcat. Vale como prueba, pero en proyectos complejos resulta más práctico crear la aplicación en un directorio aparte para no mezclar el entregable (proyecto terminado), con el código fuente original.

Herramientas como Ant o Maven, nos permiten automatizar la construcción y despliegue de una aplicación a partir de su código fuente. Normalmente comenzamos un proyecto escribiendo un script, pero si somos usuarios de Maven podemos generar automáticamente una aplicación de ejemplo que tomaremos como punto de partida.

Warning

Maven es una herramienta similar a Ant pero más flexible y compleja. Si eres principiante probablemente te traiga más complicaciones que beneficios.

Maven permite generar proyectos de ejemplo (script incluido) para varias tecnologías usando el plugin genapp. Por ahora existen plantillas para JSTL, Struts, Struts+JSTL, EJB, y otros. A continuación se explica como.

Genapp necesita XDoclet, así que primero instalamos el plugin Maven-XDoclet. Maven descargará automaticamente las de Internet las dependencias necesarias.

$ maven plugin:download -DartifactId=maven-xdoclet-plugin -DgroupId=xdoclet -Dversion=1.2
 __  __
|  \/  |__ _Apache__ ___
| |\/| / _` \ V / -_) ' \  ~ intelligent projects ~
|_|  |_\__,_|\_/\___|_||_|  v. 1.0-rc2

Intentando descargar junit-3.8.1.jar.
................
.
Intentando descargar servletapi-2.3.jar.
...........
.
Intentando descargar jstl-1.0.2.jar.
....
.
Intentando descargar standard-1.0.4.jar.
.......................................................................
.
Intentando descargar cactus-13-1.6dev-20040115.jar.
...................................
.
Intentando descargar commons-logging-1.0.3.jar.
......
.
Intentando descargar xdoclet-1.2.jar.
....................
.
Intentando descargar xdoclet-web-module-1.2.jar.
......
Intentando descargar xdoclet-ejb-module-1.2.jar.
............................
.
Intentando descargar xjavadoc-1.0.2.jar.
..................................
.
Intentando descargar httpunit-1.5.4.jar.
.................................................
.
Intentando descargar jtidy-4aug2000r7-dev.jar.
....................
.
Intentando descargar commons-jelly-tags-xml-20030211.142705.jar.
....
.
build:start:

plugin:download-artifact:
    [mkdir] Created dir: C:\.maven\repository\xdoclet\plugins
    [echo] repo is 'http://www.ibiblio.org/maven'
    [echo] trying to download http://www.ibibl....ins/maven-xdoclet-plugin-1.2.jar
.....

plugin:download:
    [delete] Deleting 1 files from D:\java\apache\maven\plugins
    [delete] Deleting 9 files from C:\.maven\plugins
    [delete] Deleted 2 directories from C:\.maven\plugins
    [copy] Copying 1 file to D:\java\apache\maven\plugins
BUILD SUCCESSFUL
Total time: 1 minutes 43 seconds
$

Ya podemos generar nuestra aplicación de ejemplo. Nos situamos en un directorio cualquiera y hacemos esto:

$ maven genapp
 __  __
|  \/  |__ _Apache__ ___
| |\/| / _` \ V / -_) ' \  ~ intelligent projects ~
|_|  |_\__,_|\_/\___|_||_|  v. 1.0-rc2

Intentando descargar commons-jelly-tags-interaction-20030211.143817.jar.
..
.
Enter a project template to use: [default]
web-jstl
Please specify an id for your application:  [app]

Please specify a name for your application:  [Example Application]

Please specify the package for your application:  [example.web]

build:start:

genapp:
    [copy] Copying 1 file to D:\desarrollo\myApp\src\java\example\web
    [copy] Copying 1 file to D:\desarrollo\myApp\src\test\example\web
    [copy] Copying 2 files to D:\desarrollo\myApp\src\test-cactus\example\web
    [copy] Copying 2 files to D:\desarrollo\myApp
    [copy] Copying 5 files to D:\desarrollo\myApp
BUILD SUCCESSFUL
Total time: 25 seconds
Finished at: Sun Apr 25 18:52:22 CEST 2004

El proyecto resultante incluye las dependencias para usar Cactus, HttpUnit, y JUnit (de ahí que tarde tanto en descargarse).