Title: Aplicaciones Web de Servidor
1Aplicaciones Web de Servidor
- Introducción a JavaServer Pages (JSP)
- 18 y 25 de Abril de 2007
2La especificación JSP 1.2 Qué es una JSP?
- Las JavaServer Pages (JSP) nos permiten separar
la parte dinámica de nuestras páginas Web del
código estático. Para ello - Simplemente escribimos el HTML (o XML) regular de
la forma normal, usando cualquier herramienta de
construcción de paginas Web. - Encerramos el código de las partes dinámicas en
unas etiquetas especiales, la mayoría de las
cuales empiezan con lt y terminan con gt.
ltHTMLgt ltHEADgt ltTITLEgtEjemplo Hola mundo en
una JSPlt/TITLEgt lt/HEADgt ltBODYgt lt
out.println(Hola mundo desde una JSP) gt
lt/BODYgt lt/HTMLgt
3La especificación JSP 1.2 Funcionamiento.
4Elementos JSP
5La especificación JSP 1.2 Elementos de script
JSP y su notación XML.
- Los elementos de script nos permiten insertar
código Java dentro del servlet que se generará
desde la página JSP actual. Hay tres formas - Expresiones de la forma lt expresión gt que son
evaluadas e insertadas en la salida. - Scriptlets de la forma lt codigo gt que se
insertan dentro del método service() del servlet.
- Declaraciones de la forma lt! codigo gt que se
insertan en el cuerpo de la clase del servlet,
fuera de cualquier método existente. - Directivas de la forma lt_at_ directive
atributo1"valor1"... atributoN"valorN" gt que
afectan a la estructura general del servlet
generado. - Acciones de la forma ltjspaccion /gt que permiten
realizar operaciones como acceso a JavaBeans,
inclusión de paginas,...
6La especificación JSP 1.2 Expresiones JSP.
- Una expresión JSP se usa para insertar valores
Java directamente en la salida. Tiene la
siguiente forma - lt expresión Java gt
- La expresión Java es evaluada, convertida a un
string, e insertada en la página. Esta evaluación
se realiza durante la ejecución (cuando se
solicita la página) y así tiene total acceso a la
información sobre la solicitud. Por ejemplo, esto
muestra la fecha y hora, del servidor, en que se
solicitó la página - Current time lt new java.util.Date() gt
- Notación XML
- ltjspexpressiongt Expresión Java
lt/jspexpressiongt
7La especificación JSP 1.2 Ejemplo 1Expresiones
Fichero Expresiones.jsp
lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN"gt ltHTMLgt ltHEADgt ltTITLEgtEjemplo1
Expresioneslt/TITLEgt lt/HEADgt ltBODYgt ltH2gtEjemplos
de expresiones JSPlt/H2gt ltULgt ltLIgtHora actual en
el servidor lt new java.util.Date() gt
ltLIgtNombre del host lt request.getRemoteHost()
gt ltLIgtIdentificador de sesion lt
session.getId() gt ltLIgtValor del parametro
testParam lt request.getParameter("testPar
am") gt lt/ULgt lt/BODYgt lt/HTMLgt
8La especificación JSP 1.2 Scriptlets JSP.
- Si queremos hacer algo más complejo que insertar
una simple expresión, los Scriptlets JSP nos
permiten insertar código Java arbitrario dentro
del método servlet que será construido al generar
la página. Los Scriptlets tienen la siguiente
forma - lt Código Java gt
- El código dentro de un scriplet se insertará
exactamente como está escrito, y cualquier HTML
estático anterior o posterior al scriptlet se
convierte en sentencias print(). Por tanto no se
necesita completar la sentencias Java, y los
bloques abiertos pueden afectar al HTML estático
fuera de los scriplets. - Notación XML
- ltjspscriptletgt Código lt/jspscriptletgt
9La especificación JSP 1.2 Ejemplo 2 Scriplets
JSP.
Fichero BGColor.jsp
lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN"gt ltHTMLgt ltHEADgt ltTITLEgtColor
de Fondolt/TITLEgt lt/HEADgt lt String bgColor
request.getParameter("bgColor") boolean
hasExplicitColor if (bgColor ! null)
hasExplicitColor true else
hasExplicitColor false bgColor
"WHITE" gt ltBODY BGCOLOR"lt bgColor gt"gt ltH2
ALIGN"CENTER"gtColor de Fondolt/H2gt
10La especificación JSP 1.2 Ejemplo 2 Scriplets
JSP (continuación).
Fichero BGColor.jsp
lt if (hasExplicitColor) out.println(Establec
ido el color de fondo bgColor
.) else out.println(Usando los colores
de fondo por defecto.) gt lt/BODYgt lt/HTMLgt
11La especificación JSP 1.2 Declaraciones JSP.
- Una declaración JSP nos permite definir métodos o
atributos que serán insertados dentro del cuerpo
principal de la clase servlet (fuera del método
service() que procesa la petición). Tienen la
siguiente forma - lt! Código Javagt
- Como las declaraciones no generan ninguna salida,
normalmente se usan en conjunción con expresiones
JSP o Scriptlets. - Notación XML
- ltjspdeclarationgtCódigolt/jspdeclarationgt
12La especificación JSP 1.2 Ejemplo 3
Declaraciones JSP.
Fichero ContadorDeAccesos.jsp
lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN"gt ltHTMLgt ltHEADgt ltTITLEgtEjemplo3
Declaraciones JSPlt/TITLEgt lt/HEADgt ltBODYgt ltH1gtDecl
araciones JSPlt/H1gt lt! private int accessCount
0 gt ltH2gtNúmero de accesos al servidor desde que
se inició lt accessCount gtlt/H2gt lt/BODYgt lt/H
TMLgt
13La especificación JSP 1.2 Comentarios JSP.
- Comentarios ocultos JSP Estos comentarios no son
visibles en la página generada y tienen la forma
- lt-- texto --gt
- Comentarios visibles JSP Estos comentarios son
visibles en la página generada, incluso se pueden
mezclar con expresiones JSP - lt!- texto ltexpresion JSPgt --gt
14Directivas JSP
15La especificación JSP 1.2 Directivas JSP.
- Una directiva JSP afecta a la estructura general
de la clase servlet que resulta de la compilación
de la JSP. Normalmente tienen la siguiente forma - lt_at_ directive atributo1"valor1"
atributo2"valor2" ... atributoN"valorN" gt - NOTACION XML
- ltjspdirective.TIPO_DE_DIRECTIVA
atributo1"valor1" atributo2"valor2" ...
atributoN"valorN /gt - Hay tres tipos de directivas
- page, que nos permite hacer cosas como importar
clases, personalizar la superclase del servlet,
establecer el tipo de contenido, etc. - include, que nos permite insertar un fichero
dentro de la clase servlet en el momento que el
fichero JSP es traducido a un servlet. - taglib, que nos permite definir etiquetas
personalizadas.
16La especificación JSP 1.2 Directiva page.
- La directiva page dirige al motor Servlets
sobre la configuración general de la página. - Nos permite definir uno o mas de los siguientes
atributos aplicables a toda la página - lt_at_ page importpaquete.class
paquete., - sessiontruefalse
- contentTypetipoMimecharsetCharacter-Set
- text/htmlcharsetISO-8859-1
- pageEncoding"characterSet ISO-8859-1
- errorPageURL
- isErrorPagetruefalse
- isThreadSafetruefalse
- languagejava
- extendspaquete.class
- buffernone8kbsizekb
- autoFlushtruefalse
- infotexto
- gt
17La especificación JSP 1.2 Directiva page.
Atributo import.
- El atributo import nos permite especificar los
paquetes que deberían ser importados. Si no se
especifica nada en el servlet se importan los
siguientes paquetes por defecto - java.lang.
- javax.servlet.
- javax.servlet.jsp.
- javax.servlet.http.
- Puede aparecer de una de las siguientes formas
- lt_at_ page importpaquete.clasegt
- lt_at_ page importpaquete.clase1, ...,
paquete.claseNgt - EL atributo import es el único que puede aparecer
más de una vez dentro de una JSP.
18La especificación JSP 1.2 Ejemplo 1 Directiva
page.
Fichero AtributoImport.jsp
lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN"gt ltHTMLgt ltHEADgt
ltTITLEgtEjemplo1 Directiva page. Atributo
importlt/TITLEgt lt/HEADgt ltBODYgt ltH2gtEjemplo1
Directiva page. Atributo import lt/H2gt lt_at_ page
import"java.util.,servletsyjsps." gt lt--
Declaraciones JSP --gt lt! private String
randomID() int num (int)(Math.random()10000
000.0) return("id" num) private final
String NO_VALUE "ltIgtNo Valuelt/Igt" gt
19La especificación JSP 1.2 Ejemplo 1 Directiva
page (continuación).
Fichero AtributoImport.jsp
lt-- Scriptlet JSP --gt lt Cookie cookies
request.getCookies() String oldID
ServletUtilities.getCookieValue(cookies,
"userID", NO_VALUE) String newID if
(oldID.equals(NO_VALUE)) newID
randomID() else newID oldID LongLivedC
ookie cookie new LongLivedCookie("userID",
newID) response.addCookie(cookie) gt lt--
Expresiones JSP --gt La última vez que se accedió
a esta página fue lt new Date() gt con un id de
usuario lt oldID gt. lt/BODYgt lt/HTMLgt
20La especificación JSP 1.2 Directiva page.
Atributo session.
- El atributo session indica si la página JSP
participa o no en una sesión HTTP. - El atributo puede tomar los valores
- lt_at_page sessiontruefalse gt
- Un valor true (valor por defecto) indica que la
variable predefinida session (del tipo
HttpSession) debería unirse a la sesión existente
si existe una, y si no existe se debería crear
una nueva sesión para unirla. - Un valor de false indica que no se usarán
sesiones.
21La especificación JSP 1.2 Directiva page.
Atributo contentType.
- El atributo contentType especifica el tipo MIME
de la salida. El valor por defecto es text/html e
ISO-8859-1. - Puede aparecer de una de las siguientes formas
- ltpage contentTypetipoMimecharsetCharacter-S
et gt - Algunos de tipos MIME más comunes son
Type Significado
text/html Documento HTML
text/plain Texto plano
text/css Hoja de estilo
image/GIF Imagen GIF
image/jpeg Imagen JPEG
video/mpeg Video clip MPEG
video/quicktime Video clip QuickTime
Type Significado
application/msword Documento Word
application/pdf Documento PDF
application/x-gzip Archivo Gzip
application/ x-java-archive Fichero JAR
application/zip Archivo ZIP
application/ postscript Fichero PostScript
22La especificación JSP 1.2 Ejemplo 2 Directiva
page.
Fichero Excel.jsp
lt_at_ page contentType"application/vnd.ms-excel"
gt lt-- Hay que poner tabuladores entre los datos
no espacios. --gt 1997 1998 1999 2000 2001
(Anticipated) 12.3 13.4 14.5 15.6 16.7
23La especificación JSP 1.2 Directiva page.
Atributo pageEncoding.
- El atributo pageEncoding especifica el juego de
caracteres que usará la página JSP para el
response. - El atributo puede aparecer de las formas
- lt_at_ page pageEncoding"characterSet ISO-8859-1"
gt - El valor por defecto es ISO-8859-1
24La especificación JSP 1.2 Directiva page.
Atributos errorPage, isErrorPage.
- El atributo errorPage especifica una página JSP
que se debería procesar si se lanzará cualquier
Throwable pero no fuera capturado en la página
actual. - Si el path empieza con una "/", el path es
relativo al directorio raíz de documentos de la
aplicación JSP y es resuelto por el servidor Web.
Si no, el path es relativo al fichero JSP actual.
- El atributo isErrorPage indica si la página
actual actúa o no como página de error de otra
página JSP. - El a tributo puede tomar los valores
- lt_at_page isErrorPagetruefalse gt
- Si es true, podemos usar el objeto exception, que
contiene una referencia a la excepción lanzada,
en el fichero JSP. - Si es false (valor por defecto), significa que no
podemos usar el objeto exception en el fichero
JSP.
25La especificación JSP 1.2 Ejemplo 3 Directiva
page.
Fichero Velocidad.jsp
lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN"gt ltHTMLgt ltHEADgt ltTITLEgtEjemplo
3 Directiva pagelt/TITLEgt lt/HEADgt ltBODYgt lt_at_ page
errorPageVelocidadError.jsp" gt lt! // Observa
que se lanzará un excepcion NumberFormatException
si el valor es nulo o // esta mal
formateado private double toDouble(String value)
return(Double.valueOf(value).doubleValue())
gt lt double espacio toDouble(request.getParam
eter(espacio)) double tiempo
toDouble(request.getParameter(tiempo)) double
speed espacio/tiempo gt
26La especificación JSP 1.2 Ejemplo 3 Directiva
page (continuación).
Fichero Velocidad.jsp
ltULgt ltLIgtEspacio lt espacio gt. ltLIgtTiempo
lt tiempo gt. ltLIgtVelocidad lt speed
gt. lt/ULgt lt/BODYgt lt/HTMLgt
27La especificación JSP 1.2 Ejemplo 3 Directiva
page (continuación).
Fichero VelocidadError.jsp
lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN"gt ltHTMLgt ltHEADgt ltTITLEgtPágina de
errorlt/TITLEgt lt/HEADgt ltBODYgt lt_at_ page
isErrorPage"true" gt ltTABLE BORDER5
ALIGN"CENTER"gt ltTRgtltTH CLASS"TITLE"gt
Error al calcular la velocidadlt/TABLEgt ltPgt Hay un
error en la página Velocidad.jsp ltIgtlt
exception gtlt/Igt. ltPREgtlt exception.printStackTra
ce(new java.io.PrintWriter(out))
gtlt/PREgt lt/BODYgt lt/HTMLgt
28La especificación JSP 1.2 Directiva page.
Atributo extends.
- El atributo extends indica el nombre, totalmente
cualificado, de la superclase del servlet que
resulta de compilar la página JSP. - lt_at_ page extendspaquete.class gt
- Sun recomienda que usemos este atributo con
cautela, ya puede limitar la habilidad del motor
del JSP.
29La especificación JSP 1.2 Directiva include.
- La directiva include nos permite incluir ficheros
en el momento en que la página JSP es compilada a
un servlet. La directiva include tiene la forma - lt_at_ include filerelativeURL gt
- Observar que la directiva include incluye el
fichero en el momento de la compilación. Por
tanto, si la página incluida cambia después de la
compilación, los cambios no se verán reflejados
en la página actual hasta que se vuelva a
compilar.
30La especificación JSP 1.2 Ejemplo 1 Directiva
include.
Fichero Velocidad.jsp
lthtmlgt ltheadgt lttitlegtEjemplo de un
includelt/titlegt lt/headgt ltbody
bgcolor"white"gt ltfont color"blue"gt
Fecha y hora actual lt_at_ include fileDate.jsp"
gt lt/fontgt lt/bodygt lt/htmlgt
Fichero Date.jsp
lt_at_ page import"java.util." gt lt (new Date()
).toLocaleString() gt
31La especificación JSP 1.2 Directiva taglib.
- Gracias a la directiva taglib podemos definir
nuestros propios tags JSP. - A un conjunto de tags JSP lo llamaremos librería
de tags. - Para definir un tag necesitamos definir 4
componentes - Una clase que defina el comportamiento del tag.
- Un fichero TLD (Tag library descriptor) para
hacer visible la clase en el servidor. - Un fichero web.xml para hacer visible el tag en
el servidor. - Un fichero JSP que use el tag
32Objetos Implícitos
33La especificación JSP 1.2 Objetos implícitos en
una JSP.
- Para simplificar el código en las expresiones y
scriplets JSP, tenemos 9 variables definidas
automáticamente - request.
- response.
- out.
- session.
- application.
- config.
- pageContext.
- page.
- exception
- Estas variables reciben el nombre de Objetos
implícitos en una JSP.
34La especificación JSP 1.2 Objetos implícitos en
una JSP.
- request
- Este es el objeto de la clase HttpServletRequest
asociado con la petición, y nos permite mirar los
parámetros de la petición (mediante el método
getParameter), el tipo de petición (GET, POST,
HEAD, etc.), y las cabeceras HTTP entrantes
(cookies, referer, etc.). Estrictamente hablando,
se permite que la petición sea una subclase de
ServletRequest distinta de HttpServletRequest, si
el protocolo de la petición es distinto del HTTP,
aunque esto casi nunca se lleva a la práctica. - response
- Este es el objeto de la clase HttpServletResponse
asociado con la respuesta al cliente. Observa
que, como el stream de salida (ver out más abajo)
tiene un buffer, es legal seleccionar los códigos
de estado y cabeceras de respuesta, aunque no
está permitido en los Servlets normales una vez
que la salida ha sido enviada al cliente.
35La especificación JSP 1.2 Objetos implícitos en
una JSP.
- out
- Este es el PrintWriter usado para envíar la
salida al cliente. Sin embargo, para poder hacer
útil el objeto response (ver punto anterior),
esta es una versión con buffer de PrintWriter
llamada JspWriter. Podemos ajustar el tamaño del
buffer, o incluso desactivar el buffer, usando el
atributo buffer de la directiva page. out se usa
casi exclusivamente en scriptlets ya que las
expresiones JSP obtienen un lugar en el stream de
salida, y por eso raramente se refieren
explícitamente a out. - session
- Este es el objeto de la clase HttpSession
asociado con la petición. Las sesiones se crean
automáticamente. Por esto esta variable se une
incluso si no hubiera una sesión de referencia
entrante. Como veremos, la única excepción es
usar el atributo session de la directiva page
para desactivar las sesiones, en cuyo caso los
intentos de referenciar la variable session
causarán un error en el momento de traducir la
página JSP a un servlet.
36La especificación JSP 1.2 Objetos implícitos en
una JSP.
- application
- Es el objeto de la clase ServletContext obtenido
mediante - getServletConfig().getContext()
- config
- Es el objeto de la clase ServletConfig para la
página actual. - pageContext
- Es el objeto de la clase PageContext. Este objeto
es usado por el motor de Servlets para
administrar características como páginas de error
y los parámetros para hacer include o forward de
páginas. - exception
- Es un objeto de la clase Throwable. Solo se crea
en el caso en el que usemos la directiva - lt_at_page ErrorPagetruegt
37JavaBeans y JSP
38La especificación JSP 1.2 JavaBeans y JSPs.
- Las acciones que restan hacen referencia a la
reutilización de componentes JavaBeans. - Características de un JavaBean
- Una clase Bean deber ser serializable, y por lo
tanto, debe tener un constructor vacío. Este
constructor es el que será llamado cuando una JSP
cree el Bean. - Una clase Bean no debería tener variables de
instancia públicas. - En la clase Bean tienen que aparecer métodos
getXxx/setXxx para establecer u obtener los
valores de sus propiedades.
39La especificación JSP 1.2 Acción useBean.
- La acción ltjspuseBeangt nos permite localizar o
instanciar un JavaBean en la página JSP. La
sintaxis más simple para especificar que se
debería usar un Bean es - ltjspuseBean id"nombre" class"paquete.clase" /gt
- Con esto conseguimos localizar o instanciar un
objeto, de la clase especificada por class, y
enlazarlo con una variable, con el nombre
especificado en id. - También se puede especificar un atributo scope
que hace que el bean se asocie con más de una
página. En este caso, es útil obtener referencias
a los beans existentes, y la acción jspuseBean
especifica que se instanciará un nuevo objeto si
no existe uno con el mismo nombre y ámbito.
40La especificación JSP 1.2 Acción useBean.
- La sintaxis completa de la acción ltjspuseBeangt
es - ltjspuseBean idnombreDeInstanciaDelBean"
- scope"pagerequestsessionapplication"
-
- class"paquete.clase" type"paquete.clase"
- beanName"paquete.clase expression "
- type"paquete.clase"
- type"paquete.clase"
-
- /gt gt otros elementos
- lt/jspuseBeangt
41La especificación JSP 1.2 Acción useBean.
Atributos.
- El atributo id es el nombre de la variable que
identifica al bean en un determinado ámbito
(page, request, session, application). - El atributo scope"pagerequestsessionapplicatio
n" determina el ámbito en el que el bean existe. - page El bean solo esta disponible para la página
actual (valor por defecto). - request El bean solo esta disponible para la
petición actual del cliente. - session El bean esta disponible para todas las
páginas durante el tiempo de vida de la sesión. - application El bean esta disponible para todas
las páginas que comparten el mismo ServletContext.
42La especificación JSP 1.2 Acción useBean.
Atributos.
- El atributo class nos dice el nombre de la clase
del bean que se instancia. La clase no debe ser
abstracta y debe tener un constructor vacío. - El atributo type hace que se instancie el bean
con un tipo diferente al que se crea. El valor de
type debe ser el nombre de una superclase del
bean o el nombre de un interface que implemente
la clase del bean. - Si usamos Type sin class o beanName el bean no
se instancia - El atributo beanName da el nombre del bean, como
lo suministraríamos en el método instantiate de
Beans. Esta permitido suministrar un type y un
beanName, y omitir el atributo class. -
43La especificación JSP 1.2 Acción setProperty.
- Usamos jspsetProperty para establecer los
valores de las propiedades de los beans que se
han referenciado anteriormente con la acción
jspuseBean. Además valor de id en jspuseBean
debe coincidir con el valor de name en
jspsetProperty. - La sintaxis completa de la acción es
- ltjspsetProperty name"nombreDeInstanciaDelBean
" -
- property""
- propertynombrePropiedadparamnombreParametr
o" - propertynombrePropiedad
- value"stringLiteral expresion "
- /gt
44La especificación JSP 1.2 Acción setProperty.
Atributos.
- El atributo name designa el bean cuya propiedad
va a ser establecida. El elemento jspuseBean
debe aparecer antes del elemento jspsetProperty.
- El atributo property almacena todos los
valores de los parámetros de la petición en
propiedades del bean. Para ello, los nombre de
las propiedades del bean deben coincidir con los
nombre de los parámetros de la petición. - Si un parámetro de la request es null o esta
vacío, la propiedad equivalente no se establece a
ningún valor. - Si el bean tiene una propiedad que no corresponde
con ninguno parámetro de la petición, la
propiedad no se establece a ningún valor.
45La especificación JSP 1.2 Acción setProperty.
Atributos.
- propertynombrePropiedad paramnombreParametro
" - Con estos atributos podemos establecer una
propiedad del bean con uno de los parámetros de
la request. - Si los valores de property y param coinciden,
podemos omitir el atributo param. - Si el parámetro de la request tiene un valor
vacío o null, el valor de la propiedad del bean
equivalente no se establece. - propertynombrePropiedad
- value"stringLiteral expresion "
- Con este atributo podemos establecer la
propiedad de un bean con un valor específico. - Si el valor es de tipo String, se convertirá al
tipo de la propiedad del bean siguiendo las
normal de la tabla mostrada abajo. - Si el valor es una expresión, el tipo de la
expresión debe coincidir el tipo de la propiedad
del bean.
46La especificación JSP 1.2 Acción getProperty.
- La acción jspgetProperty obtiene el valor de una
propiedad de un bean, usando el método getter del
bean, e inserta su valor en la respuesta. - Antes de usar esta acción debe aparecer una
acción jspuseBean para instanciar o localizar el
bean. - La sintaxis completa de la acción es
- ltjspgetProperty name" nombreDeInstanciaDelBean"
- property" nombrePropiedad " /gt
47La especificación JSP 1.2 Acción getProperty.
Atributos.
- El atributo name designa el bean cuya propiedad
va a ser seleccionada. El elemento jspuseBean
debe aparecer antes del elemento jspsetProperty
y el valor de id en jspuseBean debe coincidir
con el valor de name en jspsetProperty. - El atributo property indica el nombre de la
propiedad del bean que queremos obtener. - Si al obtener el valor de la propiedad resulta
que es null, se lanza una excepción de tipo
NullPointerException.
48La especificación JSP 1.2 Ejemplo 1 StringBean.
49La especificación JSP 1.2 Ejemplo 1 StringBean.
Fichero StringBean.jsp
lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN"gtltHTMLgt ltHEADgt
ltTITLEgtEjemplo 1 StringBeanlt/TITLEgt lt/HEADgt
ltBODYgt ltjspuseBean id"stringBean"
classservletsyjsps.StringBean" /gt ltOLgt
ltLIgtValor inicial (getProperty)
ltIgtltjspgetProperty name"stringBean"
property"mensaje" /gtlt/Igt ltLIgtValor inicial
(Expresion JSP) ltIgtlt
stringBean.getMensaje() gtlt/Igt
ltLIgtltjspsetProperty namestringBean
propertymensaje
valueValor actualizado con setProperty /gt
Valor después de establecer la propiedad con
setProperty ltIgtltjspgetProperty
name"stringBean" property"mensaje" /gtlt/Igt
lt/OLgt lt/BODYgtlt/HTMLgt
50La especificación JSP 1.2 Ejemplo 2 SaleEntry.
Fichero SaleEntry.java
package servletsyjspspublic class SaleEntry
private String itemID desconocido" private
double discountCode 1.0 private int numItems
0 public String getItemID()
return(itemID) public void setItemID(String
itemID) if (itemID ! null)
this.itemID itemID else
this.itemID desconocido public
double getDiscountCode() return(discountCode)
public void setDiscountCode(double
discountCode)this.discountCode discountCode
51La especificación JSP 1.2 Ejemplo 2 SaleEntry.
Fichero SaleEntry.java
public int getNumItems() return(numItems)
public void setNumItems(int numItems)
this.numItems numItems //reemplazarlo
por una busque real en BD. public double
getItemCost() double cost if
(itemID.equals("a1234")) cost
12.99getDiscountCode() else cost
-9999 return(roundToPennies(cost))
private double roundToPennies(double
cost) return(Math.floor(cost100)/100.0)
public double getTotalCost() return(getItemCost()
getNumItems())
52La especificación JSP 1.2 Ejemplo 2 SaleEntry1.
Fichero SaleEntry1.jsp
lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN"gtltHTMLgt ltHEADgt
ltTITLEgtEjemplo 2 SaleEntry2lt/TITLEgt
lt/HEADgtltjspuseBean identry
classservletsyjsps.SaleEntry
/gt ltjspsetProperty nameentry
propertyitemID value'ltrequest.getParamet
er(itemID) gt' /gtltint numItemsOrdered
1try numItemsOrdered
Integer.parseInt(request.getParameter(numItems))
catch(NumberFormatException nfe)
gt ltjspsetProperty nameentry
propertynumItems valuelt
numItemsOrdered gt /gt
53La especificación JSP 1.2 Ejemplo 2 SaleEntry1
(continuación).
Fichero SaleEntry1.jsp
lt double discountCode 1.0try String
discountString request.getParameter(discountCod
e) discountCode Double.valueOf(discountStrin
g).doubleValue() catch(NumberFormatException
nfe) gt ltjspsetProperty nameentry
propertydiscountCode valuelt discountCode
gt /gtltBRgtltTABLE ALIGN"CENTER" BORDER1gtltTR
CLASS"COLORED"gt ltTHgtItem IDltTHgtUnit
PriceltTHgtNumber OrderedltTHgtTotal PriceltTR
ALIGN"RIGHT"gt ltTDgtltjspgetProperty
name"entry" property"itemID"/gt
ltTDgtltjspgetProperty name"entry"
property"itemCost" /gt ltTDgtltjspgetProperty
name"entry" property"numItems" /gt
ltTDgtltjspgetProperty name"entry"
property"totalCost" /gtlt/TABLEgt
54La especificación JSP 1.2 Ejemplo 2 SaleEntry2.
Fichero SaleEntry2.jsp
lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN"gt ltHTMLgt ltHEADgt
ltTITLEgtEjemplo2 SaleEntry2lt/TITLEgt lt/HEADgt
ltBODYgt ltjspuseBean id"entry"
class"servletsyjsps.SaleEntry" /gt
ltjspsetProperty name"entry" property"" /gt
ltBRgt ltTABLE ALIGN"CENTER" BORDER1gt
ltTR CLASS"COLORED"gt ltTHgtItem IDltTHgtUnit
PriceltTHgtNumber OrderedltTHgtTotal Price ltTR
ALIGN"RIGHT"gt ltTDgtltjspgetProperty
name"entry" property"itemID" /gt
ltTDgtltjspgetProperty name"entry"
property"itemCost" /gt ltTDgtltjspgetProperty
name"entry" property"numItems" /gt
ltTDgtltjspgetProperty name"entry"
property"totalCost" /gt lt/TABLEgt
lt/BODYgt lt/HTMLgt
55Librería de etiquetas Taglibs
56La especificación JSP 1.2 Directiva taglib.
- Gracias a la directiva taglib podemos definir
nuestros propios tags JSP. - A un conjunto de tags JSP lo llamaremos librería
de tags. - Para definir un tag necesitamos definir 4
componentes - Una clase que defina el comportamiento del tag.
- Un fichero TLD (Tag library descriptor) para
hacer visible la clase en el servidor. - Un fichero web.xml para hacer visible el tag en
el servidor. - Un fichero JSP que use el tag
57La especificación JSP 1.2 Directiva taglib.
Sintaxis.
- La sintaxis completa de la directiva taglib es
- lt_at_ taglib uri"URIForLibrary" prefix"tagPrefix"
gt - El atributo uri define donde se localiza el
fichero TLD, y puede ser un URL, un URN o un PATH
absoluto o relativo. - Si la URI es una URL, entonces el TLD es
localizado por medio del mapping definido dentro
del fichero web.xml. - Si la URI es un path, entonces es interpretado
como un acceso relativo a la raíz de la
aplicación y debería resolverse en un fichero TLD
directamente, o un fichero .jar que contiene el
fichero TLD.
58La especificación JSP 1.2 Ejemplo Hola Mundo.
Fichero Hola.jsp
ltHTMLgt ltHEADgt lt_at_ taglib uriHola.tld
prefixtest gt ltTITLEgtlttestHolaMundo
/gtlt/TITLEgt ltBODYgt ltH1gt lttestHolaMundo
/gtlt/H1gt lt/BODYgt lt/HTMLgt
59La especificación JSP 1.2 Ejemplo Hola Mundo.
Fichero Hola.tld
lt?xml version"1.0" encoding"ISO-8859-1"
?gt lt!DOCTYPE taglib PUBLIC"-//Sun Microsystems,
Inc.//DTD JSP Tag Library 1.1//EN"
http//java.sun.com/j2ee/dtds/web-jsptaglib_1_1.d
td"gt lttaglibgt ltjspversiongt1.1lt/jspversiongt
lttlibversiongt1.0lt/tlibversiongt
ltshortnamegtsimpleholalt/shortnamegt lturngtlt/urngt
ltinfogtMi primera librería de
tagslt/infogt lttaggt ltnamegtHolaMundolt/namegt
lttagclassgtHolalt/tagclassgt ltbody-contentgtempty
lt/body-contentgt ltinfogtMi Hola Mundo
Taglt/infogt lt/taggt lt/taglibgt
60La especificación JSP 1.2 Ejemplo Hola Mundo.
Fichero web.xml
lt?xml version"1.0" encoding"ISO-8859-1"
?gt lt!DOCTYPE taglib PUBLIC"-//Sun Microsystems,
Inc.//DTD Web Application 2.2//EN"
http//java.sun.com/j2ee/dtds/web-app_2_2.dtd"gt
ltweb-appgt ltdisplay-namegt Aplicación Hola Mundo
lt/ display-namegt ltdescriptiongt Librerías de tags
de la aplicación lt/descriptiongt lttaglibgt lttag
lib-urigt/Hola.tld lt/taglib-urigt lttaglib-location
gt/WEB-INF/Hola.tld lt/taglib-locationgt lt/taglibgt
lt/web-appgt
61La especificación JSP 1.2 Ejemplo Hola Mundo.
Fichero Hola.java
import javax.servlet.jsp. import
javax.servlet.jsp.tagext. import java.io.
public class Hola extends TagSupport
public int doStartTag() try JspWriter
out pageContext.getOut() out.print(Hola
Mundo) catch (IOException ioe)
System.out.println(Error en Hola
Mundo) return (SKIP_BODY)