54
Aplicaciones Web de Servidor Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

Embed Size (px)

Citation preview

Page 1: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

Aplicaciones Web de ServidorAplicaciones Web de Servidor

JavaServer Pages (JSP)

1 y 3 de Abril de 2009

Page 2: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

2

La especificación JSP 1.2 – ¿Qué es una JSP?La 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 “<%” y terminan con “%>. <HTML>

<HEAD>

<TITLE>Ejemplo Hola mundo en una JSP</TITLE>

</HEAD>

<BODY>

<% out.println(“Hola mundo desde una JSP”); %>

</BODY>

</HTML>

Page 3: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

3

La especificación JSP 1.2 – Funcionamiento.La especificación JSP 1.2 – Funcionamiento.

Cliente Ligero(Navegador

Cliente Ligero(Navegador

Servidor Web Servidor Web Motor de Servlet´s Motor de Servlet´s Motor de JSP´s Motor de JSP´s

1 Petición HolaMundo.jsp

2 Petición HolaMundo.jsp

3 Se mapea la petición a unfichero JSP y se pasa el control al motor de JSP´s

4 Se compila el ficheroHolaMundo.jsp en un Servlet.

5 Se transfiere el controlal servlet HolaMundo.class6 El servlet HolaMundo

genera una respuesta7 Se envía la respuesta al cliente

9 Petición HolaMundo.jsp 10 Se mapea la petición a un fichero JSP y se pasaEl control al motor de JSP´s

11 Se transfiere el controlal servlet HolaMundo.class12 El servlet HolaMundo

genera una respuesta13 Se envía la respuestaal cliente

8 reloadHolaMundo.jsp

Page 4: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

4

Elementos JSPElementos JSPProyecto JSP1Proyecto JSP1

Page 5: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

5

La especificación JSP 1.2 – Elementos de script JSP y su La especificación JSP 1.2 – Elementos de script JSP y su notación XML.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:1. Expresiones de la forma <%= expresión %> que son evaluadas e

insertadas en la salida. 2. Scriptlets de la forma <% codigo %> que se insertan dentro del

método service() del servlet. 3. Declaraciones de la forma <%! codigo %> que se insertan en el

cuerpo de la clase del servlet, fuera de cualquier método existente. 4. Directivas de la forma <%@ directive atributo1="valor1"...

atributoN="valorN" %> que afectan a la estructura general del servlet generado.

5. Acciones de la forma <jsp:accion /> que permiten realizar operaciones como acceso a JavaBeans, inclusión de paginas,...

Page 6: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

6

La especificación JSP 1.2 – Expresiones JSP.La 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:

<%= expresión Java %> 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: <%= new java.util.Date() %> Notación XML:

<jsp:expression> Expresión Java </jsp:expression>

Page 7: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

7

La especificación JSP 1.2 – Ejemplo 1:ExpresionesLa especificación JSP 1.2 – Ejemplo 1:Expresiones

Fichero Expresiones.jsp<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE>Ejemplo1: Expresiones</TITLE></HEAD>

<BODY><H2>Ejemplos de expresiones JSP</H2><UL> <LI>Hora actual en el servidor: <%= new java.util.Date() %> <LI>Nombre del host: <%= request.getRemoteHost() %> <LI>Identificador de sesion: <%= session.getId() %> <LI>Valor del parametro testParam: <%= request.getParameter("testParam") %></UL></BODY></HTML>

Page 8: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

8

La especificación JSP 1.2 – Scriptlets JSP.La 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:

<% Código Java %> 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: <jsp:scriptlet> Código </jsp:scriptlet>

Page 9: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

9

La especificación JSP 1.2 – Ejemplo 2: Scriplets JSP.La especificación JSP 1.2 – Ejemplo 2: Scriplets JSP.

Fichero BGColor.jsp<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD> <TITLE>Color de Fondo</TITLE></HEAD>

<%String bgColor = request.getParameter("bgColor");boolean hasExplicitColor;if (bgColor != null) { hasExplicitColor = true;} else { hasExplicitColor = false; bgColor = "WHITE";}%><BODY BGCOLOR="<%= bgColor %>"><H2 ALIGN="CENTER">Color de Fondo</H2>

Page 10: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

10

La especificación JSP 1.2 – Ejemplo 2: Scriplets JSP La especificación JSP 1.2 – Ejemplo 2: Scriplets JSP (continuación).(continuación).

Fichero BGColor.jsp<%if (hasExplicitColor) { out.println(“Establecido el color de fondo:” + bgColor + “.”);} else { out.println(“Usando los colores de fondo por defecto.”);}%>

</BODY></HTML>

Page 11: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

11

La especificación JSP 1.2 – Declaraciones JSP.La 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:

<%! Código Java%> Como las declaraciones no generan ninguna salida, normalmente

se usan en conjunción con expresiones JSP o Scriptlets.

Notación XML: <jsp:declaration>Código</jsp:declaration>

Page 12: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

12

La especificación JSP 1.2 – Ejemplo 3: Declaraciones La especificación JSP 1.2 – Ejemplo 3: Declaraciones JSP.JSP.

Fichero ContadorDeAccesos.jsp<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE>Ejemplo3: Declaraciones JSP</TITLE></HEAD>

<BODY><H1>Declaraciones JSP</H1>

<%! private int accessCount = 0; %><H2>Número de accesos al servidor desde que se inició: <%= ++accessCount %></H2>

</BODY></HTML>

Page 13: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

13

La especificación JSP 1.2 – Comentarios JSP.La especificación JSP 1.2 – Comentarios JSP.

Comentarios ocultos JSP: Estos comentarios no son visibles en la página generada y tienen la forma:

<%-- texto --%>

Comentarios visibles JSP: Estos comentarios son visibles en la página generada, incluso se pueden mezclar con expresiones JSP:

<!–- texto [<%=expresion JSP%>] -->

Page 14: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

14

Directivas JSPDirectivas JSP

Page 15: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

15

La especificación JSP 1.2 – Directivas JSP.La 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:

<%@ directive atributo1="valor1" atributo2="valor2" ... atributoN="valorN" %>

NOTACION XML:<jsp:directive.TIPO_DE_DIRECTIVA atributo1="valor1" atributo2="valor2" ...

atributoN="valorN“ />

Hay tres tipos de directivas: 1. page, que nos permite hacer cosas como importar clases, personalizar

la superclase del servlet, establecer el tipo de contenido, etc.2. include, que nos permite insertar un fichero dentro de la clase servlet

en el momento que el fichero JSP es traducido a un servlet. 3. taglib, que nos permite definir etiquetas personalizadas.

Page 16: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

16

La especificación JSP 1.2 – Directiva page.La especificación JSP 1.2 – Directiva page.

La directiva page dirige al motor Servlet´s 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:<%@ page [import=“{paquete.class | paquete.*},…”]

[session=“true|false”] [contentType=“tipoMime”[;charset=Character-Set]” |

“text/html;charset=ISO-8859-1”][pageEncoding="characterSet | ISO-8859-1“][errorPage=“URL”][isErrorPage=“true|false”] [isThreadSafe=“true|false”] [language=“java”] [extends=“paquete.class”] [buffer=“none”|8kb|sizekb”] [autoFlush=“true|false”][info=“texto”]

%>

Page 17: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

17

La especificación JSP 1.2 – Directiva page. Atributo La especificación JSP 1.2 – Directiva page. Atributo import.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: <%@ page import=“paquete.clase”%><%@ page import=“paquete.clase1, ..., paquete.claseN”%>

EL atributo import es el único que puede aparecer más de una vez dentro de una JSP.

Page 18: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

18

La especificación JSP 1.2 – Ejemplo 1: Directiva page.La especificación JSP 1.2 – Ejemplo 1: Directiva page.

Fichero AtributoImport.jsp<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD> <TITLE>Ejemplo1: Directiva page. Atributo import</TITLE></HEAD>

<BODY><H2>Ejemplo1: Directiva page. Atributo import </H2><%@ page import="java.util.*,servletsyjsps.*" %>

<%-- Declaraciones JSP --%><%!private String randomID() { int num = (int)(Math.random()*10000000.0); return("id" + num);}

private final String NO_VALUE = "<I>No Value</I>";%>

Page 19: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

19

La especificación JSP 1.2 – Ejemplo 1: Directiva page La especificación JSP 1.2 – Ejemplo 1: Directiva page (continuación).(continuación).

Fichero AtributoImport.jsp<%-- Scriptlet JSP --%><%Cookie[] cookies = request.getCookies();String oldID = ServletUtilities.getCookieValue(cookies, "userID", NO_VALUE);String newID;if (oldID.equals(NO_VALUE)) { newID = randomID();} else { newID = oldID;}LongLivedCookie cookie = new LongLivedCookie("userID", newID);response.addCookie(cookie);%>

<%-- Expresiones JSP --%>La última vez que se accedió a esta página fue <%= new Date() %> con un id de usuario <%= oldID %>.</BODY></HTML>

Page 20: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

20

La especificación JSP 1.2 – Directiva page. Atributo La especificación JSP 1.2 – Directiva page. Atributo session.session.

El atributo session indica si la página JSP participa o no en una sesión HTTP.

El atributo puede tomar los valores:<%@page session=“true|false” %>

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.

Page 21: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

21

La especificación JSP 1.2 – Directiva page. Atributo La especificación JSP 1.2 – Directiva page. Atributo contentType.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: <%page contentType=“tipoMime”[;charset=Character-Set]” %>

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

Page 22: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

22

La especificación JSP 1.2 – Ejemplo 2: Directiva page.La especificación JSP 1.2 – Ejemplo 2: Directiva page.

Fichero Excel.jsp<%@ page contentType="application/vnd.ms-excel" %><%-- Hay que poner tabuladores entre los datos no espacios. --%>1997 1998 1999 2000 2001 (Anticipated)12.3 13.4 14.5 15.6 16.7

Page 23: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

23

La especificación JSP 1.2 – Directiva page. Atributo La especificación JSP 1.2 – Directiva page. Atributo pageEncoding.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: <%@ page pageEncoding="characterSet | ISO-8859-1" %>

El valor por defecto es ISO-8859-1

Page 24: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

24

La especificación JSP 1.2 – Directiva page. Atributos La especificación JSP 1.2 – Directiva page. Atributos errorPage, isErrorPage.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:

<%@page isErrorPage=“true|false” %>

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

Page 25: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

25

La especificación JSP 1.2 – Ejemplo 3: Directiva page.La especificación JSP 1.2 – Ejemplo 3: Directiva page.

Fichero Velocidad.jsp<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD> <TITLE>Ejemplo 3: Directiva page</TITLE></HEAD><BODY><%@ page errorPage=“VelocidadError.jsp" %><%! // Observa que se lanzará un excepcion NumberFormatException si el valor es nulo o// esta mal formateadoprivate double toDouble(String value) { return(Double.valueOf(value).doubleValue());}%><% double espacio = toDouble(request.getParameter(“espacio”)); double tiempo = toDouble(request.getParameter(“tiempo”));double speed = espacio/tiempo;%>

Page 26: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

26

La especificación JSP 1.2 – Ejemplo 3: Directiva page La especificación JSP 1.2 – Ejemplo 3: Directiva page (continuación).(continuación).

Fichero Velocidad.jsp<UL> <LI>Espacio: <%= espacio %>. <LI>Tiempo: <%= tiempo %>. <LI>Velocidad: <%= speed %>.</UL>

</BODY></HTML>

Page 27: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

27

La especificación JSP 1.2 – Ejemplo 3: Directiva page La especificación JSP 1.2 – Ejemplo 3: Directiva page (continuación).(continuación).

Fichero VelocidadError.jsp<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE>Página de error</TITLE></HEAD>

<BODY>

<%@ page isErrorPage="true" %>

<TABLE BORDER=5 ALIGN="CENTER"> <TR><TH CLASS="TITLE"> Error al calcular la velocidad</TABLE><P>Hay un error en la página Velocidad.jsp:<I><%= exception %></I>. <PRE><% exception.printStackTrace(new java.io.PrintWriter(out)); %></PRE>

</BODY></HTML>

Page 28: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

28

La especificación JSP 1.2 – Directiva page. Atributo La especificación JSP 1.2 – Directiva page. Atributo extends.extends.

El atributo extends indica el nombre, totalmente cualificado, de la superclase del servlet que resulta de compilar la página JSP.

<%@ page extends=“paquete.class” %>

Sun recomienda que usemos este atributo con cautela, ya puede limitar la habilidad del motor del JSP.

Page 29: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

29

La especificación JSP 1.2 – Directiva include.La 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:

<%@ include file=“relativeURL” %>

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.

Page 30: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

30

La especificación JSP 1.2 – Ejemplo 1: Directiva include.La especificación JSP 1.2 – Ejemplo 1: Directiva include.

Fichero Velocidad.jsp<html>

<head>

<title>Ejemplo de un include</title>

</head>

<body bgcolor="white">

<font color="blue">

Fecha y hora actual: <%@ include file=“Date.jsp" %>

</font>

</body>

</html>

Fichero Date.jsp<%@ page import="java.util.*" %>

<%= (new Date() ).toString() %>

Page 31: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

31

La especificación JSP 1.2 – Directiva taglib. La 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

Page 32: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

32

Objetos ImplícitosObjetos ImplícitosProyecto JSP2Proyecto JSP2

Page 33: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

33

La especificación JSP 1.2 – Objetos implícitos en una La especificación JSP 1.2 – Objetos implícitos en una JSP. JSP.

Para simplificar el código en las expresiones y scriplets JSP, tenemos 9 variables definidas automáticamente:

1. request.2. response.3. out.4. session.5. application. 6. config.7. pageContext.8. page. 9. exception

Estas variables reciben el nombre de Objetos implícitos en una JSP.

Page 34: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

34

La especificación JSP 1.2 – Objetos implícitos en una La especificación JSP 1.2 – Objetos implícitos en una JSP. JSP.

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

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

Page 35: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

35

La especificación JSP 1.2 – Objetos implícitos en una La especificación JSP 1.2 – Objetos implícitos en una JSP.JSP.

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

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

Page 36: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

36

La especificación JSP 1.2 – Objetos implícitos en una La especificación JSP 1.2 – Objetos implícitos en una JSP.JSP.

5. application:Es el objeto de la clase ServletContext obtenido mediante:

getServletConfig().getContext()6. config:

Es el objeto de la clase ServletConfig para la página actual.

7. pageContext:Es el objeto de la clase PageContext. Este objeto es usado por el motor

de Servlet´s para administrar características como páginas de error y los parámetros para hacer include o forward de páginas.

8. exception:Es un objeto de la clase Throwable. Solo se crea en el caso en el que

usemos la directiva: <%@page ErrorPage=“true”%>

Page 37: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

37

JavaBeans y JSPJavaBeans y JSPProyecto JSP2Proyecto JSP2

Page 38: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

38

La especificación JSP 1.2 – JavaBeans y JSP´s.La especificación JSP 1.2 – JavaBeans y JSP´s.

Las acciones que restan hacen referencia a la reutilización de componentes JavaBeans.

Características de un JavaBean: 1. 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.

2. Una clase Bean no debería tener variables de instancia públicas.

3. En la clase Bean tienen que aparecer métodos getXxx/setXxx para establecer u obtener los valores de sus propiedades.

Page 39: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

39

La especificación JSP 1.2 – Acción useBean. La especificación JSP 1.2 – Acción useBean.

La acción <jsp:useBean> 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:

<jsp:useBean id="nombre" class="paquete.clase" />

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 jsp:useBean especifica que se instanciará un nuevo objeto si no existe uno con el mismo nombre y ámbito.

Page 40: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

40

La especificación JSP 1.2 – Acción useBean.La especificación JSP 1.2 – Acción useBean.

La sintaxis completa de la acción <jsp:useBean> es: <jsp:useBean id=“nombreDeInstanciaDelBean"    

scope="page|request|session|application" {

class="paquete.clase" [ type="paquete.clase" ] |beanName="{paquete.clase | %= expression %}"       

type="paquete.clase" |    type="paquete.clase"

} { /> | > otros elementos

</jsp:useBean> }

Page 41: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

41

La especificación JSP 1.2 – Acción useBean. Atributos.La 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="page|request|session|application" 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.

Page 42: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

42

La especificación JSP 1.2 – Acción useBean. Atributos.La 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.

Page 43: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

43

La especificación JSP 1.2 – Acción setProperty. La especificación JSP 1.2 – Acción setProperty.

Usamos jsp:setProperty para establecer los valores de las propiedades de los beans que se han referenciado anteriormente con la acción jsp:useBean. Además valor de id en jsp:useBean debe coincidir con el valor de name en jsp:setProperty. La sintaxis completa de la acción es: <jsp:setProperty name="nombreDeInstanciaDelBean "

{    property="*" |property=“nombrePropiedad”[param=“nombreParametro"]|property=“nombrePropiedad”

value="{stringLiteral | %= expresion %}" } />

Page 44: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

44

La especificación JSP 1.2 – Acción setProperty. La especificación JSP 1.2 – Acción setProperty. Atributos.Atributos.

El atributo name designa el bean cuya propiedad va a ser establecida. El elemento jsp:useBean debe aparecer antes del elemento jsp:setProperty.

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.

Page 45: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

45

La especificación JSP 1.2 – Acción setProperty. La especificación JSP 1.2 – Acción setProperty. Atributos.Atributos.

property=“nombrePropiedad” [param=“nombreParametro"]

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.

property=“nombrePropiedad” 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.

Page 46: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

46

La especificación JSP 1.2 – Acción getProperty.La especificación JSP 1.2 – Acción getProperty.

La acción jsp:getProperty 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 jsp:useBean para instanciar o localizar el bean. La sintaxis completa de la acción es:

<jsp:getProperty name=" nombreDeInstanciaDelBean" property=" nombrePropiedad " />

Page 47: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

47

La especificación JSP 1.2 – Acción getProperty. La especificación JSP 1.2 – Acción getProperty. Atributos.Atributos.

El atributo name designa el bean cuya propiedad va a ser seleccionada. El elemento jsp:useBean debe aparecer antes del elemento jsp:setProperty y el valor de id en jsp:useBean debe coincidir con el valor de name en jsp:setProperty.

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.

Page 48: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

48

La especificación JSP 1.2 – Ejemplo 1: StringBean.La especificación JSP 1.2 – Ejemplo 1: StringBean.

Fichero StringBean.javapackage jsps;

public class StringBean { private String mensaje = “Mensaje vacio";

public String getMensaje() { return(mensaje); }

public void setMensaje(String mensaje) { this.mensaje = mensaje; }}

Page 49: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

49

La especificación JSP 1.2 – Ejemplo 1: StringBean.La especificación JSP 1.2 – Ejemplo 1: StringBean.

Fichero StringBean.jsp<html> <head> <title>Ejemplo 1: StringBean</title> </head> <body> <jsp:useBean id="stringBean" class="jsps.StringBean" /> <ol> <li>Valor inicial (getProperty): <i><jsp:getProperty name="stringBean" property="mensaje" /></i></li> <li>Valor inicial (Expresion JSP): <i><%= stringBean.getMensaje()%></i></li> <jsp:setProperty name="stringBean" property="mensaje" value="Valor actualizado con setProperty" /> <li>Valor después de establecer la propiedad con setProperty: <i><jsp:getProperty name="stringBean" property="mensaje" /></i></li> </ol> </body></html>

Page 50: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

50

La especificación JSP 1.2 – Ejemplo 2: SaleEntry.La especificación JSP 1.2 – Ejemplo 2: SaleEntry.

Fichero SaleEntry.javapackage jsps;public 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;}

Page 51: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

51

La especificación JSP 1.2 – Ejemplo 2: SaleEntry.La 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.99*getDiscountCode(); } else { cost = -9999; } return(roundToPennies(cost)); } private double roundToPennies(double cost) {return(Math.floor(cost*100)/100.0);} public double getTotalCost() {return(getItemCost() * getNumItems());}}

Page 52: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

52

La especificación JSP 1.2 – Ejemplo 2: SaleEntry1.La especificación JSP 1.2 – Ejemplo 2: SaleEntry1.

Fichero SaleEntry1.jsp<html> <head><title>Ejemplo 2: SaleEntry1</title></head> <jsp:useBean id="entry" class="jsps.SaleEntry" /> <jsp:setProperty name="entry" property="itemID" value='<%=request.getParameter("itemID") %>' /> <% int numItemsOrdered = 1; try { numItemsOrdered = Integer.parseInt(request.getParameter("numItems")); } catch(NumberFormatException nfe) {} %> <jsp:setProperty name="entry" property="numItems" value='<%= numItemsOrdered %>' />

<% double discountCode = 1.0; try { String discountString = request.getParameter("discountCode"); discountCode = Double.valueOf(discountString).doubleValue(); } catch(NumberFormatException nfe) {} %>

Page 53: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

53

La especificación JSP 1.2 – Ejemplo 2: SaleEntry1 La especificación JSP 1.2 – Ejemplo 2: SaleEntry1 (continuación).(continuación).

Fichero SaleEntry1.jsp <jsp:setProperty name="entry" property="discountCode" value='<%= discountCode %>' />

<body> <br> <table align="center" border="1"> <tr class="colored"> <th>Item ID</th> <th>Unit Price</th> <th>Number Ordered</th> <th>Total Price</th></tr> <tr align="right"> <td><jsp:getProperty name="entry" property="itemID“ /></td> <td>$<jsp:getProperty name="entry" property="itemCost" /></td> <td><jsp:getProperty name="entry" property="numItems" /></td> <td>$<jsp:getProperty name="entry" property="totalCost" /></td></tr> </table> </body> </html>

Page 54: Aplicaciones Web de Servidor JavaServer Pages (JSP) 1 y 3 de Abril de 2009

54

La especificación JSP 1.2 – Ejemplo 2: SaleEntry2.La especificación JSP 1.2 – Ejemplo 2: SaleEntry2.

Fichero SaleEntry2.jsp<html> <head><title>Ejemplo2: SaleEntry2</title></head> <body> <jsp:useBean id="entry" class="jsps.SaleEntry" /> <jsp:setProperty name="entry" property="*" /> <br> <table align="center" border="1"> <tr class="colored"> <th>Item ID</th> <th>Unit Price</th> <th>Number Ordered</th> <th>Total Price</th></tr> <tr align="right">

<td><jsp:getProperty name="entry" property="itemID“ /></td> <td>$<jsp:getProperty name="entry" property="itemCost" /></td> <td><jsp:getProperty name="entry" property="numItems" /></td> <td>$<jsp:getProperty name="entry" property="totalCost" /></td></tr>

</table> </body></html>