jsp standard tag library (jstl)

39
1 JSP Standard JSP Standard Tag Library Tag Library (JSTL) (JSTL)

Upload: inge

Post on 13-Feb-2016

79 views

Category:

Documents


0 download

DESCRIPTION

JSP Standard Tag Library (JSTL). JSTL. Objetivo: Simplificar y agilizar el desarrollo de aplicaciones web 3ra iteración después de servlets y JSPs Sirven para la generación dinámica de páginas web. Instalar JSTL. Asumimos que ya has instalado Tomcat 5 en tu máquina, si no consíguelo de: - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: JSP Standard Tag Library (JSTL)

1

JSP Standard JSP Standard Tag Library Tag Library

(JSTL)(JSTL)

Page 2: JSP Standard Tag Library (JSTL)

2

JSTLJSTL

Objetivo:Objetivo: Simplificar y agilizar el desarrollo de Simplificar y agilizar el desarrollo de

aplicaciones webaplicaciones web 3ra iteración después de servlets y 3ra iteración después de servlets y

JSPsJSPs Sirven para la generación dinámica Sirven para la generación dinámica

de páginas webde páginas web

Page 3: JSP Standard Tag Library (JSTL)

3

Instalar JSTLInstalar JSTL Asumimos que ya has instalado Tomcat 5 Asumimos que ya has instalado Tomcat 5

en tu máquina, si no consíguelo de:en tu máquina, si no consíguelo de: http://apache.rediris.es/jakarta/tomcat-5/v5.5.http://apache.rediris.es/jakarta/tomcat-5/v5.5.

7/bin/jakarta-tomcat-5.5.7.zip7/bin/jakarta-tomcat-5.5.7.zip Bajar JSTL 1.1 de:Bajar JSTL 1.1 de:

http://cvs.apache.org/builds/jakarta-taglibs/nighttp://cvs.apache.org/builds/jakarta-taglibs/nightly/jakarta-taglibs-20050216.ziphtly/jakarta-taglibs-20050216.zip

Copiar archivos Copiar archivos standard.jarstandard.jar y y jstl.jarjstl.jar a a %TOMCAT_HOME%\common\lib%TOMCAT_HOME%\common\lib

http://http://jakarta.apache.org/taglibsjakarta.apache.org/taglibs//

Page 4: JSP Standard Tag Library (JSTL)

4

JSTL 1.0 vs JSTL 1.1JSTL 1.0 vs JSTL 1.1 JSTL 1.1 es una pequeña mejora de JSTL JSTL 1.1 es una pequeña mejora de JSTL

1.0 creada para alinear JSTL con JSP 2.0.1.0 creada para alinear JSTL con JSP 2.0. Antes había una versión de cada librería Antes había una versión de cada librería

dependiendo de si utilizabamos dependiendo de si utilizabamos expresiones EL o Java, ahora es la misma expresiones EL o Java, ahora es la misma librería.librería. Ha cambiado el nombre de los identificadores Ha cambiado el nombre de los identificadores

de las librerías, se ha añadido un elemento del de las librerías, se ha añadido un elemento del path path /jsp/jsp a todos ellos a todos ellos

Page 5: JSP Standard Tag Library (JSTL)

5

Usar JSTL en una Usar JSTL en una aplicación Webaplicación Web

Para cualquier aplicación web desde la cual quieres usar JSTL, copiar los Para cualquier aplicación web desde la cual quieres usar JSTL, copiar los ficheros ficheros .tld.tld al directorio al directorio WEB-INFWEB-INF de tu aplicación web. de tu aplicación web.

Edita el Edita el web.xmlweb.xml de tu aplicación web añadiendo las siguientes entradas de tu aplicación web añadiendo las siguientes entradas <taglib><taglib>    <taglib-uri>http://java.sun.com/jsp/jstl/fmt</taglib-uri>    <taglib-uri>http://java.sun.com/jsp/jstl/fmt</taglib-uri>    <taglib-location>/WEB-INF/fmt.tld</taglib-location>    <taglib-location>/WEB-INF/fmt.tld</taglib-location>  </taglib>  </taglib>

  <taglib>  <taglib>    <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>    <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>    <taglib-location>/WEB-INF/c.tld</taglib-location>    <taglib-location>/WEB-INF/c.tld</taglib-location>  </taglib>  </taglib>

  <taglib>  <taglib>    <taglib-uri>http://java.sun.com/jsp/jstl/sql</taglib-uri>    <taglib-uri>http://java.sun.com/jsp/jstl/sql</taglib-uri>    <taglib-location>/WEB-INF/sql.tld</taglib-location>    <taglib-location>/WEB-INF/sql.tld</taglib-location>  </taglib>  </taglib>

  <taglib>  <taglib>    <taglib-uri>http://java.sun.com/jsp/jstl/x</taglib-uri>    <taglib-uri>http://java.sun.com/jsp/jstl/x</taglib-uri>    <taglib-location>/WEB-INF/x.tld</taglib-location>    <taglib-location>/WEB-INF/x.tld</taglib-location>  </taglib>  </taglib>

Estas entradas permiten a tu aplicación web usar las librerías de etiquetas JSTL Estas entradas permiten a tu aplicación web usar las librerías de etiquetas JSTL que usan el lenguaje de expresiones. La posición de estas entradas tiene que usan el lenguaje de expresiones. La posición de estas entradas tiene importancia.importancia.

Page 6: JSP Standard Tag Library (JSTL)

6

