JavaServer Pages Standard Tag Library (JSTL)
description
Transcript of JavaServer Pages Standard Tag Library (JSTL)
![Page 1: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/1.jpg)
JavaServer Pages Standard Tag Library (JSTL)
Dr. Diego Lz. de Ipiña Gz. de Artaza
![Page 2: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/2.jpg)
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
![Page 3: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/3.jpg)
Instalar JSTL Asumimos que ya has instalado Tomcat
4.1 en tu máquina, si no consíguelo de: http://apache.rediris.es/jakarta/tomcat-4/v4.
1.29/bin/jakarta-tomcat-4.1.29-LE-jdk14.exe Bajar JSTL de:
http://apache.rediris.es/jakarta/taglibs/standard-1.0/jakarta-taglibs-standard-current.zip
Copiar archivos standard.jar y jstl.jar a Tomcat4.1\common\lib
![Page 4: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/4.jpg)
Usar JSTL en una aplicación Web Para cualquier aplicación web desde la cual quieres usar JSTL, copiar los
ficheros .tld al directorio WEB-INF de tu aplicación web. Edita el web.xml de tu aplicación web añadiendo las siguientes entradas
<taglib> <taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri> <taglib-location>/WEB-INF/fmt.tld</taglib-location> </taglib>
<taglib> <taglib-uri>http://java.sun.com/jstl/core</taglib-uri> <taglib-location>/WEB-INF/c.tld</taglib-location> </taglib>
<taglib> <taglib-uri>http://java.sun.com/jstl/sql</taglib-uri> <taglib-location>/WEB-INF/sql.tld</taglib-location> </taglib>
<taglib> <taglib-uri>http://java.sun.com/jstl/x</taglib-uri> <taglib-location>/WEB-INF/x.tld</taglib-location> </taglib>
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 importancia.
![Page 5: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/5.jpg)
Características Las páginas JSTL son también páginas JSP. JSTL es un
superconjunto de JSP. JSTL provee un conjunto de cuatro librerías estándar:
Core Internationalization/format XML y SQL
Además JSTL define un nuevo lenguaje de expresiones llamado EL
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.
![Page 6: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/6.jpg)
Soporte para EL I El lenguaje de expresiones EL
simplemente define un poderoso mecanismo para expresar expresiones simples en una sintáxis muy sencilla. Es algo entre JavaScript y Perl. Su combinación con las etiquetas de las 4
librerías antes mencionadas proveen mucha flexibilidad y poder para el desarrollo de páginas dinámicas.
En EL las expresiones están delimitadas por ${ }.
![Page 7: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/7.jpg)
Soporte para EL II Algunos ejemplos del uso de EL son:
${anExpression} ${aList[4]} ${aList[someVariable]} acceso a un elemento de una colección ${anObject.aProperty} acceso a la propiedad de un objeto ${anObject["aPropertyName"]} entrada en un mapa con
propiedad aPropertyName ${anObject[aVariableContainingPropertyName]}
Existen una serie de variables implícitas definidas en EL: pageContext: el contexto del JSP actual pageScope, requestScope, sessionScope, and applicationScope:
colecciones de mapas que mapean nombres de variables en esos contextos a valores
param and paramValues: parámetros pasados con la petición de la página, lo micmo que en JSP
header and headerValues: cabeceras pasadas en la petición de la página
cookie: mapa que mapea nombres de cookies a los valores de las mismas
![Page 8: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/8.jpg)
JSTL Tag Libraries
Librería Prefijo librería EL Prefijo de Librería Request-time (RT)
Core c c_rt
Internationalization/format
fmt fmt_rt
SQL/DB support sql sql_rt
XML x x_rt
![Page 9: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/9.jpg)
Uso de las librerías JSTL en un JSP
La siguiente directiva ha de incluirse al comienzo de la página:
<%@ taglib prefix="c" uri=http://java.sun.com/jstl/core %>
Para utilizar una etiqueta de una librería simplemente se ha de preceder con el prefijo de la librería utilizada:
<c:out value="${anExpression}"/>
![Page 10: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/10.jpg)
La librería de etiquetas Core Permiten llevar a cabo las
siguientes acciones: Visualizar/asignar valores y manejar
excepciones Control de flujo Otras acciones de utilidad
![Page 11: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/11.jpg)
Visualizar/asignar valores y manejar excepciones con Core I Para visualizar valores utilizamos:<c:out:value="${applicationScope.product.inventoryCount}"
escapeXml="true" default="0" /> of those items in stock.
escapeXml indica si hay que aplicar códigos de escape a los caracteres <, >, & y .
Asignar una variable en una página:<c:set var="customerID" value="$param:customerNumber"
scope="session" /> scope indica el contexto en el que se define la variable También podemos asignar el contenido de una etiqueta a una
variable: <c:set var="cellContents"><td><c:out value="${myCell}"/></td></c:set>
![Page 12: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/12.jpg)
Visualizar/asignar valores y manejar excepciones con Core II Normalmente en un JSP o incluimos un
bloque try/catch o usamos la directiva errorPage:<c:catch> <!--. . . some set of nested JSTL tags below which would be hit on an exception--></c:catch>
Para borrar una variable se puede utilizar <c:remove>
![Page 13: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/13.jpg)
Control de flujo con JSTL Core I Para llevar a cabo simples condiciones (c:if):
<c:if test="${status.totalVisits == 1000000}" var="visits"> You are the millionth visitor to our site! Congratulations!</c:if>
El switch de un lenguaje de programación se puede emular con c:choose:<c:choose><c:when test="${item.type == 'book'}">...</c:when><c:when test="${item.type == 'electronics'}">...</c:when><c:when test="${item.type == 'toy'}">...</c:when><c:otherwise>...</c:otherwise></c:choose>
![Page 14: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/14.jpg)
Control de flujo con JSTL Core II Para iterar sobre una colección se define c:foreach. Se pueden especificar índice de comienzo, final e incremento con los atributos begin, end y step.
<table><c:forEach var="name" items="${customerNames}"><tr><td><c:out value="${name}"/></td></tr></c:forEach>
</table>
![Page 15: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/15.jpg)
Control de flujo con JSTL Core III Funcionalidad similar a StringTokenizer puede
ser obtenida en JSTL con c:forTokens:
<table><c:forTokens items="47,52,53,55,46,22,16,2" delims="," var="dailyPrice"><tr><td><c:out value="${dailyPrice}"/></td></tr></c:forTokens>
</table>
![Page 16: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/16.jpg)
Listar todos los parámetros pasados a una petición
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %><html><body><head><title>Parameter Listing Example</title></head>
<br>
<b>Parameter values passed to this page for each parameter: </b><table border="2"><c:forEach var="current" items="${param}"> <tr> <td> <b><c:out value="${current.key}" /></b> </td> <c:forEach var="aVal" items="${paramValues[current.key]}"> <td> <c:out value="${aVal}" /> </td> </c:forEach> </tr></c:forEach></table></body></html>
![Page 17: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/17.jpg)
Otras acciones Para codificar URLs se puede utilizar c:url:<c:url value="http://acme.com/exec/register" var="myUrl"><c:param name="name" value="${param.name}"/><c:param name="country" value="${param.country}"/></c:url><a href='<c:out value="${myUrl}"/>'>Register</a>
Se pueden importar otros JSPs o incluso otros recursos en una URL arbitraria usando c:import (análogo to jsp:include)
Para manejar redireccionamiento se puede utilizar la etiqueta c:redirect
![Page 18: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/18.jpg)
La librería de etiquetas de internacionalización I
Cubre dos áreas: Etiquetas (acciones) de formateo Acciones de internacionalización
Acciones de formateo: Inspiradas en el funcionamiento de las clases DateFormat y
NumberFormat 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" />
![Page 19: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/19.jpg)
La librería de etiquetas de internacionalización II Acciones de internacionalización:
Una pieza imporante de la localización en Java es la clase ResourceBundle. Las acciones JSTL que permiten trabajar con esta clase son:
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>
![Page 20: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/20.jpg)
La librería de etiquetas SQL I JSTL permite una fácil integración con bases de datos No gestiona bien connection pooling, por tanto son solamente adecuadas para
llevar a cabo prototipos o aplicaciones de bajo volumen. Ejemplo: seleccionar y visualizar un conjunto de elementos
<sql:setDataSource driver="com.cheapDrivers.jdbcDriver" url="jdbc:cheapDrivers:." user="guest" password="password" var="dataSource" />
<sql:query var="orderItems" dataSource="${dataSource}">SELECT * FROM itemsWHERE order_id = <cout value="${orderID}"/> ORDER BY price</sql:query><table><c:forEach var="row" items="${orderItems.rows}"><tr><td><c:out value="${row.itemName}"/></td><td><c:out value="${row.price}"/></td><td><c:out value="${row.weight}"/></td></tr></c:forEach></table>
![Page 21: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/21.jpg)
La librería de etiquetas SQL II También se soportan acciones para manejar transacciones
(sql:transaction), sql:update soporta no sólo updates sino que también insert y delete e incluso create, es decir todas las acciones SQL que no devuelven un resultado:
<sql:transaction dataSource="${dataSource}"><sql:update>UPDATE accountSET account_balance =account_balance -?WHERE accountNo = ?<sql:param value="${transferAmount}"/><sql:param value="${sourceAccount}"/></sql:update><sql:update>UPDATE accountSET account_balance =account_balance +?WHERE accountNo = ?<sql:param value="${transferAmount}"/><sql:param value="${destAccount}"/></sql:update>
</sql:transaction>
![Page 22: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/22.jpg)
La librería de etiquetas XML I
El soporte de XML que lleva a cabo JSTL conforma con la especificación XPath.
Xpath provee una sintáxis clara para acceder a partes jerárquicas de un documento.
Acciones c:import es utilizada para importar un documento, mientras x:parse para genera un árbol DOM a partir de él. x:set crea una variable a partir de un extracto de XML
<!-- Find and parse our XML document (somewhere on the WWW) --><c:import url="http://www.cheapstuff.com/orderStatus?id=2435"
var="xml"/><x:parse xml="${xml}" var="doc"/><!-- access XML data via XPath expressions --><x:out select="$doc/name"/><x:out select="$doc/shippingAddress"/><x:out select="$doc/deliveryDate"/><!-- Set a scoped variable --><x:set var="custName" scope="request" select="$doc/name"/>
![Page 23: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/23.jpg)
La librería de etiquetas XML II
JSTL se integra fenomenálmente con XSTL
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jstl/xml" prefix="x" %>
<c:set var="xsltSource"> <?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><xsl:template match="/"> <xsl:apply-templates/></xsl:template>
<xsl:template match="music">
<html><head></head><body marginheight="0" marginwidth="0" topmargin="0" leftmargin="0"><table cellpadding="0" cellspacing="0" border="1" bgcolor="#ffffff"> <tr> <td><STRONG>Artist</STRONG></td> <td><STRONG>Album</STRONG></td> <td><STRONG>Year</STRONG></td> <td><STRONG>Genre</STRONG></td> </tr>
![Page 24: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/24.jpg)
La librería de etiquetas XML III
<!---Set up for loop to collect all the artist information //--> <!-- <xsl:for-each select="./*[name()='artists']"> --> <xsl:for-each select="artists"> <tr> <td><xsl:value-of select="artist"/></td> <td><xsl:value-of select="album"/></td> <td><xsl:value-of select="year"/></td> <td><xsl:value-of select="genre"/></td> </tr> </xsl:for-each></table></body></html></xsl:template></xsl:stylesheet></c:set>
<x:transform xslt="${xsltSource}" ><music><artists> <artist>Jonny B</artist> <album>Feedback and Distortion</album> <year>2001</year> <genre>Rock</genre> </artists>
<artists> <artist>Harmony's Nieces</artist> <album>Sappy Pop Ballads</album> <year>2002</year> <genre>Pop</genre> </artists> </music></x:transform>
![Page 25: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/25.jpg)
La librería de etiquetas XML IV
Una manera más sencilla de realizar una transformación XSLT sería:
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jstl/x" prefix="x"%>
<c:import var="xmlSource" url=“${someDocumentURL}" /><c:import var="xsltSource" url=“$
{anotherDocumentURL}" /><x:transform xml="${xmlSource}" xslt="${xsltSource}"/>
![Page 26: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/26.jpg)
Recursos Javadoc de JSTL APIs es disponible
en:http://www.jcp.org/aboutJava/communityprocess/final/jsr052/
![Page 27: JavaServer Pages Standard Tag Library (JSTL)](https://reader036.fdocuments.ec/reader036/viewer/2022062305/56815e05550346895dcc5190/html5/thumbnails/27.jpg)
Conclusiones A codificar ahora que lo sabes todo
sobre JSTL Tarea: transformar la aplicación de
JSPs que realizasteis usando JSTL