Вы находитесь на странице: 1из 39

Tema 2c ]avaServer Pages

Standard Tag Library (]STL)


Dr. Diego Lz. de !pina Cz. de Artaza
http://paginaspersonales.deusto.es/dipina
http://paginaspersonales.deusto.es/dipina/cursos/]2EECesine.zip
dipina@eside.deusto.es
]STL
Objetivo:
Simplificar y agilizar el desarrollo de
aplicaciones web
3ra iteracin despus de servlets y ]SPs
Sirven para la generacin dinamica de
paginas web
!nstalar ]STL
Asumimos que ya has instalado Tomcat S en
tu maquina, si no consiguelo de:
http://apache.rediris.es/jakarta/tomcat
S/vS.S.7/bin/jakartatomcatS.S.7.zip
Bajar ]STL 1.1 de:
http://cvs.apache.org/builds/jakarta
taglibs/nightly/jakartataglibs200S0216.zip
Copiar archivos standard.jar y jstl.jar
a %TJMCAT_HJME%\common\lib
http://jakarta.apache.org/taglibs/
]STL 1.0 vs ]STL 1.1
]STL 1.1 es una pequena mejora de ]STL 1.0
creada para alinear ]STL con ]SP 2.0.
Antes habia una versin de cada libreria
dependiendo de si utilizabamos expresiones
EL o ]ava, ahora es la misma libreria.
Ha cambiado el nombre de los identificadores de
las librerias, se ha anadido un elemento del path
/jsp a todos ellos
sar ]STL en una aplicacin
Web
Para cualquier aplicacin web desde la cual quieres usar ]STL, copiar los ficheros .tld al
directorio WEB-INF de tu aplicacin web.
Edita el web.xml de tu aplicacin web anadiendo las siguientes entradas
<taglib
<taglib-urihttp://java.sun.com/jsp/jstl/fmt</taglib-uri
<taglib-location/WEB-INF/fmt.tld</taglib-location
</taglib
<taglib
<taglib-urihttp://java.sun.com/jsp/jstl/core</taglib-uri
<taglib-location/WEB-INF/c.tld</taglib-location
</taglib
<taglib
<taglib-urihttp://java.sun.com/jsp/jstl/sql</taglib-uri
<taglib-location/WEB-INF/sql.tld</taglib-location
</taglib
<taglib
<taglib-urihttp://java.sun.com/jsp/jstl/x</taglib-uri
<taglib-location/WEB-INF/x.tld</taglib-location
</taglib
Estas entradas permiten a tu aplicacin web usar las librerias de etiquetas ]STL que usan el
lenguaje de expresiones. La posicin de estas entradas tiene importancia.
Caracteristicas
Las paginas ]STL son tambin paginas ]SP. ]STL es un
superconjunto de ]SP.
]STL provee un conjunto de cinco librerias estandar:
Core
!nternationalization/format
XNL
SQL y
Funciones
Ademas ]STL define un nuevo lenguaje de expresiones llamado
EL, que ha sido luego adoptado por ]SP 2.0
na etiqueta ]STL corresponde a una accin, llamandolas
accin nos indica que anaden comportamiento dinamico a una,
de otra manera, pagina estatica.
Soporte para EL !
El lenguaje de expresiones EL simplemente
define un poderoso mecanismo para expresar
expresiones simples en una sintaxis muy
sencilla.
Es algo entre ]avaScript y Perl.
Su combinacin con las etiquetas de las 4 librerias
antes mencionadas proveen mucha flexibilidad y
poder para el desarrollo de paginas dinamicas.
En EL las expresiones estan delimitadas por
${ }.
Soporte para EL !!
Algunos ejemplos del uso de EL son:
${anExpression}
${aList|4]}
${aList|somevariable]} acceso a un elemento de una coleccin
${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 implicitas definidas en EL:
pageContext: el contexto del ]SP actual
pageScope, requestScope, sessionScope, and applicationScope:
colecciones de mapas que mapean nombres de variables en esos contextos
a valores
param and paramValues: parametros pasados con la peticin de la
pagina, lo mismo que en ]SP
header and headerValues: cabeceras pasadas en la peticin de la
pagina
cookie: mapa que mapea nombres de cookies a los valores de las mismas
]STL Tag Libraries
Libreria UR! Prefijo
Libreria
Core
http://java.sun.com/jsp/jstl/core
c
!nternationalization
!18N formateo
http://java.sun.com/jsp/jstl/fmt
fmt
SQL/DB support
http://java.sun.com/jsp/jstl/sql
sql
Procesamiento XNL
http://java.sun.com/jsp/jstl/xml
x
Functions
http://java.sun.com/jsp/jstl/functions
fn
so de las librerias ]STL en un
]SP
La siguiente directiva ha de incluirse al comienzo
de la pagina:
<%@ taglib prefix="c"
uri=http://java.sun.com/jsp/jstl/core
%
Para utilizar una etiqueta de una libreria
simplemente se ha de preceder con el prefijo de la
libreria utilizada:
<c:out value="$,anExpression,"/
La libreria 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 !
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 cdigos de escape a los caracteres <,
>, S y .
Asignar una variable en una pagina:
<c:set var="customerID" value="$param.customerNumber"
scope="session" /
scope indica el contexto en el que se define la variable
Tambin 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 !!
Normalmente en un ]SP 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 ]STL Core
!
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 programacin 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 ]STL Core
!!
Para iterar sobre una coleccin se define
c:foreach. Se pueden especificar indice 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 ]STL Core
!!!
Funcionalidad similar a StringTokenizer puede
ser obtenida en ]STL 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 parametros
pasados a una peticin
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %
<html
<body
<head
<titleParameter Listing Example</title
</head
<br
<bParameter 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="$,paramValuescurrent.key,,"
<td
<c:out value="$,aVal," /
</td
</c:forEach
</tr
</c:forEach
</table
</body
</html
Otras acciones
Para codificar %Ls 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 ]SPs o incluso otros
recursos en una %L arbitraria usando c:import
(analogo to jsp:include)
Para manejar redireccionamiento se puede utilizar la
etiqueta c:redirect
La Nueva Libreria de
Funciones de EL
Cuando EL se migr de la especificacin ]STL
a ]SP, se le anadio una nueva funcionalidad:
la invocacin a funciones.
Su uso es trivial: nombre-func(lista-
params)
<%@ taglib prefix="fn"
uri="http://java.sun.com/jsp/jstl/fun
ctions" %
$,fn:length(myCollection),
Contiene un grupo de funciones utilizadas
comnmente
Funciones en EL
50i5 es0rip0i5
fn:contains(string,
substring)
Devuelve true si el string contiene substring.
fn:containsIgnoreCase
(string, substring)
Devuelve true si el string contiene a substring, ignorando capitalizacin.
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 XNL y HTNL
convertidos a sus cdigos de escape pertinentes.
fn:indexJf(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 nmero de elementos en item (si un array o coleccin), o el nmero de
caracteres (es un string).
Funciones en EL
:3.O3
es0rip0i5
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 indice begin y que acaba en el
indice 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
minsculas.
fn:toUpperCase(string)
Devuelve un string con todos los caracteres de la entrada convertidos a maysculas.
fn:trim(string)
Devuelve un string sin espacios en sus laterales.
La libreria de etiquetas de
internacionalizacin !
Cubre dos areas:
Etiquetas (acciones) de formateo
Acciones de internacionalizacin
Acciones de formateo:
!nspiradas en el funcionamiento de las clases DateFormat y NumberFormat
Para formatear un nmero usamos formatNumber con los atributos number
para el nmero y pattern para el patrn de formateo a aplicar.
<fmt:formatNumber value="1000.001" pattern="#,#00.0#"/
Si queremos parsear un nmero 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 libreria de etiquetas de
internacionalizacin !!
Acciones de internacionalizacin:
na pieza importante de la localizacin en ]ava es la clase
ResourceBundle. Las acciones ]STL 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 libreria de etiquetas SQL !
]STL permite una facil integracin 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 FRJM items
WHERE order_id = <cout value="$,orderID,"/
JRDER 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,DRJP
JN deusto.
TJ deusto@'%'
IDENTIFIED BY 'deusto';
GRANT ALTER, SELECT,INSERT,UPDATE,DELETE,CREATE,DRJP
JN deusto.
TJ deusto@localhost
IDENTIFIED BY 'deusto';
use deusto;
CREATE TABLE EVENTJS(ID int(11) NJT NULL PRIMARY KEY,
NJMBRE VARCHAR(250), LJCALIZACIJN VARCHAR(250), FECHA bigint(20), DESCRIPCIJN
VARCHAR(250));
INSERT INTJ EVENTJS VALUES (0, 'SEMANA ESIDE', 'ESIDE-DEUSTJ', 0, 'Charla sobre
Python');
INSERT INTJ EVENTJS VALUES (1, `CURSJ J2EE', `CESINE', 0, `Curso sobre tecnologas
Java 2 Enterprise Edition');
%ecuperando 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.NJMBRE,"/</td
<td<c:out value="$,row.LJCALIZACIJN,"/</td
<td<c:out value="$,row.FECHA,"/</td
<td<c:out value="$,row.DESCRIPCIJN,"/</td
</tr
</c:forEach
</table
La libreria de etiquetas SQL !!
Tambin se soportan acciones para manejar transacciones
(sql:transaction), sql:update soporta no slo updates sino que tambin
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
%ecuperando Datos con ]STL
de NySQL
1. !nstalar NySQL (http://www.mysql.com)
2. !nstalar Connector/], driver ]DBC para NySQL
(http://www.mysql.com/products/connector/j/)
3. Nover el driver NySQL a
$CATAL!NA_HONE/common/lib.
4. Asegurarse que en $CATAL!NA_HONE/common/lib
estan las librerias de ]STL standard.jar y jstl.jar, si
no bajarlas de:
http://apache.rediris.es/jakarta/taglibs/standard/bi
naries/
S. Crear una tabla de prueba con el siguiente
comando: mysql -uroot < createmysqldbtest.sql
%ecuperando Datos con ]STL
de NySQL
Contenido de createmysqldbtest.sql:
GRANT ALL PRIVILEGES JN . TJ javauser@localhost
IDENTIFIED BY 'javadude' WITH GRANT JPTIJN;
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);
%ecuperando Datos con ]STL
de NySQL
S. Anadir el siguiente parrafo a $CATAL!NA_HONE/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.autoRecon
nect=true"/
</Context
%ecuperando Datos con ]STL
de NySQL
6. Crear un fichero de configuracin para esta aplicacin 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"
<descriptionMySQL Test App</description
<resource-ref
<descriptionDB Connection</description
<res-ref-namejdbc/TestDB</res-ref-name
<res-typejavax.sql.DataSource</res-type
<res-authContainer</res-auth
</resource-ref
</web-app
%ecuperando Datos con ]STL
de NySQL
7. 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
<titleDB Test</title
</head
<body
<h2Results</h2
<c:forEach var="row" items="$,rs.rows,"
Foo $,row.foo,<br/
Bar $,row.bar,<br/
</c:forEach
</body
</html
]STL y Access
Ejecutar ejemplo contenido en standard
examples.war de ]STL:
http://localhost:8080/standard-
examples/sql/
Crear base de datos en Access vacia como la
contenida en: sql/jstlsql.mdb
%egistrar 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 parametros:
Driver sun.jdbc.odbc.JdbcJdbcDriver
Base de datos jdbc:odbc:JSTLSQLDB
Ejecutar los .]SPs
La libreria de etiquetas XNL !
El soporte de XNL que lleva a cabo ]STL conforma con la especificacin XPath.
Xpath provee una sintaxis clara para acceder a partes jerarquicas de un documento.
Acciones c:import es utilizada para importar un documento, mientras x:parse
para genera un arbol DON a partir de l. x:set crea una variable a partir de un
extracto de XNL
<!-- 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 libreria de etiquetas XNL !!
]STL se integra fenomenalmente 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<STRJNGArtist</STRJNG</td
<td<STRJNGAlbum</STRJNG</td
<td<STRJNGYear</STRJNG</td
<td<STRJNGGenre</STRJNG</td
</tr
La libreria de etiquetas XNL
!!!
<!---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
<artistJonny B</artist
<albumFeedback and Distortion</album
<year2001</year
<genreRock</genre
</artists
<artists
<artistHarmony's Nieces</artist
<albumSappy Pop Ballads</album
<year2002</year
<genrePop</genre
</artists
</music
</x:transform
La libreria de etiquetas XNL !v
na manera mas sencilla de realizar una
transformacin XSLT seria:
<%@ 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 standardexamples.war
contenido en la distribucin estandar de
]STL 1.1 a
%TJMCAT_HJME%\webapps\
Ejecutar en el navegador:
http://localhost:8080/standar
d-examples/
%ecursos
]avadoc de ]STL AP!s es disponible en:
http://www.jcp.org/about]ava/community
process/final/jsr0S2/

Вам также может понравиться