CaracterísticasCaracterísticas Las páginas JSTL son también páginas JSP. JSTL es un Las páginas JSTL son también páginas JSP. JSTL es un

superconjunto de JSP. superconjunto de JSP. JSTL provee un conjunto de cinco librerías estándar:JSTL provee un conjunto de cinco librerías estándar:

CoreCore Internationalization/formatInternationalization/format XML XML SQL ySQL y FuncionesFunciones

Además JSTL define un nuevo lenguaje de expresiones Además JSTL define un nuevo lenguaje de expresiones llamado EL, que ha sido luego adoptado por JSP 2.0llamado EL, que ha sido luego adoptado por JSP 2.0

Una etiqueta JSTL corresponde a una acción; llamándolas Una etiqueta JSTL corresponde a una acción; llamándolas acción nos indica que añaden comportamiento dinámico a acción nos indica que añaden comportamiento dinámico a una, de otra manera, página estática. una, de otra manera, página estática.

Page 7: JSP Standard Tag Library (JSTL)

7

Soporte para EL ISoporte para EL I El lenguaje de expresiones EL El lenguaje de expresiones EL

simplemente define un poderoso simplemente define un poderoso mecanismo para expresar expresiones mecanismo para expresar expresiones simples en una sintáxis muy sencilla. simples en una sintáxis muy sencilla. Es algo entre JavaScript y Perl. Es algo entre JavaScript y Perl. Su combinación con las etiquetas de las 4 Su combinación con las etiquetas de las 4

librerías antes mencionadas proveen mucha librerías antes mencionadas proveen mucha flexibilidad y poder para el desarrollo de flexibilidad y poder para el desarrollo de páginas dinámicas.páginas dinámicas.

En EL las expresiones están delimitadas En EL las expresiones están delimitadas por ${ }. por ${ }.

Page 8: JSP Standard Tag Library (JSTL)

8

Soporte para EL IISoporte para EL II

Algunos ejemplos del uso de EL son:Algunos ejemplos del uso de EL son: ${anExpression}${anExpression} ${aList[4]} ${aList[4]} ${aList[someVariable]} ${aList[someVariable]} acceso a un elemento de una colección acceso a un elemento de una colección ${anObject.aProperty} ${anObject.aProperty} acceso a la propiedad de un objeto acceso a la propiedad de un objeto ${anObject["aPropertyName"]} ${anObject["aPropertyName"]} entrada en un mapa con entrada en un mapa con

propiedad aPropertyNamepropiedad aPropertyName ${anObject[aVariableContainingPropertyName]}${anObject[aVariableContainingPropertyName]}

Existen una serie de variables implícitas definidas en EL:Existen una serie de variables implícitas definidas en EL: pageContextpageContext: el contexto del JSP actual: el contexto del JSP actual pageScopepageScope, , requestScoperequestScope, , sessionScopesessionScope, and , and applicationScopeapplicationScope: :

colecciones de mapas que mapean nombres de variables en esos colecciones de mapas que mapean nombres de variables en esos contextos a valorescontextos a valores

paramparam and and paramValuesparamValues: parámetros pasados con la petición de la : parámetros pasados con la petición de la página, lo mismo que en JSPpágina, lo mismo que en JSP

headerheader and and headerValuesheaderValues: cabeceras pasadas en la petición de la : cabeceras pasadas en la petición de la páginapágina

cookiecookie: mapa que mapea nombres de cookies a los valores de las : mapa que mapea nombres de cookies a los valores de las mismasmismas

Page 9: JSP Standard Tag Library (JSTL)

9

JSTL Tag LibrariesJSTL Tag Libraries

LibreríaLibrería URIURI Prefijo Prefijo LibreríaLibrería

CoreCore http://java.sun.com/jsp/jstl/core http://java.sun.com/jsp/jstl/core ccInternationalizatInternationalization I18N ion I18N formateoformateo

http://java.sun.com/jsp/jstl/fmt http://java.sun.com/jsp/jstl/fmt fmtfmt

SQL/DB supportSQL/DB support http://java.sun.com/jsp/jstl/sql http://java.sun.com/jsp/jstl/sql sqlsqlProcesamiento Procesamiento XMLXML

http://java.sun.com/jsp/jstl/xml http://java.sun.com/jsp/jstl/xml xx

FunctionsFunctions http://java.sun.com/jsp/jstl/functions http://java.sun.com/jsp/jstl/functions fnfn

Page 10: JSP Standard Tag Library (JSTL)

10

Uso de las librerías JSTL en Uso de las librerías JSTL en un JSPun JSP

La siguiente directiva ha de incluirse al La siguiente directiva ha de incluirse al comienzo de la página:comienzo de la página:

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

Para utilizar una etiqueta de una librería Para utilizar una etiqueta de una librería simplemente se ha de preceder con el simplemente se ha de preceder con el prefijo de la librería utilizada:prefijo de la librería utilizada:

<c:out value="${anExpression}"/><c:out value="${anExpression}"/>

Page 11: JSP Standard Tag Library (JSTL)

11

La librería de etiquetas La librería de etiquetas CoreCore

Permiten llevar a cabo las siguientes Permiten llevar a cabo las siguientes acciones:acciones: Visualizar/asignar valores y manejar Visualizar/asignar valores y manejar

excepcionesexcepciones Control de flujoControl de flujo Otras acciones de utilidadOtras acciones de utilidad

Page 12: JSP Standard Tag Library (JSTL)

12

Visualizar/asignar valores y Visualizar/asignar valores y manejar excepciones con manejar excepciones con Core ICore I

