JSP Standard Tag Library (JSTL)

Slides:



Advertisements
Presentaciones similares
Interfases Contables en CIO con XML
Advertisements

el 1, el 4 y el 9 tres cuadrados perfectos autosuficientes
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Curso de Java “Java para Web” Rogelio Ferreira Escutia.
INTELIGENCIA ARTIFICIAL
Interfases Contables en CIO
Nau Gran dHivern Intr. a la creación y gestión de páginas web Introducción a la web.
Herramientas informáticas
Preparación de documentos
Internet y tecnologías web
SQL Y BASES DE DATOS A TRAVÉS DE LA WEB
Introducción a HIBERNATE
SQL Sigla del nombre “Structured Query Language”.
Programación Orientada a Objeto 1
BASE DE DATOS OBJETO RELACIONAL
Esquema de Mapeo de Base de Datos Relacionales a Objetos
Introducción a Transact-SQL
SQL BAJO EL ENTORNO PHP/MYSQL MI JUAN PABLO TORRES HERRERA UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA ENSENADA Mayo de 2005.
Jakarta Tomcat (Contenedor de servlets/jsps)
Arquitectura Web en Aplicaciones Empresariales Java/J2EE
Aplicaciones J2EE.
Arquitectura Web en Aplicaciones Empresariales Java/J2EE Daniel Fernández Lanvin Entorno de trabajo.
Entorno de trabajo con apache ant
Estructuras de Información y Archivos
Fernando Velasco
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo Introducción a PL/SQL Conceptos básicos.
Fernando Velasco
Por: Ronald Toscano Pretelt
Mejoras a la Cláusula GROUP BY
"java del lado del servidor" Servlet y JSP Java Server Pages.
OBJETO REQUEST. El objeto Request Por qué el objeto request Funcionamiento Colecciones: – Transferencia de variables por URL –Transferencia de variables.
Combinadores SK.
Curso de Programación 1 Plan 97
Tema 2: Lenguaje PHP básico
JSP Copyright ISIPE – Instituto de Servicios Informáticos para Empresas – Universidad Siglo 21 – Cualquier copia u otro uso debe ser autorizado expresamente.
Julio Pacheco SQL SERVER 2005 XML APRENDIENDO CON EJEMPLOS.
Java 2 Platform Enterprise Edition
Francisco Moreno Bases de Datos II Universidad Nacional
Características Objeto Relacionales en Oracle
Lenguaje Estructurado de Consultas (Structured Query Language – SQL)
Índice Sesión I Bloque I (09:30 a 10:30 Horas) Configuración Inicial
Marzo 2007 Lenguajes Visuales Clase III.
4.3. Privilegios de usuarios
Tecnología de la Programación Javier Nieves Acedo Standar Template Library (STL)
Manipulación de caracteres e hileras de texto
M.I. María Luisa González Ramírez Servlets y JSP.
RESUMENCURSO STRUTS 2 Resumen de lo visto en este tercer módulo: VISTA del framework Struts 2 Debes tener los conceptos muy claros sobre: Results UI Tags.
Tema 3 J2EE Java Database Connectivity Temas Selectos de Cómputo Grupo 912.
PL/SQL Francisco Moreno Universidad Nacional.
SQL SERVER APLICADO (SSA010) Ariel Alexis Fierro Sáez DuocUC.
Control del Acceso de los Usuarios
“Android – Hola Mundo” Rogelio Ferreira Escutia. 2 Creación del Proyecto.
SESIÓN 2. Completados por el tipo de objeto sobre el que actúan y el objeto concreto: CREATE DATABASE mibase ; Permite crear una base de datos llamada.
PL/SQL Francisco Moreno Universidad Nacional.
Java Server Faces.
Tema 2c - JavaServer Pages Standard Tag Library (JSTL)
Bases de datos en la Web n Las bases de datos permiten almacenar de una forma estructurada y eficiente toda la información de un sitio web n Ventajas –Proporcionar.
Laboratorio de Bases de datos
Fernando Alonso Nicolás Serrano Acceso a Bases de Datos con Java JDBC 01 de Abril de 2008.
JavaServer Pages Standard Tag Library (JSTL) Dr. Diego Lz. de Ipiña Gz. de Artaza.
LENGUAJE SQL.
Introducción al Lenguaje. ¿ Qué es PHP ? O Hypertext Pre-processoes (PHP) es un lenguaje de "código abierto" interpretado, de alto nivel, embebido en.
Programación Java y Desarrollo de Aplicaciones Modulo 3 Lenguaje de programación Java Software utilizado.
SQL (Structured Query Language) Lenguaje orientado a bases de datos y sobre todo, al manejo de consultas; el objetivo principal de SQL es la realización.
MSSQL SERVER CURSO BÁSICO 1. DESCRIPCIÓN DEL CURSO. Sesión 4: Sentencia Insert,Transacciones,Insert general, Insert Select * From, Sentencia Update,Update.
Your Logo ING. FREDY ALEXANDER MARTINEZ. Here comes your footer  Page 2 Este patrón fue descrito por primera vez por Trygve Reenskaug en 1979, y la implementación.
MULTIPLAN Multiplan es la práctica en grupo que hemos tenido que realizar durante el curso según las especificaciones dadas en la asignatura.
Después de completar esta lección, debe ser capaz de:  Crear registro definidos por el usuario.  Crear un registro con el atributo %ROWTYPE.  Crear.
DML Transact SQL Sesión X Triggers. Duración 2 Horas.
Programación 1 String y arreglos Facilitador Adrián Monge Monge.
Transcripción de la presentación:

