Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
¿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ódigoJava.
Validadores de bibliotecas de etiquetas (Tag Library Validators, TLVs).
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}
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
[http://www.jcp.org/en/home/index] (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 [http://www.jcp.org/jsr/detail/52.jsp] 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
[http://today.java.net/cs/user/print/au/8?x-t=full.view]Hunter
[http://www.javahispano.org/text.viewer.action?file=jason_hun_es], 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
[http://jakarta.apache.org/taglibs/doc/standard-1.0-doc/intro.html ] creada por
miembros del proyecto Taglibs [http://jakarta.apache.org/taglibs/doc/standard-
doc/intro.html] 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.
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 cómodo 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ñadir una página $CATALINA_HOME/webapps/miAplicacion/taglibs.jsp con
las siguientes declaraciones:
Objetivo JSTL
JSTL 1.1 es una pequeña mejora de JSTL 1.0 creada para alinear JSTL con
JSP 2.0.
o Antes había una versión de cada librería dependiendo de si
utilizabamos expresiones EL o Java, ahora es la misma librería.
o Ha cambiado el nombre de los identificadores de las librerías, se ha
añadido un elemento del path /jsp a todos ellos
Para cualquier aplicación web desde la cual quieres usar JSTL, copiar los
ficheros .tld al directorio WEB-INF de tu aplicación web.
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/fmt</taglib-uri>
<taglib-location>/WEB-INF/fmt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/sql</taglib-uri>
<taglib-location>/WEB-INF/sql.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/x</taglib-uri>
<taglib-location>/WEB-INF/x.tld</taglib-location>
</taglib>
Estas entradas permiten a una aplicación web usar las librerías de etiquetas
JSTL que usan el lenguaje de expresiones.
Las páginas JSTL son también páginas JSP. JSTL es un superconjunto de
JSP.
JSTL provee un conjunto de cinco librerías estándar:
o Core
o Internationalization/format
o XML
o SQL y
o Funciones
Una etiqueta JSTL corresponde a una acción; llamándolas acción nos indica
que añaden comportamiento dinámico a una, de otra manera, página estática.
Librería URI Prefijo
Librería
Core http://java.sun.com/jsp/jstl/core c
Functions http://java.sun.com/jsp/jstl/functions fn
<br>
Se pueden importar otros JSPs o incluso otros recursos en una URL arbitraria
usando c:import (análogo to jsp:include)
Internacionalizacion / Formateo
Acciones de formateo:
o Inspiradas en el funcionamiento de las clases DateFormat y
NumberFormat
o Para formatear un número usamos formatNumber con los atributos
number para el número y pattern para el patrón de formateo a aplicar.
<fmt:formatNumber value="1000.001" pattern="#,#00.0#"/>
Si queremos parsear un número a partir de un string usamos parseNumber:
<fmt:parseNumber value="${currencyInput}" type="currency"
var="parsedNumber"/>
Para formatear una fecha usamos formatDate y para parsear un string
parseDate:
<jsp:useBean id="now" class="java.util.Date" />
<fmt:formatDate value="${now}" timeStyle="long" dateStyle="long"/>
<fmt:parseDate value="${dateInput}" pattern="MM dd, YYYY" />
Acciones de internacionalización:
o Una pieza importante de la localización en Java es la clase
ResourceBundle. Las acciones JSTL que permiten trabajar con esta
clase son:
o fmt:bundle para obtener un ResourceBundle correspondiente al Locale
actual y
fmt:message para hacer lookups en el ResourceBundle
Ejemplo:
<fmt:bundle basename="myBundle">
<%-- Use values in myBundle --%>
<fmt:message key="Introduction">
<fmt:param value="${loginName}"/>
<fmt:param value="${loginCount}"/>
</fmt:message>
<fmt:formatDate value="${now}" var="parsedDate"/>
</fmt:bundle>
SQL/DB
<sql:setDataSource
driver="com.cheapDrivers.jdbcDriver"
url="jdbc:cheapDrivers:."
user="guest"
password="password"
var="dataSource" />
<sql:transaction dataSource="${dataSource}">
<sql:update>
UPDATE account
SET account_balance =account_balance -?
WHERE accountNo = ?
<sql:param value="${transferAmount}"/>
<sql:param value="${sourceAccount}"/>
</sql:update>
<sql:update>
UPDATE account
SET account_balance =account_balance +?
WHERE accountNo = ?
<sql:param value="${transferAmount}"/>
<sql:param value="${destAccount}"/>
</sql:update>
</sql:transaction>
<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>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
Procesamiento XML