Para visualizar valores utilizamos:Para visualizar valores utilizamos:<c:out:<c:out:value="${applicationScope.product.inventoryCount}" value="${applicationScope.product.inventoryCount}"

escapeXml="true" default="0"  /> of those items in escapeXml="true" default="0"  /> of those items in stock. stock.

escapeXmlescapeXml indica si hay que aplicar códigos de escape a los indica si hay que aplicar códigos de escape a los caracteres <, >, & y .caracteres <, >, & y .

Asignar una variable en una página:Asignar una variable en una página:<c:set var="customerID" value="$param.customerNumber" <c:set var="customerID" value="$param.customerNumber"

scope="session" /> scope="session" /> scopescope indica el contexto en el que se define la variable indica el contexto en el que se define la variable También podemos asignar el contenido de una etiqueta a una También podemos asignar el contenido de una etiqueta a una

variable:variable: <c:set var="cellContents"><c:set var="cellContents"> <td><td> <c:out value="${myCell}"/><c:out value="${myCell}"/> </td></td> </c:set></c:set>

Page 13: JSP Standard Tag Library (JSTL)

13

Visualizar/asignar valores y Visualizar/asignar valores y manejar excepciones con manejar excepciones con Core IICore II

Normalmente en un JSP o incluimos un Normalmente en un JSP o incluimos un bloque bloque try/catchtry/catch o usamos la directiva o usamos la directiva errorPageerrorPage::<c:catch><c:catch>     <!--. . . some set of nested      <!--. . . some set of nested JSTL tags below which would be JSTL tags below which would be hit on an exception-->hit on an exception--></c:catch></c:catch>

Para borrar una variable se puede Para borrar una variable se puede utilizar utilizar <c:remove><c:remove>

Page 14: JSP Standard Tag Library (JSTL)

14

Control de flujo con JSTL Control de flujo con JSTL Core ICore I

Para llevar a cabo simples condiciones (Para llevar a cabo simples condiciones (c:ifc:if):):<c:if test="${status.totalVisits == 1000000}" var="visits"><c:if test="${status.totalVisits == 1000000}" var="visits">   You are the millionth visitor to our    You are the millionth visitor to our site!  Congratulations!site!  Congratulations!</c:if></c:if>

El switch de un lenguaje de programación se puede emular con El switch de un lenguaje de programación se puede emular con c:choosec:choose::<c:choose><c:choose><c:when test="${item.type == 'book'}"><c:when test="${item.type == 'book'}">......</c:when></c:when><c:when test="${item.type == 'electronics'}"><c:when test="${item.type == 'electronics'}">......</c:when></c:when><c:when test="${item.type == 'toy'}"><c:when test="${item.type == 'toy'}">......</c:when></c:when><c:otherwise><c:otherwise>......</c:otherwise></c:otherwise></c:choose></c:choose>

Page 15: JSP Standard Tag Library (JSTL)

15

Control de flujo con JSTL Control de flujo con JSTL Core IICore II Para iterar sobre una colección se define Para iterar sobre una colección se define c:foreachc:foreach. Se pueden especificar índice . Se pueden especificar índice de comienzo, final e incremento con los de comienzo, final e incremento con los atributos atributos beginbegin, , endend y y stepstep..

<table><table><c:forEach var="name" items="${customerNames}"><c:forEach var="name" items="${customerNames}"><tr><td><c:out value="${name}"/></td></tr><tr><td><c:out value="${name}"/></td></tr></c:forEach></c:forEach>

</table></table>

Page 16: JSP Standard Tag Library (JSTL)

16

Control de flujo con JSTL Control de flujo con JSTL Core IIICore III Funcionalidad similar a Funcionalidad similar a StringTokenizerStringTokenizer puede puede

ser obtenida en JSTL con ser obtenida en JSTL con c:forTokensc:forTokens::

<table><table><c:forTokens <c:forTokens items="47,52,53,55,46,22,16,2" delims="," items="47,52,53,55,46,22,16,2" delims="," var="dailyPrice">var="dailyPrice"><tr><td><c:out <tr><td><c:out value="${dailyPrice}"/></td></tr>value="${dailyPrice}"/></td></tr></c:forTokens></c:forTokens>

</table></table>

Page 17: JSP Standard Tag Library (JSTL)

17

Listar todos los Listar todos los parámetros pasados a parámetros pasados a una peticiónuna petición

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html><html><body><body><head><head><title>Parameter Listing Example</title><title>Parameter Listing Example</title></head></head>

<br><br>

<b>Parameter values passed to this page for each parameter: </b><b>Parameter values passed to this page for each parameter: </b><table border="2"><table border="2"><c:forEach var="current" items="${param}"><c:forEach var="current" items="${param}">    <tr>    <tr>    <td>    <td>    <b><c:out value="${current.key}" /></b>    <b><c:out value="${current.key}" /></b>    </td>    </td>        <c:forEach var="aVal" items="${paramValues[current.key]}">        <c:forEach var="aVal" items="${paramValues[current.key]}">            <td>            <td>            <c:out value="${aVal}" />            <c:out value="${aVal}" />            </td>            </td>        </c:forEach>        </c:forEach>    </tr>    </tr></c:forEach></c:forEach></table></table></body></body></html></html>

Page 18: JSP Standard Tag Library (JSTL)

18

Otras accionesOtras acciones