JSP Standard Tag Library (JSTL)

JSTL Objetivo: 3ra iteración después de servlets y JSPs 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 http://jakarta.apache.org/taglibs/ Asumimos que ya has instalado Tomcat 5 en tu máquina, si no consíguelo de: http://apache.rediris.es/jakarta/tomcat-5/v5.5.7/bin/jakarta-tomcat-5.5.7.zip Bajar JSTL 1.1 de: http://cvs.apache.org/builds/jakarta-taglibs/nightly/jakarta-taglibs-20050216.zip Copiar archivos standard.jar y jstl.jar a %TOMCAT_HOME%\common\lib http://jakarta.apache.org/taglibs/

JSTL 1.0 vs JSTL 1.1 JSTL 1.1 es una pequeña mejora de JSTL 1.0 creada para alinear JSTL con JSP 2.0. Antes había una versión de cada librería dependiendo de si utilizabamos expresiones EL o Java, ahora es la misma librería. Ha cambiado el nombre de los identificadores de las librerías, se ha añadido un elemento del path /jsp a todos ellos

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

Características 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: Core Internationalization/format XML SQL y Funciones Además JSTL define un nuevo lenguaje de expresiones llamado EL, que ha sido luego adoptado por JSP 2.0 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.

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

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

JSTL Tag Libraries Librería URI Prefijo Librería Core c http://java.sun.com/jsp/jstl/core c Internationalization I18N formateo http://java.sun.com/jsp/jstl/fmt fmt SQL/DB support http://java.sun.com/jsp/jstl/sql sql Procesamiento XML http://java.sun.com/jsp/jstl/xml x Functions http://java.sun.com/jsp/jstl/functions fn

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/jsp/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}"/>

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

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>

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>

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>

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>

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>

Listar todos los parámetros pasados a una petición <%@ taglib uri="http://java.sun.com/jsp/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>

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

La Nueva Librería de Funciones de EL Cuando EL se migró de la especificación JSTL a JSP, se le añadío una nueva funcionalidad: la invocación a funciones. Su uso es trivial: nombre-func(lista-params) <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> ${fn:length(myCollection)} Contiene un grupo de funciones utilizadas comúnmente

Funciones en EL Función Descripción fn:contains(string, substring) Devuelve true si el string contiene substring. fn:containsIgnoreCase(string, substring) Devuelve true si el string contiene a substring, ignorando capitalización. fn:endsWith(string, suffix) Devuelve true si el string termina con suffix. fn:escapeXml(string) Devuelve el string con todos aquellos caracteres con especial significado en XML y HTML convertidos a sus códigos de escape pertinentes. fn:indexOf(string, substring) Devuelve la primera ocurrencia de substring en el string. fn:join(array, separator) Devuelve un string compuesto por los elementos del array, separados por separator. fn:length(item) Devuelve el número de elementos en item (si un array o colección), o el número de caracteres (es un string).

Funciones en EL Función Descripción fn:replace(string, before, after) Devuelve un string donde todas las ocurrencias del string before han sido reemplazadas por el string after. fn:split(string, separator) Devuelve un array donde los elementos son las partes del string separadas por separator. fn:startsWith(string, prefix) Devuelve true si el string comienza por prefix. fn:substring(string, begin, end) Devuelve la parte del string que comienza por el índice begin y que acaba en el índice end. fn:substringAfter(string, substring) Devuelve la parte del string que sigue a substring. fn:substringBefore(string, substring) Devuelve la parte de string que precede a substring. fn:toLowerCase(string) Devuelve un string con todos los caracteres de la entrada convertidos a minúsculas. fn:toUpperCase(string) Devuelve un string con todos los caracteres de la entrada convertidos a mayúsculas. fn:trim(string) Devuelve un string sin espacios en sus laterales.

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

