Sei sulla pagina 1di 0

Curso: "Java EE y Frameworks" 2013

JSP
Mdulo 2 / parte 1

Todos los logos y marcas utilizados en este
documento, estn registrados y pertenecen a
sus respectivos dueos.
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 1

Curso: "Java EE y Frameworks" 2013

Introduccin.
J avaServer Pages (J SP) es una tecnologa J ava que permite generar contenido dinmico
para web, en forma de documentos HTML, XML o de otro tipo.
Esta tecnologa es un desarrollo de la compaa Sun Microsystems. La Especificacin
J SP 1.2 fue la primera que se liber y en la actualidad est disponible la Especificacin
J SP 2.1.
Las J SP's permiten la utilizacin de cdigo J ava mediante scripts. Adems es posible
utilizar algunas acciones J SP predefinidas mediante etiquetas. Estas etiquetas pueden ser
enriquecidas mediante la utilizacin de Libreras de Etiquetas (TagLibs o Tag Libraries)
externas e incluso personalizadas.
Microsoft, la ms directa competencia de Sun, ha visto en esta estrategia de Sun una
amenaza, lo que le ha llevado a que su plataforma .NET incluya su lenguaje de scripts
ASP.NET que permite ser integrado con clases .NET (ya estn hechas en C++,
VisualBasic o C#) del mismo modo que jsp se integra con clases J ava.
Las J avaServer Pages (J SP) nos permiten separar la parte dinmica de nuestras pginas
Web del HTML esttico. Simplemente escribimos el HTML regular de la forma normal,
usando cualquier herramienta de construccin de paginas Web que usemos normalmente.
Encerramos el cdigo de las partes dinmicas en unas etiquetas especiales, la mayora
de las cuales empiezan con "<%" y terminan con "%>".
Por ejemplo, aqu tenemos una seccin de una pgina J SP que resulta en algo as como
"Thanks for ordering Core Web Programming" para una URL como:
http://host/OrderConfirmation.jsp?title=Core+Web+Programming:
Thanks for ordering
<h3><%=request.getParameter("title") %></h3>

Normalmente daremos a nuestro fichero una extensin .jsp, y normalmente lo
instalaremos en el mismo sitio que una pgina Web normal. Aunque lo que escribamos
frecuentemente se parezca a un fichero HTML normal en vez de un servelt, detrs de la
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 2

Curso: "Java EE y Frameworks" 2013

escena, la pgina J SP se convierte en un servlet normal, donde el HTML esttico
simplemente se imprime en el stream de salida estndard asociado con el mtodo service
del servlet.
Esto normalmente slo se hace la primera vez que se solicita la pgina, y los
desarrolladores pueden solicitar la pgina ellos mismos cuando la instalan si quieren estar
seguros de que el primer usuario real no tenga un retardo momentneo cuando la pgina
J SP sea traducida a un servlet y el servlet sea compilado y cargado.
Observa tambin, que muchos servidores Web nos permiten definir alias para que una
URL que parece apuntar a un fichero HTML realmente apunte a un servelt o a una pgina
J SP.
Adems de l HTML normal, hay tres tipos de construcciones J SP que embeberemos en
una pgina: elementos de script, directivas y acciones. Los elementos de script nos
permiten especificar cdigo J ava que se convertir en parte del servlet resultante, las
directivas nos permiten controlar la estructura general del servlet, y las acciones nos
permiten especificar componentes que deberan ser usuados, y de otro modo controlar el
comportamiento del motor J SP.
Para simplificar los elementos de script, tenemos acceso a un nmero de variables
predefinidas como request del fragmento de cdigo anterior.






AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 3

Curso: "Java EE y Frameworks" 2013

Sintaxis JSP.
Expresin JSP
<%=expression %>
La Expresin es evaluada y situada en la salida.
El equivalente XML es <jsp:expression> expression </jsp:expression>.
Las variables predefinidas son:
request
response
out
session
application
config
pageContext
Scriptlet JSP
<% code %>
El cdigo se inserta en el mtodo service.
El equivalente XML es: <jsp:scriptlet> code </jsp:scriptlet>.
Declaracin JSP
<%! code %>
El cdigo se inserta en el cuerpo de la clase del servlet, fuera del mtodo service.
El equivalente XML es: <jsp:declaration> code </jsp:declaration>.



AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 4

Curso: "Java EE y Frameworks" 2013

Directiva page JSP
<%@ page att="val" %>
Dirige al motor servlet sobre la configuracin general.
El equivalente XML es: <jsp:directive.page att="val"\>.
Los atributos legales son:
import="package.class"
contentType="MIME-Type"
isThreadSafe="true|false"
session="true|false"
buffer="sizekb|none"
autoflush="true|false"
extends="package.class"
info="message"
errorPage="url"
isErrorPage="true|false"
language="java"
Directiva include JSP
<%@ include file="url" %>
Un fichero del sistema local se incluir cuando la pgina se traduzca a un Servlet.
El equivalente XML es: <jsp:directive.include file="url"\>.
La URL debe ser relativa. Usamos la accin jsp:include para incluir un fichero en el
momento de la peticin en vez del momento de la traducin.


AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 5

Curso: "Java EE y Frameworks" 2013

Comentario JSP
<%-- comment --%>
Comentario ignorado cuando se traduce la pgina J SP en un servlet.
Si queremos un comentario en el HTML resultante, usamos la sntaxis de comentario
normal del HTML <-- comment -->.
Accin jsp:include
<jsp:include page="relative URL" flush="true"/>
Incluye un fichero en el momento en que la pgina es solicitada.
Aviso: en algunos servidores, el fichero incluido debe ser un fichero HTML o JSP,
segn determine el servidor (normalmente basado en la extensin del fichero).
Accin jsp:useBean
<jsp:useBean att=val*/>
<jsp:useBean att=val*></jsp:useBean>
Encuentra o construye un J ava Bean.
Los posibles atributos son:
id="name"
scope="page|request|session|application"
class="package.class"
ype="package.class"
beanName="package.class"




AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 6

Curso: "Java EE y Frameworks" 2013

Accin jsp:setProperty
<jsp:setProperty att=val*/>
Selecciona las propiedades del bean, bien directamenteo o designando el valor que viene
desde un parmetro de la peticin.
Los atributos legales son:
name="beanName"
property="propertyName|*"
param="parameterName"
value="val"
Accin jsp:getProperty
<jsp:getProperty name="propertyName" value="val"/>
Recupera y saca las propiedades del Bean.
Accin jsp:forward
<jsp:forward page="relative URL"/>
Reenva la peticin a otra pgina.
Accin jsp:plugin
<jsp:plugin attribute="value"*>... </jsp:plugin>
Genera etiquetas OBJ ECT o EMBED, apropiadas al tipo de navegador, pidiendo que se
ejecute un applet usando el J ava Plugin.




AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 7

Curso: "Java EE y Frameworks" 2013

Plantilla de Texto: HTML esttico
En muchos casos, un gran porcentaje de nuestras pginas J SP consistir en HTML
esttico, conocido como plantilla de texto. En casi todos lo aspectos, este HTML se
parece al HTML normal, sigue la mismas reglas de sintaxis, y simplemente "pasa a travs"
del cliente por el servlet creado para manejar la pgina. No slo el aspecto del HTML es
normal, puede ser creado con cualquier herramienta que usemos para generar pginas
Web. La nica excepcin a la regla de que "la plantilla de texto se pasa tal y como es" es
que, si queremos tener "<%" en la salida, necesitamos poner "<\%" en la plantilla de texto.
Elementos de Script JSP
Los elementos de script nos permiten insertar cdigo J ava dentro del servlet que se
generar desde la pgina J SP actual. Hay tres formas:
Expresiones de la forma <%= expresin %> que son evaluadas e insertadas en la
salida.
Scriptlets de la forma <% codido %> que se insertan dentro del mtodo service
del servlet, y
Declaraciones de la forma <%! codigo %> que se insertan en el cuerpo de la clase
del servlet, fuera de cualquier mtodo existente.
Expresiones JSP
Una expresin J SP se usa para insertar valores J ava directamente en la salida. Tiene la
siguiente forma:
<%=expresin J ava %>
La expresin J ava es evaluada, convertida a un string, e insertada en la pgina. Esta
evaluacin se realiza durante la ejecucin (cuando se solicita la pgina) y as tiene total
acceso a la informacin sobre la solicitud. Por ejemplo, esto muestra la fecha y hora en
que se solicit la pgina:
Current time: <%=new java.util.Date() %>

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 8

Curso: "Java EE y Frameworks" 2013

Para simplificar estas expresiones, hay un gran nmero de variables predefinidas que
podemos usar. Estos objetos implcitos se describen ms adelante con ms detalle, pero
para el propsito de las expresiones, los ms importantes son:
request, el HttpServletRequest;
response, el HttpServletResponse;
session, el HttpSession asociado con el request (si existe), y
out, el PrintWriter (una versin con buffer del tipo J spWriter) usada para envar la
salida al cliente.
Aqu tenemos un ejemplo:
Your hostname: <%=request.getRemoteHost() %>
Finalmente, observa que los autores de XML pueden usar una sntaxis alternativa para las
expresiones J SP:
<j sp: expr essi on>
Expr esi n J ava
</ j sp: expr essi on>

Recuerda que los elementos XML, al contrario que los del HTML, son sensibles a las
maysculas; por eso asegrate de usar minsculas.
Scriptlets JSP
Si queremos hacer algo ms complejo que insertar una simple expresin, los scriptlets
J SP nos permiten insertar cdigo arbitrario dentro del mtodo servlet que ser construido
al generar la pgina. Los Scriptlets tienen la siguiente forma:
<%Cdi go J ava %>



AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 9

Curso: "Java EE y Frameworks" 2013

Los Scriptlets tienen acceso a las mismas variables predefinidas que las expresiones. Por
eso, por ejemplo, si queremos que la salida aparezca en la pgina resultante, tenemos
que usar la variable out:
<%
St r i ng quer yDat a = r equest . get Quer ySt r i ng( ) ;
out . pr i nt l n( " At t ached GET dat a: " + quer yDat a) ;
%>


Observa que el cdigo dentro de un scriptlet se insertar exactamente como est escrito,
y cualquier HTML esttico (plantilla de texto) anterior o posterior al scriptlet se convierte
en sentencias print. Esto significa que los scriptlets no necesitan completar las sentencias
J ava, y los bloques abiertos pueden afectar al HTML esttico fuera de los scriplets. Por
ejemplo, el siguiente fragmento J SP, contiene una mezcla de texto y scritplets:
<%i f ( Mat h. r andom( ) < 0. 5) { %> Have a <B>ni ce</ B> day!
<%} el se { %>
Have a <B>l ousy</ B> day!
<%} %>


Que se convertir en algo como esto: a
i f ( Mat h. r andom( ) < 0. 5) {
out . pr i nt l n( " Have a <B>ni ce</ B> day! " ) ;
} el se {
out . pr i nt l n( " Have a <B>l ousy</ B> day! " ) ;
}




AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 10

Curso: "Java EE y Frameworks" 2013

Si queremos usar los caracteres "%>" dentro de un scriptlet, debemos poner "%\>".
Finalmente, observa que el equivalente XML de <% Cdigo %>es
<j sp: scr i pt l et >
Cdi go
</ j sp: scr i pt l et >

Declaraciones JSP
Una declaracin J SP nos permite definir mtodos o campos que sern insertados dentro
del cuerpo principal de la clase servlet (fuera del mtodo service que procesa la peticin).
Tienen la siguiente forma:
<%! Cdi go J ava%>

Como las declaraciones no generan ninguna salida, normalmente se usan en conjuncin
con expresiones J SP o escriptlets. Por ejemplo, aqu tenemos un fragmento de J SP que
imprime el nmero de veces que se ha solicitado la pgina actual desde que el servidor se
arranc (o la clase del servelt se modific o se recarg):
<%! pr i vat e i nt accessCount = 0; %>
Accesses t o page si nce ser ver r eboot :
<%= ++accessCount %>

Como con los scriptlet, si queremos usar los caracteres "%>", ponemos "%\>".
Finalmente, observa que el equivalente XML de <%! Cdigo %>es:
<j sp: decl ar at i on>
Cdi go
</ j sp: decl ar at i on>

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 11

Curso: "Java EE y Frameworks" 2013

Directivas JSP
Una directiva J SP afecta a la estructura general de la clase servlet. Normalmente tienen la
siguiente forma:
<%@di r ect i ve at t r i but e=" val ue" %>

Sin embargo, tambin podemos combinar mltiples selecciones de atributos para una sola
directiva, de esta forma:
<%@di r ect i ve at t r i but e1=" val ue1"
at t r i but e2=" val ue2"
. . .
at t r i but eN=" val ueN" %>

Hay dos tipos principales de directivas: page, que nos permite hacer cosas como
importar clases, personalizar la superclase del servlet, etc. e include, que nos permite
insertar un fichero dentro de la clase servlet en el momento que el fichero J SP es
traducido a un servlet. La especificacin tambin menciona la directiva taglib, que no est
soportada en J SP 1.0, pero se pretende que permita que los autores de J SP definan sus
propias etiquetas. Se espera que sea una de las principales contribuciones a J SP 1.1.
La directiva page
La directiva page nos permite definir uno o ms de los siguientes atributos sensibles a las
maysculas:
i mpor t =" package. cl ass" i mpor t =" package. cl ass1, . . . , package. cl assN"
Esto nos permite especificar los paquetes que deberan ser importados. Por ejemplo:
<%@page i mpor t =" j ava. ut i l . *" %>
El atributo import es el nico que puede aparecer mltiples veces.
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 12

Curso: "Java EE y Frameworks" 2013

cont ent Type=" MI ME- Type"
cont ent Type=" MI ME- Type; char set =Char act er - Set "

Esto especifica el tipo MIME de la salida. El valor por defecto es text/html. Por ejemplo, la
directiva: <%@ page contentType="text/plain" %> tiene el mismo valor que el scriptlet <%
response.setContentType("text/plain"); %>
i sThr eadSaf e=" t r ue| f al se"

Un valor de true (por defecto) indica un procesamiento del servlet normal, donde mltiples
peticiones pueden procesarse simultneamente con un slo ejemplar del servlet, bajo la
suposicin que del autor sincroniza las variables de ejemplar. Un valor de false indica que
el servlet debera implementar SingleThreadModel, con peticiones enviadas serialmente o
con peticiones simultneas siendo entregadas por ejemplares separados del servelt.
sessi on=" t r ue| f al se"

Un valor de true (por defecto) indica que la variable predefinida session (del tipo
HttpSession) debera unirse a la sesin existente si existe una, si no existe se debera
crear una nueva sesin para unirla. Un valor de false indica que no se usarn sesiones, y
los intentos de acceder a la variable session resultarn en errores en el momento en que
la pgina J SP sea traducida a un servlet.
buf f er =" si zekb| none"



AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 13

Curso: "Java EE y Frameworks" 2013

Esto especifica el tamao del buffer para el J spWriter out. El valor por defecto es
especfico del servidor, debera ser de al menos 8kb.
aut of l ush=" t r ue| f al se"

Un valor de true (por defecto) indica que el buffer debera descargase cuando est lleno.
Un valor de false, raramente utilizado, indica que se debe lanzar una excepcin cuando el
buffe se sobrecargue. Un valor de false es ilegal cuando usamos buffer="none".
ext ends=" package. cl ass"

Esto indica la superclase del servlet que se va a generar. Debemos usarla con extrema
precaucin, ya que el servidor podra utilizar una superclase personalizada.
i nf o=" message"

Define un string que puede usarse para ser recuperado mediante el mtodo
getServletInfo.
er r or Page=" ur l "

Especifica una pgina J SP que se debera procesar si se lanzar cualquier Throwable
pero no fuera capturado en la pgina actual.



AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 14

Curso: "Java EE y Frameworks" 2013

i sEr r or Page=" t r ue| f al se"

Indica si la pgina actual acta o no como pgina de error de otra pgina J SP. El valor por
defecto es false.
l anguage=" j ava"

En algunos momentos, esto est pensado para especificar el lenguaje a utilizar. Por
ahora, no debemos preocuparnos por l ya que java es tanto el valor por defecto como la
nica opcin legal.
La sntaxis XML para definir directivas es:
<j sp: di r ect i ve. Ti poDi r ect i va at r i but o=val or / >

Por ejemplo, el equivalente XML de:
<%@page i mpor t =" j ava. ut i l . *" %>

Es:
<j sp: di r ect i ve. page i mpor t =" j ava. ut i l . *" / >




AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 15

Curso: "Java EE y Frameworks" 2013

La directiva includeJSP
Esta directiva nos permite incluir ficheros en el momento en que la pgina J SP es
traducida a un servlet. La directiva se parece a esto:
<%@i ncl ude f i l e=" ur l r el at i va" %>

La URL especificada normalmente se interpreta como relativa a la pgina J SP a la que se
refiere, pero, al igual que las URLs relativas en general, podemos decirle al sistema que
interpreta la URL reltativa al directorio home del servidor Web empezando la URL con una
barra invertida. Los contenidos del fichero incluido son analizados como texto normal J SP,
y as pueden incluir HTML esttico, elementos de script, directivas y acciones.
Por ejemplo, muchas sites incluyen una pequea barra de navegacin en cada pgina.
Debido a los problemas con los marcos HTML, esto normalmente se implementa
mediante una pequea tabla que cruza la parte superior de la pgina o el lado izquierdo,
con el HTML repetido para cada pgina de la site.










AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 16

Curso: "Java EE y Frameworks" 2013

La directiva include es una forma natural de hacer esto, ahorrando a los desarroladores el
mantenimiento engorroso de copiar realmente el HTML en cada fichero separado.
Aqu tenemos un cdigo representativo:
<! DOCTYPE HTML PUBLI C " - / / W3C/ / DTD HTML 4. 0 Tr ansi t i onal / / EN" >
<HTML>
<HEAD>
<TI TLE>Ser vl et Tut or i al : J avaSer ver Pages ( J SP) 1. 0</ TI TLE>
<META NAME=" aut hor " CONTENT=" webmast er @somesi t e. com" >
<META NAME=" keywor ds" CONTENT=" . . . " >
<META NAME=" descr i pt i on" CONTENT=" . . . " >
<LI NK REL=STYLESHEET HREF=" Si t e- St yl es. css" TYPE=" t ext / css" >
</ HEAD>
<BODY>
<%@i ncl ude f i l e=" / navbar . ht ml " %>
<! - - Par t speci f i c t o t hi s page . . . - - >
</ BODY>
</ HTML>

Observa que como la directiva include inserta los ficheros en el momento en que la pgina
es traducida, si la barra de navegacin cambia, necesitamos re-traducir todas las pginas
J SP que la refieren.
Esto es un buen compromiso en una situacin como esta, ya que las barras de
navegacin no cambian frecuentemente, y queremos que el proceso de inclusin sea tan
eficiente como sea posible.
Si, sin embargo, los ficheros incluidos cambian de forma ms frecuente, podramos usar
la accin jsp:include en su lugar. Esto incluye el fichero en el momento en que se solicita
la pgina J SP, como se describe en la seccin 8.


AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 17

Curso: "Java EE y Frameworks" 2013


AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 18

Curso: "Java EE y Frameworks" 2013

Ejemplo: Usar Elementos de Script y Directivas
Aqu tenemos un sencillo ejemplo que muestra el uso de expresiones, scriptlets,
declaraciones y directivas J SP.
<! DOCTYPE HTML PUBLI C " - / / W3C/ / DTD HTML 4. 0 Tr ansi t i onal / / EN" >
<HTML>
<HEAD>
<TI TLE>Usi ng J avaSer ver Pages</ TI TLE>
<META NAME=" aut hor " CONTENT=" Mar t y Hal l - - hal l @apl . j hu. edu" >
<META NAME=" keywor ds"
CONTENT=" J SP, J avaSer ver Pages, ser vl et s" >
<META NAME=" descr i pt i on"
CONTENT=" A qui ck exampl e of t he f our mai n J SP t ags. " >
<LI NK REL=STYLESHEET
HREF=" My- St yl e- Sheet . css" TYPE=" t ext / css" >
</ HEAD>
<BODY BGCOLOR=" #FDF5E6" TEXT=" #000000" LI NK=" #0000EE"
VLI NK=" #551A8B" ALI NK=" #FF0000" >
<CENTER>
<t abl e BORDER=5 BGCOLOR=" #EF8429" >
<TR><TH CLASS=" TI TLE" >
Usi ng J avaSer ver Pages</ TH></ TR></ t abl e>
</ CENTER>
<P>
Some dynami c cont ent cr eat ed usi ng var i ous J SP mechani sms:
<UL>
<LI ><B>Expr essi on. </ B><BR>
Your host name: <%= r equest . get Remot eHost ( ) %>.
<LI ><B>Scr i pt l et . </ B><BR>
<%out . pr i nt l n( " At t ached GET dat a: " +
r equest . get Quer ySt r i ng( ) ) ; %>
<LI ><B>Decl ar at i on ( pl us expr essi on) . </ B><BR>
<%! pr i vat e i nt accessCount = 0; %>
Accesses t o page si nce ser ver r eboot : <%= ++accessCount %>
<LI ><B>Di r ect i ve ( pl us expr essi on) . </ B><BR>
<%@page i mpor t = " j ava. ut i l . *" %> Cur r ent dat e: <%= new Dat e( ) %>
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 19

Curso: "Java EE y Frameworks" 2013

</ UL>
</ BODY>
</ HTML>

El resultado tpico:






AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 20

Curso: "Java EE y Frameworks" 2013

Variables Predefinidas
Para simplificar el cdigo en expresiones y scriplets J SP, tenemos ocho variables
definidas automticamente, algunas veces llamadas objetos implcitos. Las variables
disponibles son: request, response, out, session, application, config, pageContext, y page.
request
Este es el HttpServletRequest asociado con la peticin, y nos permite mirar los
parmetros de la peticin (mediante getParameter), el tipo de peticin (GET, POST,
HEAD, etc.), y las cabeceras HTTP entrantes (cookies, Referer, etc.). Estrictamente
hablando, se permite que la peticin sea una subclase de ServletRequest distinta de
HttpServletRequest, si el protocolo de la peticin es distinto del HTTP. Esto casi nunca se
lleva a la prctica.
response
Este es el HttpServletResponse asociado con la respuesta al cliente. Observa que, como
el stream de salida (ver out ms abajo) tiene un buffer, es legal seleccionar los cdigos de
estado y cabeceras de respuesta, aunque no est permitido en los servlets normales una
vez que la salida ha sido enviada al cliente.
out
Este es el PrintWriter usado para enviar la salida al cliente. Sin embargo, para poder
hacer til el objeto response (ver la seccin anterior), esta es una versin con buffer de
PrintWriter llamada J spWriter. Observa que podemos ajustar el tamao del buffer, o
incluso desactivar el buffer, usando el atributo buffer de la directiva page. Esto se explic
en la Seccin 5. Tambin observa que out se usa casi exclusivamente en scriptlets ya
que las expresiones J SP obtienen un lugar en el stream de salida, y por eso raramente se
refieren explcitamente a out.
session
Este es el objeto HttpSession asociado con la peticin. Recuerda que las sesiones se
crean automticamente, por esto esta variable se une incluso si no hubiera una sesin de
referencia entrante. La nica excepcin es usar el atributo session de la directiva page
para desactivar las sesiones, en cuyo caso los intentos de referenciar la variable session
causarn un error en el momento de traducir la pgina J SP a un servlet.

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 21

Curso: "Java EE y Frameworks" 2013

application
Este es el ServletContext obtenido mediante getServletConfig().getContext().
config
Este es el objeto ServletConfig para esta pgina.
pageContext
J SP presenta una nueva clase llamada PageContext para encapsular caractersticas de
uso especficas del servidor como J spWriters de alto rendimiento. La idea es que, si
tenemos acceso a ellas a travs de esta clase en vez directamente, nuestro cdigo
seguir funcionando en motores servlet/J SP "normales".
page
Esto es slo un sinnimo de this, y no es muy til en J ava. Fue creado como situacin
para el da que el los lenguajes de script puedan incluir otros lenguajes distintos de J ava.













AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 22

Curso: "Java EE y Frameworks" 2013

Accciones
Las acciones J SP usan construcciones de sintaxis XML para controlar el comportamiento
del motor de Servlets. Podemos insertar un fichero dinmicamente, reutilizar
componentes J avaBeans, reenviar al usuario a otra pgina, o generar HTML para el plug-
in J ava. Las acciones disponibles incluyen:
Recuerda que, como en XML, los nombres de elementos y atributos son sensibles
a las maysculas.
Accin jsp:include
Esta accin nos permite insertar ficheros en una pgina que est siendo generada. La
sintaxis se parece a esto:
<j sp: i ncl ude page=" r el at i ve URL" f l ush=" t r ue" / >

Al contrario que la directiva include, que inserta el fichero en el momento de la conversin
de la pgina J SP a un Servlet, esta accin inserta el fichero en el momento en que la
pgina es solicitada. Esto se paga un poco en la eficiencia, e imposibilita a la pgina
incluida de contener cdigo J SP general (no puede seleccionar cabeceras HTTP, por
ejemplo), pero se obtiene una significante flexibilidad. Por ejemplo, aqu tenemos una
pgina J SP que inserta cuatro puntos diferentes dentro de una pgina Web "What's
New?". Cada vez que cambian las lneas de cabeceras, los autores slo tienen que
actualizar los cuatro ficheros, pero pueden dejar como estaba la pgina J SP principal.
Accin jsp:useBean
Esta accin nos permite cargar y utilizar un J avaBean en la pgina J SP. Esta es una
capacidad muy til porque nos permite utilizar la reusabilidad de las clases J ava sin
sacrificar la conveniencia de aadir J SP sobre servlets solitarios. El sintaxis ms simple
para especificar que se debera usar un Bean es:
<j sp: useBean i d=" name" cl ass=" package. cl ass" / >

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 23

Curso: "Java EE y Frameworks" 2013

Esto normalmente significa "ejemplariza un objeto de la clase especificada por class, y
nelo a una variable con el nombre especificado por id". Sin embargo, tambin podemos
especificar un atributo scope que hace que ese Bean se asocie con ms de una sola
pgina. En este caso, es til obtener referencias a los beans existentes, y la accin
jsp:useBean especifica que se ejemplarizar un nuevo objeto si no existe uno con el el
mismo nombre y mbito.
Ahora, una vez que tenemos un bean, podemos modificar sus propiedades mediante
jsp:setProperty, o usando un scriptlet y llamando a un mtodo explcitamente sobre el
objeto con el nombre de la variable especificada anteriormente mediante el atributo id.
Recuerda que con los beans, cuando decimos "este bean tiene una propiedad del tipo X
llamada foo", realmente queremos decir "Esta clase tiene un mtodo getFoo que
devuelve algo del tipo X, y otro mtodo llamado setFoo que toma un X como un
argumento".
La accin jsp:setProperty se describe con ms detalle en la siguiente seccin, pero ahora
observemos que podemos suministrar un valor explcito, dando un atributo param para
decir que el valor est derivado del parmetro de la peticin nombrado, o slo lista las
propiedades para indicar que el valor debera derivarse de los parmetros de la peticin
con el mismo nombre que la propiedad.
Leemos las propiedades existentes en una expresin o scriptlet J SP llamando al mtodo
getXxx, o ms comunmente, usando la accin jsp:getProperty.
Observa que la clase especificada por el bean debe estar en el path normal del servidor,
no en la parte reservada que obtiene la recarga automtica cuando se modifican.
Por ejemplo, en el J ava Web Server, l y todas las clases que usa deben ir en el directorio
classes o estar en un fichero J AR en el directorio lib, no en el directorio servlets.
Aqu tenemos un ejemplo muy sencillo que carga un bean y selecciona y obtiene un
sencillo parmetro String.

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 24

Curso: "Java EE y Frameworks" 2013

BeanTest.jsp
<! DOCTYPE HTML PUBLI C " - / / W3C/ / DTD HTML 4. 0 Tr ansi t i onal / / EN" >
<HTML>
<HEAD>
<TI TLE>Reusi ng J avaBeans i n J SP</ TI TLE>
<LI NK REL=STYLESHEET HREF=" My- St yl e- Sheet . css" TYPE=" t ext / css" >
</ HEAD>
<BODY>
<CENTER>
<t abl e BORDER=5>
<TR><TH CLASS=" TI TLE" >
Reusi ng J avaBeans i n J SP</ t abl e>
</ CENTER>
<P>
<j sp: useBean i d=" t est " cl ass=" hal l . Si mpl eBean" / >
<j sp: set Pr oper t y name=" t est " pr oper t y=" message" val ue=" Hel l o WWW"
/ >
<H1>Message: <I >
<j sp: get Pr oper t y name=" t est " pr oper t y=" message" / >
</ I ></ H1>
</ BODY>
</ HTML>






AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 25

Curso: "Java EE y Frameworks" 2013

SimpleBean.java
Aqu est el cdigo fuente usado para el Bean usado en la pgina BeanTest.
package hal l ;

publ i c cl ass Si mpl eBean {
pr i vat e St r i ng message = " No message speci f i ed" ;
publ i c St r i ng get Message( ) {
r et ur n( message) ;
}

publ i c voi d set Message( St r i ng message) {
t hi s. message = message;
}

}

Aqu tenemos un resultado tpico:



AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 26

Curso: "Java EE y Frameworks" 2013

Ms detalles de jsp:useBean
La forma ms sencilla de usar un Bean es usar:
<j sp: useBean i d=" name" cl ass=" package. cl ass" / >

Para cargar el Bean, luego usar jsp:setProperty y jsp:getProperty para modificar y
recuperar propiedades del bean. Sin embargo, tenemos dos opciones. Primero, podemos
usar un formato de contenedor, llamado:
<j sp: useBean . . . >
Body
</ j sp: useBean>

Para indicar que la porcin Body slo se debera ejecutar cuando el bean es
ejemplarizado por primera vez, no cuando un bean existente se encuentre y se utilice.
Como se explica abajo, los bean pueden ser compartidos, por eso no todas las
sentencias jsp:useBean resultan en la ejemplarizacin de un Bean. Segundo, adems de
id y class, hay otros tres atributos que podemos usar: scope, type, y beanName.
Atributos
id
Uso Da un nombre a la variable que referenciar el bean. Se usar un objeto id
bean anterior en lugar de ejemplarizar uno nuevo si se puede encontrar uno con el
mismo id y scope.
class
Designa el nombre completo del paquete del bean.
scope
Indica el contexto en el que el bean debera estar disponible. Hay cuatro posibles
valores: page, request, session, y application. El valor por defecto, page, indica
que el bean estar slo disponible para la pgina actual (almacenado en el
PageContext de la pgina actual). Un valor de request indica que el bean slo est
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 27

Curso: "Java EE y Frameworks" 2013

disponible para la peticin actual del cliente (almacenado en el objeto
ServletRequest). Un valor de session indica que el objeto type beanName tiempo
de vida de la HttpSession actual. Finalmente, un valor de application indica que
est disponible para todas las pginas que compartan el mismo ServletContext. La
razn de la importancia del mbito es que una entrada jsp:useBean slo resultar
en la ejemplarizacin de un nuevo objeto si no haba objetos anteriores con el
mismo id y scope. De otra forma, se usarn los objetos existentes, y cualquier
elemento jsp:setParameter u otras entradas entre las etiquetas de inicio
jsp:useBean y la etiqueta de final, sern ignoradas.
type
Especifica el tipo de la variable a la que se referir el objeto. Este debe
corresponder con el nombre de la clase o ser una superclase o un interface que
implemente la clase. Recuerda que el nombre de la variable se designa mediante
el atributo id.
beanName
Da el nombre del bean, como lo suministraramos en el mtodo instantiate de
Beans. Esta permitido suministrar un type y un beanName, y omitir el atributo
class.









AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 28

Curso: "Java EE y Frameworks" 2013

Accin jsp:setProperty
Usamos jsp:setProperty para obtener valores de propiedades de los beans que se han
referenciado anteriormente. Podemos hacer esto en dos contextos. Primero, podemos
usar antes jsp:setProperty, pero fuera de un elemento jsp:useBean, de esta forma:
<j sp: useBean i d=" myName" . . . / >
. . .
<j sp: set Pr oper t y name=" myName" pr oper t y=" somePr oper t y" . . . / >

En este caso, el jsp:setProperty se ejecuta sin importar si se ha ejemplarizado un nuevo
bean o se ha encontrado uno ya existente. Un segundo contexto en el que jsp:setProperty
puede aparecer dentro del cuerpo de un elemento jsp:useBean, de esta forma:
<j sp: useBean i d=" myName" . . . >
. . .
<j sp: set Pr oper t y name=" myName" pr oper t y=" somePr oper t y" . . . / >
</ j sp: useBean>

Aqu, el jsp:setProperty slo se ejecuta si se ha ejemplarizado un nuevo objeto, no si se
encontr uno ya existente.
Aqu tenemos los cuatro atributos posibles de jsp:setProperty:
Atributos
name
Este atibuto requerido designa el bean cuya propiedad va a ser seleccionada.
El elemento jsp:useBean debe aparecer antes del elemento jsp:setProperty.
property
Este atributo requerido indica la propiedad que queremos seleccionar. Sin
embargo, hay un caso especial: un valor de "*" significa que todos los parmetros
de la peticin cuyos nombres correspondan con nombres de propiedades del
Bean sern pasados a los mtodos de seleccin apropiados.
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 29

Curso: "Java EE y Frameworks" 2013

Value
Este atributo opcional especifica el valor para la propiedad. Los valores string son
convertidos automticamente a nmeros, boolean, Boolean, byte, Byte, char, y
Character mediante el mtodo estndard valueOf en la fuente o la clase
envolvente. Por ejemplo, un valor de "true" para una propiedad boolean o Boolean
ser convertido mediante Boolean.valueOf, y un valor de "42" para una propiedad
int o Integer ser convertido con Integer.valueOf. No podemos usar value y param
juntos, pero si est permitido no usar ninguna.
param
Este parmetro opcional designa el parmetro de la peticin del que se debera
derivar la propiedad. Si la peticin actual no tiene dicho parmetro, no se hace
nada: el sistema no pasa null al mtodo seleccionador de la propiedad. As,
podemos dejar que el bean suministre los valores por defecto,
sobreescribiendolos slo cuando el parmetro dice que lo haga. Por ejemplo, el
siguiente cdigo dice "selecciona el valor de la propiedad numberOfItems a
cualquier valor que tenga el permetro numItems de la peticin, si existe dicho
parmetro, si no existe no se hace nada"
<j sp: set Pr oper t y name=" or der Bean" pr oper t y=" number Of I t ems"
par am=" numI t ems" / >

Si omitimos tanto value como param, es lo mismo que si suministramos un nombre
de parmetro que corresponde con el nombre de una propiedad.
Podremos tomar esta idea de automaticidad usando el parmetro de la peticin
cuyo nombre corresponde con la propiedad suministrada un nombre de propiedad
de "*" y omitir tanto value como param. En este caso, el servidor itera sobre las
propiedades disponibles y los parmetros de la peticin, correspondiendo aquellas
con nombres idnticos.

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 30

Curso: "Java EE y Frameworks" 2013

Aqu tenemos un ejemplo que usa un bean para crear una tabla de nmeros primos. Si
hay un parmetro llamado numDigits en los datos de la peticin, se pasa dentro del bean
a la propiedad numDigits. Al igual que en numPrimes.
JspPrimes.jsp
<! DOCTYPE HTML PUBLI C " - / / W3C/ / DTD HTML 4. 0 Tr ansi t i onal / / EN" >
<HTML>
<HEAD>
<TI TLE>Reusi ng J avaBeans i n J SP</ TI TLE>
<LI NK REL=STYLESHEET HREF=" My- St yl e- Sheet . css" TYPE=" t ext / css" >
</ HEAD>
<BODY>
<CENTER>
<t abl e BORDER=5>
<TR><TH CLASS=" TI TLE" >
Reusi ng J avaBeans i n J SP</ TH></ TR></ t abl e>
</ CENTER>
<P>
<j sp: useBean i d=" pr i met abl e" cl ass=" hal l . Number edPr i mes" / >
<j sp: set Pr oper t y name=" pr i met abl e" pr oper t y=" numDi gi t s" / >
<j sp: set Pr oper t y name=" pr i met abl e" pr oper t y=" numPr i mes" / >
Some <j sp: get Pr oper t y name=" pr i met abl e" pr oper t y=" numDi gi t s" / >
di gi t pr i mes:
<j sp: get Pr oper t y name=" pr i met abl e" pr oper t y=" number edLi st " / >
</ BODY>
</ HTML>






AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 31

Curso: "Java EE y Frameworks" 2013


AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 32

Curso: "Java EE y Frameworks" 2013

Aqu tenemos un resultado tpico:










AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 33

Curso: "Java EE y Frameworks" 2013

Accin jsp:getProperty
Este elemento recupera el valor de una propiedad del bean, lo convierte a un string, e
inserta el valor en la salida. Los dos atributos requeridos son name, el nombre de un bean
referenciado anteriormente mediante jsp:useBean, y property, la propiedad cuyo valor
debera ser insertado.
Aqu tenemos un ejemplo:
<j sp: useBean i d=" i t emBean" . . . / >
. . .
<UL>
<LI >Number of i t ems:
<j sp: get Pr oper t y name=" i t emBean" pr oper t y=" numI t ems" / >
<LI >Cost of each:
<j sp: get Pr oper t y name=" i t emBean" pr oper t y=" uni t Cost " / >
</ UL>

Accin jsp:forward
Esta accin nos permite reenviar la peticin a otra pgina. Tiene un slo atributo, page,
que debera consistir en una URL relativa. Este podra ser un valor esttico, o podra ser
calculado en el momento de la peticin, como en estos dos ejemplos:
<j sp: f or war d page=" / ut i l s/ er r or Repor t er . j sp" / >
<j sp: f or war d page=" <%= someJ avaExpr essi on %>" / >

Accin jsp:plugin
Esta accin nos permite insertar un elemento OBJ ECT o EMBED especfico del
navegador para especificar que el navegador debera ejecutar un applet usando el Plug-in
J ava.



AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 34

Curso: "Java EE y Frameworks" 2013

Convenciones de Comentarios y Caracteres de Escape
Hay un pequeo nmero de construcciones especiales que podemos usar en varios casos
para insertar comentarios o caracteres que de otra forma seran tratados especialmente:
Sintaxis Propsito
<%--comment --%> Un comentario J SP. Ignorado por el
traductor J SP-a-scriptlet. Cualquier
elemento de script, directivas o acciones
embebidas son ignorados.

<!--comment --> Un comentario HTML. Se pasa al HTML
resultante. Cualquier elemento de script,
directivas o acciones embebidas se
ejecutan normalmente.

<\% Usado en plantillas de texto (HTML
esttico) donde realmente queremos "<%".
%\> Usado en elementos de script donde
realmente queremos "%>".

\' Una sola comilla en un atributo que usa
comillas simples. Sin embargo, recuerda
que podemos usar comillas dobles o
simples, y que otros tipos de comillas sern
caracteres regulares.

\" Una doble comilla un un atributo que usa
comillas dobles. Sin embargo, recuerda
que podemos usar comillas dobles o
simples, y que otros tipos de comillas sern
caracteres regulares.

%\> %>en un atributo.
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 35

Curso: "Java EE y Frameworks" 2013

<\% <% en un atributo.


Ciclo de vida de una pgina JSP.
Para poder acceder desde un cliente a una pgina jsp, es preciso que se encuentre
almacenada en un servidor J 2EE compatible. Recordar que un servidor J 2EE compatible
tiene que incluir un contenedor web.
contenedor web =contenedor servlet +contenedor
jsp

Se utilizar, al igual que se hizo para el desarrollo de servlets, Tomcat.
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 36

Curso: "Java EE y Frameworks" 2013










AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 37

Curso: "Java EE y Frameworks" 2013

Etapas realizadas en el contenedor de jsps:
Traduccin de la jsp y generacin de un cdigo J ava que es un servlet.
Compilacin del servlet asociado a la jsp.
Etapas realizadas en el contenedor de servlets:
Instanciacin del servlet y carga en memoria.

Resumen
El servlet asociado a una jsp es un servlet por lo siguiente: implementa la interface
javax.servlet.jsp.HttpJ spPage, que es subinterface de J spPage del mismo paquete, que, a
su vez, es subinterface de javax.servlet.Servlet.
Como todo servlet se caracteriza por implementar la interface Servlet, queda asegurado
que el cdigo J ava generado en la traduccin de la jsp es un servlet. Si se consulta la API
J 2EE, se observa que la interface HttpJ spPage declara el mtodo
_jspService(HttpServletRequest request, HttpServletResponse response).
La interface J spPage declara los mtodos jspInit() y jspDestroy().
Estos tres mtodos constituyen el ciclo de vida de una jsp y son similares al init(..),
service(..) y destroy() del ciclo de vida de un servlet.








Enva tus consultas a los foros!
Aqu es cuando debes sacarte todas las dudas
haciendo consultas en los foros
correspondientes
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | JSP 38

Potrebbero piacerti anche