Para codificar URLs se puede utilizar Para codificar URLs se puede utilizar c:urlc:url::<c:url <c:url value="http://acme.com/exec/register" value="http://acme.com/exec/register" var="myUrl">var="myUrl"><c:param name="name" value="$<c:param name="name" value="${param.name}"/>{param.name}"/><c:param name="country" value="$<c:param name="country" value="${param.country}"/>{param.country}"/></c:url></c:url><a href='<c:out <a href='<c:out value="${myUrl}"/>'>Register</a>value="${myUrl}"/>'>Register</a>

Se pueden importar otros JSPs o incluso otros Se pueden importar otros JSPs o incluso otros recursos en una URL arbitraria usando recursos en una URL arbitraria usando c:importc:import (análogo to (análogo to jsp:includejsp:include))

Para manejar redireccionamiento se puede Para manejar redireccionamiento se puede utilizar la etiqueta utilizar la etiqueta c:redirectc:redirect

Page 19: JSP Standard Tag Library (JSTL)

19

La Nueva Librería de La Nueva Librería de Funciones de ELFunciones de EL Cuando EL se migró de la especificación Cuando EL se migró de la especificación

JSTL a JSP, se le añadío una nueva JSTL a JSP, se le añadío una nueva funcionalidad: la invocación a funciones. funcionalidad: la invocación a funciones.

Su uso es trivial: Su uso es trivial: nombre-func(lista-nombre-func(lista-params)params)<%@ taglib prefix="fn" <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functuri="http://java.sun.com/jsp/jstl/functions" %> ions" %>

${fn:length(myCollection)}${fn:length(myCollection)} Contiene un grupo de funciones utilizadas Contiene un grupo de funciones utilizadas

comúnmente comúnmente

Page 20: JSP Standard Tag Library (JSTL)

20

Funciones en ELFunciones en EL

FunciónFunción DescripciónDescripciónfn:contains(string, fn:contains(string, substring)substring) Devuelve Devuelve truetrue si el si el stringstring contiene contiene substringsubstring..

fn:containsIgnoreCasefn:containsIgnoreCase(string, substring)(string, substring) Devuelve Devuelve truetrue si el si el stringstring contiene a contiene a substringsubstring, ignorando capitalización., ignorando capitalización.

fn:endsWith(string, fn:endsWith(string, suffix)suffix) Devuelve Devuelve truetrue si el string termina con si el string termina con suffixsuffix..

fn:escapeXml(string)fn:escapeXml(string) Devuelve el string con todos aquellos caracteres con especial significado en Devuelve el string con todos aquellos caracteres con especial significado en XML y HTML convertidos a sus códigos de escape pertinentes.XML y HTML convertidos a sus códigos de escape pertinentes.

fn:indexOf(string, fn:indexOf(string, substring)substring) Devuelve la primera ocurrencia de Devuelve la primera ocurrencia de substringsubstring en el en el stringstring..

fn:join(array, fn:join(array, separator)separator)

Devuelve un string compuesto por los elementos del array, separados por Devuelve un string compuesto por los elementos del array, separados por separatorseparator..

fn:length(item)fn:length(item) Devuelve el número de elementos en Devuelve el número de elementos en itemitem (si un array o colección), o el número (si un array o colección), o el número de caracteres (es un string).de caracteres (es un string).

Page 21: JSP Standard Tag Library (JSTL)

21

Funciones en ELFunciones en EL

FunciónFunción DescripciónDescripciónfn:replace(string, before, fn:replace(string, before, after)after)

Devuelve un string donde todas las ocurrencias del string Devuelve un string donde todas las ocurrencias del string beforebefore han han sido reemplazadas por el string sido reemplazadas por el string afterafter..

fn:split(string, fn:split(string, separator)separator)

Devuelve un array donde los elementos son las partes del Devuelve un array donde los elementos son las partes del stringstring separadas por separadas por separatorseparator..

fn:startsWith(string, fn:startsWith(string, prefix)prefix) Devuelve true si el string comienza por prefix.Devuelve true si el string comienza por prefix.

fn:substring(string, fn:substring(string, begin, end)begin, end)

Devuelve la parte del string que comienza por el índice Devuelve la parte del string que comienza por el índice beginbegin y que y que acaba en el índice acaba en el índice endend..

fn:substringAfter(string, fn:substringAfter(string, substring)substring) Devuelve la parte del Devuelve la parte del stringstring que sigue a que sigue a substringsubstring..

fn:substringBefore(string, fn:substringBefore(string, substring)substring) Devuelve la parte de Devuelve la parte de stringstring que precede a que precede a substringsubstring..

fn:toLowerCase(string)fn:toLowerCase(string) Devuelve un Devuelve un stringstring con todos los caracteres de la entrada convertidos a con todos los caracteres de la entrada convertidos a minúsculas.minúsculas.

fn:toUpperCase(string)fn:toUpperCase(string) Devuelve un string con todos los caracteres de la entrada convertidos a Devuelve un string con todos los caracteres de la entrada convertidos a mayúsculas.mayúsculas.

fn:trim(string)fn:trim(string) Devuelve un string sin espacios en sus laterales.Devuelve un string sin espacios en sus laterales.

Page 22: JSP Standard Tag Library (JSTL)

22

La librería de etiquetas La librería de etiquetas de internacionalización Ide internacionalización I

Cubre dos áreas:Cubre dos áreas: Etiquetas (acciones) de formateoEtiquetas (acciones) de formateo Acciones de internacionalizaciónAcciones de internacionalización

Acciones de formateo:Acciones de formateo: Inspiradas en el funcionamiento de las clases Inspiradas en el funcionamiento de las clases DateFormatDateFormat y y

