1 / 27

JavaServer Pages Standard Tag Library (JSTL)

JavaServer Pages Standard Tag Library (JSTL). Dr. Diego Lz. de Ipiña Gz. de Artaza. 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.

linore
Download Presentation

JavaServer Pages Standard Tag Library (JSTL)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JavaServer Pages Standard Tag Library (JSTL) Dr. Diego Lz. de Ipiña Gz. de Artaza

  2. 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

  3. 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

  4. 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.

  5. 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.

  6. 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 ${ }.

  7. 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

  8. JSTL Tag Libraries

  9. 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}"/>

  10. 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

  11. 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>

  12. 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>

  13. 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>

  14. 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>

  15. 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>

  16. 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>

  17. 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

  18. 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" />

  19. 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>

  20. 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>

  21. 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>

  22. 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"/>

  23. 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>

  24. 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>

  25. 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}"/>

  26. Recursos • Javadoc de JSTL APIs es disponible en: http://www.jcp.org/aboutJava/communityprocess/final/jsr052/

  27. Conclusiones • A codificar ahora que lo sabes todo sobre JSTL • Tarea: transformar la aplicación de JSPs que realizasteis usando JSTL

More Related