La librería de etiquetas de internacionalización II Acciones de internacionalización: Una pieza importante 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>

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 items WHERE 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>

Creando la BBDD Deusto CREATE DATABASE deusto; GRANT ALTER, SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON deusto.* TO deusto@'%' IDENTIFIED BY 'deusto'; TO deusto@localhost use deusto; CREATE TABLE EVENTOS(ID int(11) NOT NULL PRIMARY KEY, NOMBRE VARCHAR(250), LOCALIZACION VARCHAR(250), FECHA bigint(20), DESCRIPCION VARCHAR(250)); INSERT INTO EVENTOS VALUES (0, 'SEMANA ESIDE', 'ESIDE-DEUSTO', 0, 'Charla sobre Python'); INSERT INTO EVENTOS VALUES (1, ‘CURSO J2EE', ‘CESINE', 0, ‘Curso sobre tecnologías Java 2 Enterprise Edition');

Recuperando Datos de Tabla Eventos <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %> <sql:setDataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/deusto" user="deusto" password="deusto" var="dataSource"/> <sql:query var="eventItems" dataSource="${dataSource}"> select * from eventos </sql:query> <table> <c:forEach var="row" items="${eventItems.rows}"> <tr> <td><c:out value="${row.ID}"/></td> <td><c:out value="${row.NOMBRE}"/></td> <td><c:out value="${row.LOCALIZACION}"/></td> <td><c:out value="${row.FECHA}"/></td> <td><c:out value="${row.DESCRIPCION}"/></td> </tr> </c:forEach> </table>

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

Recuperando Datos con JSTL de MySQL Instalar MySQL (http://www.mysql.com) Instalar Connector/J, driver JDBC para MySQL (http://www.mysql.com/products/connector/j/) Mover el driver MySQL a $CATALINA_HOME/common/lib. Asegurarse que en $CATALINA_HOME/common/lib están las librerías de JSTL standard.jar y jstl.jar, si no bajarlas de: http://apache.rediris.es/jakarta/taglibs/standard/binaries/ Crear una tabla de prueba con el siguiente comando: mysql –uroot < createmysqldbtest.sql

Recuperando Datos con JSTL de MySQL Contenido de createmysqldbtest.sql: GRANT ALL PRIVILEGES ON *.* TO javauser@localhost IDENTIFIED BY 'javadude' WITH GRANT OPTION; create database javatest; use javatest; create table testdata ( id int not null auto_increment primary key, foo varchar(25), bar int ); insert into testdata values(null, 'hello', 12345);

Recuperando Datos con JSTL de MySQL Añadir el siguiente párrafo a $CATALINA_HOME/conf/server.xml: <Context path="/DBTest" docBase="DBTest" debug="5" reloadable="true" crossContext="true"> <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true"/> </Context>

Recuperando Datos con JSTL de MySQL Crear un fichero de configuración para esta aplicación WEB-INF/web.xml: <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>

Recuperando Datos con JSTL de MySQL Crear un fichero test.jsp: <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <sql:query var="rs" dataSource="jdbc/TestDB"> select id, foo, bar from testdata </sql:query> <html> <head> <title>DB Test</title> </head> <body> <h2>Results</h2> <c:forEach var="row" items="${rs.rows}"> Foo ${row.foo}<br/> Bar ${row.bar}<br/> </c:forEach> </body> </html>

JSTL y Access Ejecutar ejemplo contenido en standard-examples.war de JSTL: http://localhost:8080/standard-examples/sql/ Crear base de datos en Access vacía como la contenida en: sql/jstlsql.mdb Registrar fuente de datos ODBC: Panel de Control  Herramientas Administrativas  Fuentes de Datos (ODBC)  JSTLSQLDB (nombre fuente de datos), seleccionar el fichero arriba mencionado Configurar los detalles de la base de datos con los siguientes parámetros: Driver  sun.jdbc.odbc.JdbcOdbcDriver Base de datos  jdbc:odbc:JSTLSQLDB Ejecutar los .JSPs

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

La librería de etiquetas XML II JSTL 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/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>       

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>       

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/jsp/jstl/core" prefix="c"%> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> <c:import var="xmlSource" url=“${someDocumentURL}" /> <c:import var="xsltSource" url=“${anotherDocumentURL}" /> <x:transform xml="${xmlSource}" xslt="${xsltSource}"/>

Ejemplos Copiar standard-examples.war contenido en la distribución estándar de JSTL 1.1 a %TOMCAT_HOME%\webapps\ Ejecutar en el navegador: http://localhost:8080/standard-examples/

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