NumberFormatNumberFormat Para formatear un número usamos Para formatear un número usamos formatNumberformatNumber con los atributos con los atributos

numbernumber para el número y para el número y patternpattern para el patrón de formateo a aplicar. para el patrón de formateo a aplicar. <fmt:formatNumber value="1000.001" pattern="#,#00.0#"/> <fmt:formatNumber value="1000.001" pattern="#,#00.0#"/> Si queremos parsear un número a partir de un string usamos Si queremos parsear un número a partir de un string usamos

parseNumberparseNumber::<fmt:parseNumber value="${currencyInput}" type="currency" <fmt:parseNumber value="${currencyInput}" type="currency"

var="parsedNumber"/>var="parsedNumber"/> Para formatear una fecha usamos Para formatear una fecha usamos formatDateformatDate y para parsear un string y para parsear un string

parseDateparseDate::<jsp:useBean id="now" class="java.util.Date" /><jsp:useBean id="now" class="java.util.Date" /><fmt:formatDate value="${now}" timeStyle="long"<fmt:formatDate value="${now}" timeStyle="long"

dateStyle="long"/>dateStyle="long"/> <fmt:parseDate value="${dateInput}" pattern="MM dd, YYYY" /><fmt:parseDate value="${dateInput}" pattern="MM dd, YYYY" />

Page 23: JSP Standard Tag Library (JSTL)

23

La librería de etiquetas La librería de etiquetas de internacionalización de internacionalización IIII

Acciones de internacionalización:Acciones de internacionalización: Una pieza importante de la localización en Java es la clase Una pieza importante de la localización en Java es la clase

ResourceBundleResourceBundle. Las acciones JSTL que permiten trabajar . Las acciones JSTL que permiten trabajar con esta clase son:con esta clase son:

fmt:bundlefmt:bundle para obtener un para obtener un ResourceBundleResourceBundle correspondiente al Locale actual ycorrespondiente al Locale actual y

fmt:messagefmt:message para hacer lookups en el para hacer lookups en el ResourceBundleResourceBundle Ejemplo:Ejemplo:<fmt:bundle basename="myBundle"><fmt:bundle basename="myBundle"><%-- Use values in myBundle --%><%-- Use values in myBundle --%><fmt:message key="Introduction"><fmt:message key="Introduction">   <fmt:param value="${loginName}"/>   <fmt:param value="${loginName}"/>   <fmt:param value="${loginCount}"/>   <fmt:param value="${loginCount}"/></fmt:message></fmt:message><fmt:formatDate value="${now}" <fmt:formatDate value="${now}" var="parsedDate"/>var="parsedDate"/></fmt:bundle></fmt:bundle>

Page 24: JSP Standard Tag Library (JSTL)

24

La librería de etiquetas La librería de etiquetas SQL ISQL I

JSTL permite una fácil integración con bases de datosJSTL permite una fácil integración con bases de datos No gestiona bien connection pooling, por tanto son solamente adecuadas para No gestiona bien connection pooling, por tanto son solamente adecuadas para

llevar a cabo prototipos o aplicaciones de bajo volumen.llevar a cabo prototipos o aplicaciones de bajo volumen. Ejemplo: seleccionar y visualizar un conjunto de elementosEjemplo: seleccionar y visualizar un conjunto de elementos

<sql:setDataSource<sql:setDataSource      driver="com.cheapDrivers.jdbcDriver"      driver="com.cheapDrivers.jdbcDriver"      url="jdbc:cheapDrivers:."      url="jdbc:cheapDrivers:."      user="guest"      user="guest"      password="password"      password="password"      var="dataSource" />      var="dataSource" />

<sql:query var="orderItems" dataSource="${dataSource}"><sql:query var="orderItems" dataSource="${dataSource}"> SELECT * FROM items SELECT * FROM items WHERE order_id = <cout value="${orderID}"/> WHERE order_id = <cout value="${orderID}"/> ORDER BY price ORDER BY price</sql:query></sql:query><table><table> <c:forEach var="row" items="${orderItems.rows}"> <c:forEach var="row" items="${orderItems.rows}"> <tr> <tr> <td><c:out value="${row.itemName}"/></td> <td><c:out value="${row.itemName}"/></td> <td><c:out value="${row.price}"/></td> <td><c:out value="${row.price}"/></td> <td><c:out value="${row.weight}"/></td> <td><c:out value="${row.weight}"/></td> </tr> </tr> </c:forEach> </c:forEach></table></table>

Page 25: JSP Standard Tag Library (JSTL)

25

Creando la BBDD DeustoCreando la BBDD Deusto

CREATE DATABASE deusto;CREATE DATABASE deusto;

GRANT ALTER, SELECT,INSERT,UPDATE,DELETE,CREATE,DROPGRANT ALTER, SELECT,INSERT,UPDATE,DELETE,CREATE,DROPON deusto.*ON deusto.*TO deusto@'%'TO deusto@'%'IDENTIFIED BY 'deusto';IDENTIFIED BY 'deusto';

GRANT ALTER, SELECT,INSERT,UPDATE,DELETE,CREATE,DROPGRANT ALTER, SELECT,INSERT,UPDATE,DELETE,CREATE,DROPON deusto.*ON deusto.*TO deusto@localhostTO deusto@localhostIDENTIFIED BY 'deusto';IDENTIFIED BY 'deusto';

use deusto;use deusto;

