Title: JavaServer%20Pages%20Standard%20Tag%20Library%20(JSTL)
1JavaServer Pages Standard Tag Library (JSTL)
- Dr. Diego Lz. de Ipiña Gz. de Artaza
2JSTL
- 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
3Instalar 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
4Usar 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 - lttaglibgt lttaglib-urigthttp//java.sun.com/
jstl/fmtlt/taglib-urigt lttaglib-locationgt/WEB-IN
F/fmt.tldlt/taglib-locationgt lt/taglibgt lttaglib
gt lttaglib-urigthttp//java.sun.com/jstl/corelt/t
aglib-urigt lttaglib-locationgt/WEB-INF/c.tldlt/ta
glib-locationgt lt/taglibgt lttaglibgt lttaglib
-urigthttp//java.sun.com/jstl/sqllt/taglib-urigt
lttaglib-locationgt/WEB-INF/sql.tldlt/taglib-locatio
ngt lt/taglibgt lttaglibgt lttaglib-urigthttp//
java.sun.com/jstl/xlt/taglib-urigt lttaglib-locat
iongt/WEB-INF/x.tldlt/taglib-locationgt lt/taglibgt - 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.
5Caracterí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.
6Soporte 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 .
7Soporte para EL II
- Algunos ejemplos del uso de EL son
- anExpression
- aList4
- aListsomeVariable ? 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 - anObjectaVariableContainingPropertyName
- 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
8JSTL 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
9Uso de las librerías JSTL en un JSP
- La siguiente directiva ha de incluirse al
comienzo de la página - lt_at_ taglib prefix"c" urihttp//java.sun.com/jstl
/core gt - Para utilizar una etiqueta de una librería
simplemente se ha de preceder con el prefijo de
la librería utilizada - ltcout value"anExpression"/gt
10La 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
11Visualizar/asignar valores y manejar excepciones
con Core I
- Para visualizar valores utilizamos
- ltcout
- value"applicationScope.product.inventoryCount"
escapeXml"true" default"0" /gt of those items
in stock. - escapeXml indica si hay que aplicar códigos de
escape a los caracteres lt, gt, y . - Asignar una variable en una página
- ltcset var"customerID" value"paramcustomerNumb
er" scope"session" /gt - scope indica el contexto en el que se define la
variable - También podemos asignar el contenido de una
etiqueta a una variable - ltcset var"cellContents"gtlttdgtltcout
value"myCell"/gtlt/tdgtlt/csetgt
12Visualizar/asignar valores y manejar excepciones
con Core II
- Normalmente en un JSP o incluimos un bloque
try/catch o usamos la directiva errorPage - ltccatchgt lt!--. . . some set of nested JSTL
tags below which would be hit on an
exception--gtlt/ccatchgt - Para borrar una variable se puede utilizar
ltcremovegt
13Control de flujo con JSTL Core I
- Para llevar a cabo simples condiciones (cif)
- ltcif test"status.totalVisits 1000000"
var"visits"gt You are the millionth visitor to
our site! Congratulations!lt/cifgt - El switch de un lenguaje de programación se puede
emular con cchoose - ltcchoosegtltcwhen test"item.type
'book'"gt...lt/cwhengtltcwhen test"item.type
'electronics'"gt...lt/cwhengtltcwhen
test"item.type 'toy'"gt...lt/cwhengtltcoth
erwisegt...lt/cotherwisegtlt/cchoosegt
14Control de flujo con JSTL Core II
- Para iterar sobre una colección se define
cforeach. Se pueden especificar índice de
comienzo, final e incremento con los atributos
begin, end y step. - lttablegtltcforEach var"name" items"customerNam
es"gtlttrgtlttdgtltcout value"name"/gtlt/tdgtlt/trgtlt
/cforEachgt - lt/tablegt
15Control de flujo con JSTL Core III
- Funcionalidad similar a StringTokenizer puede ser
obtenida en JSTL con cforTokens - lttablegtltcforTokens items"47,52,53,55,46,22,16,2
" delims"," var"dailyPrice"gtlttrgtlttdgtltcout
value"dailyPrice"/gtlt/tdgtlt/trgtlt/cforTokensgt - lt/tablegt
16Listar todos los parámetros pasados a una petición
- lt_at_ taglib uri"http//java.sun.com/jstl/core"
prefix"c" gtlthtmlgtltbodygtltheadgtlttitlegtParamete
r Listing Examplelt/titlegtlt/headgtltbrgtltbgtParame
ter values passed to this page for each
parameter lt/bgtlttable border"2"gtltcforEach
var"current" items"param"gt lttrgt lttdgt
ltbgtltcout value"current.key"
/gtlt/bgt lt/tdgt ltcforEach var"aVal"
items"paramValuescurrent.key"gt lt
tdgt ltcout value"aVal"
/gt lt/tdgt lt/cforEachgt lt/tr
gtlt/cforEachgtlt/tablegtlt/bodygtlt/htmlgt
17Otras acciones
- Para codificar URLs se puede utilizar curl
- ltcurl value"http//acme.com/exec/register"
var"myUrl"gtltcparam name"name"
value"param.name"/gtltcparam name"country"
value"param.country"/gtlt/curlgtlta
href'ltcout value"myUrl"/gt'gtRegisterlt/agt - Se pueden importar otros JSPs o incluso otros
recursos en una URL arbitraria usando cimport
(análogo to jspinclude) - Para manejar redireccionamiento se puede utilizar
la etiqueta credirect
18La 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. - ltfmtformatNumber value"1000.001"
pattern",00.0"/gt - Si queremos parsear un número a partir de un
string usamos parseNumber - ltfmtparseNumber value"currencyInput"
type"currency" var"parsedNumber"/gt - Para formatear una fecha usamos formatDate y para
parsear un string parseDate - ltjspuseBean id"now" class"java.util.Date" /gt
- ltfmtformatDate value"now" timeStyle"long"da
teStyle"long"/gt - ltfmtparseDate value"dateInput" pattern"MM
dd, YYYY" /gt
19La 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 - fmtbundle para obtener un ResourceBundle
correspondiente al Locale actual y - fmtmessage para hacer lookups en el
ResourceBundle - Ejemplo
- ltfmtbundle basename"myBundle"gtlt-- Use values
in myBundle --gtltfmtmessage key"Introduction"gt
ltfmtparam value"loginName"/gt
ltfmtparam value"loginCount"/gtlt/fmtmessagegt
ltfmtformatDate value"now" var"parsedDate"/gt
lt/fmtbundlegt
20La 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 - ltsqlsetDataSource driver"com.cheapDrivers
.jdbcDriver" url"jdbccheapDrivers."
user"guest" password"password" var
"dataSource" /gtltsqlquery var"orderItems"
dataSource"dataSource"gtSELECT FROM
itemsWHERE order_id ltcout value"orderID"/gt
ORDER BY pricelt/sqlquerygtlttablegtltcforEach
var"row" items"orderItems.rows"gtlttrgtlttdgtltc
out value"row.itemName"/gtlt/tdgtlttdgtltcout
value"row.price"/gtlt/tdgtlttdgtltcout
value"row.weight"/gtlt/tdgtlt/trgtlt/cforEachgtlt/
tablegt
21La librería de etiquetas SQL II
- También se soportan acciones para manejar
transacciones (sqltransaction), sqlupdate
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 -
- ltsqltransaction dataSource"dataSource"gtltsql
updategtUPDATE accountSET account_balance
account_balance -?WHERE accountNo
?ltsqlparam value"transferAmount"/gtltsqlpara
m value"sourceAccount"/gtlt/sqlupdategtltsqlup
dategtUPDATE accountSET account_balance
account_balance ?WHERE accountNo
?ltsqlparam value"transferAmount"/gtltsqlpara
m value"destAccount"/gtlt/sqlupdategt - lt/sqltransactiongt
22La 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 cimport es utilizada para importar un
documento, mientras xparse para genera un árbol
DOM a partir de él. xset crea una variable a
partir de un extracto de XML - lt!-- Find and parse our XML document (somewhere
on the WWW) --gt - ltcimport url"http//www.cheapstuff.com/orderStat
us?id2435" var"xml"/gt - ltxparse xml"xml" var"doc"/gtlt!-- access
XML data via XPath expressions --gtltxout
select"doc/name"/gtltxout select"doc/shippingA
ddress"/gtltxout select"doc/deliveryDate"/gtlt!--
Set a scoped variable --gtltxset var"custName"
scope"request" select"doc/name"/gt
23La librería de etiquetas XML II
- JSTL se integra fenomenálmente con XSTL
- lt_at_ taglib uri"http//java.sun.com/jstl/core"
prefix"c" gtlt_at_ taglib uri"http//java.sun.com/
jstl/xml" prefix"x" gtltcset var"xsltSource"gt
lt?xml version"1.0"?gtltxslstylesheet
xmlnsxsl"http//www.w3.org/1999/XSL/Transform"
version"1.0"gtltxsltemplate match"/"gt ltxsl
apply-templates/gtlt/xsltemplategtltxsltemplate
match"music"gtlthtmlgtltheadgtlt/headgtltbody
marginheight"0" marginwidth"0" topmargin"0"
leftmargin"0"gtlttable cellpadding"0"
cellspacing"0" border"1" bgcolor"ffffff"gt
lttrgt lttdgtltSTRONGgtArtistlt/STRONGgtlt/td
gt lttdgtltSTRONGgtAlbumlt/STRONGgtlt/tdgt
lttdgtltSTRONGgtYearlt/STRONGgtlt/tdgt
lttdgtltSTRONGgtGenrelt/STRONGgtlt/tdgt lt/trgt
24La librería de etiquetas XML III
- lt!---Set up for loop to
collect all the artist information
//--gt lt!-- ltxslfor-each select"./name()
'artists'"gt --gt ltxslfor-each
select"artists"gt lttrgt
lttdgtltxslvalue-of select"artist"/gtlt/tdgt
lttdgtltxslvalue-of select"album"/gtlt/td
gt lttdgtltxslvalue-of
select"year"/gtlt/tdgt lttdgtltxslva
lue-of select"genre"/gtlt/tdgt lt/trgt
lt/xslfor-eachgtlt/tablegtlt/bodygtlt/htmlgtlt/xsl
templategtlt/xslstylesheetgtlt/csetgt
ltxtransform xslt"xsltSource"
gtltmusicgtltartistsgt ltartistgtJonny
Blt/artistgt ltalbumgtFeedback and
Distortionlt/albumgt ltyeargt2001lt/yeargt
ltgenregtRocklt/genregt lt/artistsgt
ltartistsgt ltartistgtHarmony's
Nieceslt/artistgt ltalbumgtSappy Pop
Balladslt/albumgt ltyeargt2002lt/yeargt
ltgenregtPoplt/genregt lt/artistsgt
lt/musicgtlt/xtransformgt -
25La librería de etiquetas XML IV
- Una manera más sencilla de realizar una
transformación XSLT sería - lt_at_ taglib uri"http//java.sun.com/jstl/core"
prefix"c"gt - lt_at_ taglib uri"http//java.sun.com/jstl/x"
prefix"x"gt - ltcimport var"xmlSource" urlsomeDocumentURL"
/gt - ltcimport var"xsltSource" urlanotherDocumentU
RL" /gt - ltxtransform xml"xmlSource"
xslt"xsltSource"/gt
26Recursos
- Javadoc de JSTL APIs es disponible en
- http//www.jcp.org/aboutJava/communityprocess/fina
l/jsr052/
27Conclusiones
- A codificar ahora que lo sabes todo sobre JSTL
- Tarea transformar la aplicación de JSPs que
realizasteis usando JSTL