CREATE TABLE EVENTOS(ID int(11) NOT NULL PRIMARY KEY, CREATE TABLE EVENTOS(ID int(11) NOT NULL PRIMARY KEY, NOMBRE VARCHAR(250), LOCALIZACION VARCHAR(250), FECHA bigint(20), DESCRIPCION NOMBRE VARCHAR(250), LOCALIZACION VARCHAR(250), FECHA bigint(20), DESCRIPCION

VARCHAR(250));VARCHAR(250));

INSERT INTO EVENTOS VALUES (0, 'SEMANA ESIDE', 'ESIDE-DEUSTO', 0, 'Charla sobre INSERT INTO EVENTOS VALUES (0, 'SEMANA ESIDE', 'ESIDE-DEUSTO', 0, 'Charla sobre Python');Python');

INSERT INTO EVENTOS VALUES (1, ‘CURSO J2EE', ‘CESINE', 0, ‘Curso sobre tecnologías INSERT INTO EVENTOS VALUES (1, ‘CURSO J2EE', ‘CESINE', 0, ‘Curso sobre tecnologías Java 2 Enterprise Edition');Java 2 Enterprise Edition');

Page 26: JSP Standard Tag Library (JSTL)

26

Recuperando Datos de Recuperando Datos de Tabla EventosTabla Eventos

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

driver="com.mysql.jdbc.Driver"driver="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3306/deusto"url="jdbc:mysql://localhost:3306/deusto"user="deusto"user="deusto"password="deusto"password="deusto"var="dataSource"/>var="dataSource"/>

<sql:query var="eventItems" dataSource="${dataSource}"><sql:query var="eventItems" dataSource="${dataSource}"> select * from eventos select * from eventos </sql:query></sql:query><table><table> <c:forEach var="row" items="${eventItems.rows}"><c:forEach var="row" items="${eventItems.rows}"> <tr><tr> <td><c:out value="${row.ID}"/></td><td><c:out value="${row.ID}"/></td> <td><c:out value="${row.NOMBRE}"/></td><td><c:out value="${row.NOMBRE}"/></td> <td><c:out value="${row.LOCALIZACION}"/></td><td><c:out value="${row.LOCALIZACION}"/></td> <td><c:out value="${row.FECHA}"/></td><td><c:out value="${row.FECHA}"/></td> <td><c:out value="${row.DESCRIPCION}"/></td><td><c:out value="${row.DESCRIPCION}"/></td> </tr></tr> </c:forEach></c:forEach></table></table>

Page 27: JSP Standard Tag Library (JSTL)

27

La librería de etiquetas La librería de etiquetas SQL IISQL II

También se soportan acciones para manejar transacciones También se soportan acciones para manejar transacciones ((sql:transactionsql:transaction), ), sql:updatesql:update soporta no sólo updates sino que soporta no sólo updates sino que también también insertinsert y y deletedelete e incluso e incluso createcreate, es decir todas las , es decir todas las acciones SQL que no devuelven un resultado:acciones SQL que no devuelven un resultado:

<sql:transaction dataSource="${dataSource}"><sql:transaction dataSource="${dataSource}"><sql:update><sql:update>UPDATE accountUPDATE accountSET account_balance =account_balance -?SET account_balance =account_balance -?WHERE accountNo = ?WHERE accountNo = ?<sql:param value="${transferAmount}"/><sql:param value="${transferAmount}"/><sql:param value="${sourceAccount}"/><sql:param value="${sourceAccount}"/></sql:update></sql:update><sql:update><sql:update>UPDATE accountUPDATE accountSET account_balance =account_balance +?SET account_balance =account_balance +?WHERE accountNo = ?WHERE accountNo = ?<sql:param value="${transferAmount}"/><sql:param value="${transferAmount}"/><sql:param value="${destAccount}"/><sql:param value="${destAccount}"/></sql:update></sql:update>

</sql:transaction></sql:transaction>

Page 28: JSP Standard Tag Library (JSTL)

28

Recuperando Datos con Recuperando Datos con JSTL de MySQLJSTL de MySQL1.1. Instalar MySQL (http://www.mysql.com)Instalar MySQL (http://www.mysql.com)2.2. Instalar Connector/J, driver JDBC para MySQL Instalar Connector/J, driver JDBC para MySQL

(http://www.mysql.com/products/connector/j/)(http://www.mysql.com/products/connector/j/)3.3. Mover el driver MySQL a Mover el driver MySQL a

$CATALINA_HOME/common/lib. $CATALINA_HOME/common/lib. 4.4. Asegurarse que en Asegurarse que en

$CATALINA_HOME/common/lib están las $CATALINA_HOME/common/lib están las librerías de JSTL standard.jar y jstl.jar, si no librerías de JSTL standard.jar y jstl.jar, si no bajarlas de: bajarlas de: http://apache.rediris.es/jakarta/taglibs/standardhttp://apache.rediris.es/jakarta/taglibs/standard/binaries//binaries/

5.5. Crear una tabla de prueba con el siguiente Crear una tabla de prueba con el siguiente comando: mysql –uroot < comando: mysql –uroot < createmysqldbtest.sqlcreatemysqldbtest.sql

Page 29: JSP Standard Tag Library (JSTL)

29

Recuperando Datos con Recuperando Datos con JSTL de MySQLJSTL de MySQL Contenido de Contenido de createmysqldbtest.sqlcreatemysqldbtest.sql::

GRANT ALL PRIVILEGES ON *.* TO javauser@localhost GRANT ALL PRIVILEGES ON *.* TO javauser@localhost IDENTIFIED BY 'javadude' WITH GRANT OPTION;IDENTIFIED BY 'javadude' WITH GRANT OPTION;

create database javatest;create database javatest;

use javatest;use javatest;

create table testdata (create table testdata (id int not null auto_increment primary key,id int not null auto_increment primary key,foo varchar(25),foo varchar(25),bar intbar int

););

insert into testdata values(null, 'hello', 12345);insert into testdata values(null, 'hello', 12345);

Page 30: JSP Standard Tag Library (JSTL)

30

Recuperando Datos con Recuperando Datos con JSTL de MySQLJSTL de MySQL5.5. Añadir el siguiente párrafo a Añadir el siguiente párrafo a

$CATALINA_HOME/conf/server.xml:$CATALINA_HOME/conf/server.xml:<Context path="/DBTest" docBase="DBTest"<Context path="/DBTest" docBase="DBTest" debug="5" reloadable="true" crossContext="true">debug="5" reloadable="true" crossContext="true"> <Resource name="jdbc/TestDB" auth="Container" <Resource name="jdbc/TestDB" auth="Container"

type="javax.sql.DataSource"type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxActive="100" maxIdle="30"

maxWait="10000"maxWait="10000" username="javauser" password="javadude" username="javauser" password="javadude"

driverClassName="com.mysql.jdbc.Driver"driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/javatest?url="jdbc:mysql://localhost:3306/javatest?

autoReconnect=true"/>autoReconnect=true"/></Context></Context>

Page 31: JSP Standard Tag Library (JSTL)

31

Recuperando Datos con Recuperando Datos con JSTL de MySQLJSTL de MySQL6.6. Crear un fichero de configuración para esta aplicaciónCrear un fichero de configuración para esta aplicación

WEB-INF/web.xmlWEB-INF/web.xml::<web-app xmlns="http://java.sun.com/xml/ns/j2ee"<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2eexsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">version="2.4"> <description>MySQL Test App</description><description>MySQL Test App</description> <resource-ref><resource-ref> <description>DB Connection</description><description>DB Connection</description> <res-ref-name>jdbc/TestDB</res-ref-name><res-ref-name>jdbc/TestDB</res-ref-name> <res-type>javax.sql.DataSource</res-type><res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth><res-auth>Container</res-auth> </resource-ref></resource-ref></web-app></web-app>

Page 32: JSP Standard Tag Library (JSTL)

32

Recuperando Datos con Recuperando Datos con JSTL de MySQLJSTL de MySQL

7.7. Crear un fichero Crear un fichero test.jsptest.jsp::<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<sql:query var="rs" dataSource="jdbc/TestDB"><sql:query var="rs" dataSource="jdbc/TestDB">select id, foo, bar from testdataselect id, foo, bar from testdata</sql:query></sql:query>

<html><html> <head><head> <title>DB Test</title><title>DB Test</title> </head></head> <body><body>

<h2>Results</h2><h2>Results</h2> <c:forEach var="row" items="${rs.rows}"><c:forEach var="row" items="${rs.rows}"> Foo ${row.foo}<br/>Foo ${row.foo}<br/> Bar ${row.bar}<br/>Bar ${row.bar}<br/></c:forEach></c:forEach>

</body></body></html></html>

Page 33: JSP Standard Tag Library (JSTL)

33

JSTL y AccessJSTL y Access

Ejecutar ejemplo contenido en standard-Ejecutar ejemplo contenido en standard-examples.war de JSTL: examples.war de JSTL: http://localhost:8080/standard-http://localhost:8080/standard-examples/sql/examples/sql/

Crear base de datos en Access vacía como la Crear base de datos en Access vacía como la contenida en: contenida en: sql/sql/jstlsql.mdbjstlsql.mdb Registrar fuente de datos ODBC: Panel de Control Registrar fuente de datos ODBC: Panel de Control

Herramientas Administrativas Herramientas Administrativas Fuentes de Datos Fuentes de Datos (ODBC) (ODBC) JSTLSQLDBJSTLSQLDB (nombre fuente de datos), (nombre fuente de datos), seleccionar el fichero arriba mencionadoseleccionar el fichero arriba mencionado

Configurar los detalles de la base de datos con Configurar los detalles de la base de datos con los siguientes parámetros:los siguientes parámetros: Driver Driver sun.jdbc.odbc.JdbcOdbcDriversun.jdbc.odbc.JdbcOdbcDriver Base de datos Base de datos jdbc:odbc:JSTLSQLDBjdbc:odbc:JSTLSQLDB

Ejecutar los .JSPs Ejecutar los .JSPs

Page 34: JSP Standard Tag Library (JSTL)

34

La librería de etiquetas La librería de etiquetas XML IXML I

El soporte de XML que lleva a cabo JSTL conforma con la especificación El soporte de XML que lleva a cabo JSTL conforma con la especificación XPath. XPath.

Xpath provee una sintáxis clara para acceder a partes jerárquicas de un Xpath provee una sintáxis clara para acceder a partes jerárquicas de un documento.documento.

Acciones Acciones c:importc:import es utilizada para importar un documento, mientras es utilizada para importar un documento, mientras x:parsex:parse para genera un árbol DOM a partir de él. para genera un árbol DOM a partir de él. x:setx:set crea una crea una variable a partir de un extracto de XMLvariable a partir de un extracto de XML

<!-- Find and parse our XML document (somewhere on the WWW) --><!-- Find and parse our XML document (somewhere on the WWW) --><c:import url="http://www.cheapstuff.com/orderStatus?id=2435" <c:import url="http://www.cheapstuff.com/orderStatus?id=2435"

var="xml"/>var="xml"/><x:parse xml="${xml}" var="doc"/><x:parse xml="${xml}" var="doc"/><!-- access XML data via XPath expressions --><!-- access XML data via XPath expressions --><x:out select="$doc/name"/><x:out select="$doc/name"/><x:out select="$doc/shippingAddress"/><x:out select="$doc/shippingAddress"/><x:out select="$doc/deliveryDate"/><x:out select="$doc/deliveryDate"/><!-- Set a scoped variable --><!-- Set a scoped variable --><x:set var="custName" scope="request" select="$doc/name"/><x:set var="custName" scope="request" select="$doc/name"/>

Page 35: JSP Standard Tag Library (JSTL)

35

La librería de etiquetas La librería de etiquetas XML IIXML II

JSTL se integra fenomenálmente con XSTLJSTL se integra fenomenálmente con XSTL

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

<c:set var="xsltSource"> <c:set var="xsltSource"> <?xml version="1.0"?><?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">version="1.0"><xsl:template match="/"><xsl:template match="/">      <xsl:apply-templates/>      <xsl:apply-templates/></xsl:template></xsl:template>

<xsl:template match="music"><xsl:template match="music">

<html><html><head></head><head></head><body marginheight="0" marginwidth="0" topmargin="0" leftmargin="0"><body marginheight="0" marginwidth="0" topmargin="0" leftmargin="0"><table cellpadding="0" cellspacing="0" border="1" bgcolor="#ffffff"><table cellpadding="0" cellspacing="0" border="1" bgcolor="#ffffff">      <tr>      <tr>            <td><STRONG>Artist</STRONG></td>            <td><STRONG>Artist</STRONG></td>            <td><STRONG>Album</STRONG></td>            <td><STRONG>Album</STRONG></td>            <td><STRONG>Year</STRONG></td>            <td><STRONG>Year</STRONG></td>            <td><STRONG>Genre</STRONG></td>            <td><STRONG>Genre</STRONG></td>      </tr>      </tr>            

Page 36: JSP Standard Tag Library (JSTL)

36

La librería de etiquetas La librería de etiquetas XML IIIXML III

<!---Set up for loop to collect all the artist information //--><!---Set up for loop to collect all the artist information //-->      <!-- <xsl:for-each select="./*[name()='artists']"> -->      <!-- <xsl:for-each select="./*[name()='artists']"> -->      <xsl:for-each select="artists">      <xsl:for-each select="artists">            <tr>            <tr>                  <td><xsl:value-of select="artist"/></td>                  <td><xsl:value-of select="artist"/></td>                  <td><xsl:value-of select="album"/></td>                  <td><xsl:value-of select="album"/></td>                  <td><xsl:value-of select="year"/></td>                  <td><xsl:value-of select="year"/></td>                  <td><xsl:value-of select="genre"/></td>                  <td><xsl:value-of select="genre"/></td>            </tr>            </tr>      </xsl:for-each>      </xsl:for-each></table></table></body></body></html></html></xsl:template></xsl:template></xsl:stylesheet></xsl:stylesheet></c:set> </c:set>

<x:transform xslt="${xsltSource}" ><x:transform xslt="${xsltSource}" ><music><music><artists><artists>            <artist>Jonny B</artist>            <artist>Jonny B</artist>            <album>Feedback and Distortion</album>            <album>Feedback and Distortion</album>            <year>2001</year>            <year>2001</year>            <genre>Rock</genre>            <genre>Rock</genre>      </artists>       </artists>

      <artists>      <artists>            <artist>Harmony's Nieces</artist>            <artist>Harmony's Nieces</artist>            <album>Sappy Pop Ballads</album>            <album>Sappy Pop Ballads</album>            <year>2002</year>            <year>2002</year>            <genre>Pop</genre>            <genre>Pop</genre>      </artists>       </artists> </music></music></x:transform> </x:transform>

            

Page 37: JSP Standard Tag Library (JSTL)

37

La librería de etiquetas La librería de etiquetas XML IVXML IV

Una manera más sencilla de realizar Una manera más sencilla de realizar una transformación XSLT sería:una transformación XSLT sería:

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

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

<c:import var="xmlSource" url=“${someDocumentURL}" /><c:import var="xmlSource" url=“${someDocumentURL}" /><c:import var="xsltSource" url=“$<c:import var="xsltSource" url=“$

{anotherDocumentURL}" />{anotherDocumentURL}" /><x:transform xml="${xmlSource}" xslt="${xsltSource}"/><x:transform xml="${xmlSource}" xslt="${xsltSource}"/>

Page 38: JSP Standard Tag Library (JSTL)

38

EjemplosEjemplos

Copiar standard-examples.war Copiar standard-examples.war contenido en la distribución contenido en la distribución estándar de JSTL 1.1 a estándar de JSTL 1.1 a %TOMCAT_HOME%\webapps\%TOMCAT_HOME%\webapps\

Ejecutar en el navegador: Ejecutar en el navegador: http://localhost:8080/standard-http://localhost:8080/standard-examples/examples/

Page 39: JSP Standard Tag Library (JSTL)

39

RecursosRecursos

Javadoc de JSTL APIs es disponible Javadoc de JSTL APIs es disponible en:en:

http://www.jcp.org/aboutJava/communhttp://www.jcp.org/aboutJava/communityprocess/final/jsr052/ityprocess/final/jsr052/