Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y...

34
Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jes ´ us Arias Fisteus // [email protected] Aplicaciones Web con Servlets y JSP (II)– p. 1

Transcript of Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y...

Page 1: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Aplicaciones Web con Servlets y JSP (II)

Aplicaciones Web (Curso 2014/2015)

Jesus Arias Fisteus // [email protected]

Aplicaciones Web con Servlets y JSP (II)– p. 1

Page 2: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Java Server Pages (JSP)

Aplicaciones Web con Servlets y JSP (II)– p. 2

Page 3: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Introducción

Un servlet no resulta adecuado para presentación(escribir directamente la salida HTML) porque elcódigo HTML está entremezclado dentro delcódigo Java:

Incómodo cambiar el código HTML.

No facilita la división de tareas entrediseñadores de HTML y programadores.

Alternativa: escribir directamente el código HTMLcon poco código Java incrustado.

Aplicaciones Web con Servlets y JSP (II)– p. 3

Page 4: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Introducción

Una página JSP es una página HTML queincorpora ciertos elementos dinámicos: etiquetasespeciales y pequeños fragmentos de código.

El código HTML aparece a la salida sinmodificaciones.

Los elementos dinámicos se evalúan o ejecutanen el servidor en el momento de construcciónde la respuesta.

Aplicaciones Web con Servlets y JSP (II)– p. 4

Page 5: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

JSP ejemplo

<%@ page language='java' contentType='text/html;charset=utf-8'%>

<%@ page import='java.util.Date' %>

<!DOCTYPE html>

<html>

<head>

<title>Hola Mundo</title>

</head>

<body>

<p>Hola, esto es una página JSP.</p>

<p>La hora del servidor es <%= new Date() %></p>

</body>

</html>

Aplicaciones Web con Servlets y JSP (II)– p. 5

Page 6: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

JSP ejemplo: documento recibido por

el cliente

<!DOCTYPE html>

<html>

<head>

<title>Hola Mundo</title>

</head>

<body>

<p>Hola, esto es una página JSP.</p>

<p>La hora del servidor es Wed Nov 06 13:25:34 CET 2002</p>

</body>

</html>

Aplicaciones Web con Servlets y JSP (II)– p. 6

Page 7: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

JSP como servlet

Aunque no es estrictamente obligatorio, loscontenedores de servlets suelen transformar laspáginas JSP en el código fuente de servlets, quedespués se compilan y ejecutan.

Aplicaciones Web con Servlets y JSP (II)– p. 7

Page 8: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

JSP ejemplo transformado en un ser-

vlet

(...)

out.write("<!DOCTYPE html>\n ");

out.write("<html>\n ");

out.write(" <head>\n ");

out.write(" <title>Hola Mundo</title>\n ");

out.write(" </head>\n ");

out.write(" <body>\n <p>Hola, esto es una página JSP.</p>\n ");

out.write(" <p>La hora del servidor es ");

out.print( new Date() );

out.write("</p>\n ");

out.write(" </body>\n");

out.write("</html>\n");

(...)

Aplicaciones Web con Servlets y JSP (II)– p. 8

Page 9: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Comentarios en JSP

Los comentarios JSP no se envían al cliente, alcontrario que los comentarios HTML.

<%-- Esto es un comentario JSP --%>

Aplicaciones Web con Servlets y JSP (II)– p. 9

Page 10: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Directivas JSP: page

Todas las páginas JSP deberían incluirla.Atributos habituales:

language: lenguaje de programación (javapor defecto).

contenttype: tipo de contenido de la página(text/html por defecto).

isErrorPage: indica si es una página de error(false por defecto).

errorPage: página a la que dirigirse si ocurreuna excepción procesando esta página.

<%@ page language='java' contentType='text/html'

isErrorPage='false' errorPage='error.jsp' %>

Aplicaciones Web con Servlets y JSP (II)– p. 10

Page 11: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Otras directivas JSP

include: permite incluir directamente el códigode otro fichero en el punto en que aparezca ladirectiva.

import: permite importar clases Java utilizadasen la página JSP.

<%@ include file='footer.html' %>

<%@ page import='java.util.*' %>

Aplicaciones Web con Servlets y JSP (II)– p. 11

Page 12: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Scriptlets

Permiten incrustar código escrito en otro lenguajede programación (normalmente Java):

<%= expresion %>: evalúa la expresión ymuestra el resultado en la página.

<% sentencias %>: ejecuta las sentencias,sin mostrar nada en la página.

<%-- los siguientes scriptlets son equivalentes --%>

<%= user.getName() %>

<% out.println(user.getName()); %>

Aplicaciones Web con Servlets y JSP (II)– p. 12

Page 13: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Scriptlets: ejemplo

<table>

<tr><th>Product</th><th>Price</th></tr>

<%

for (int i=0; i<catalog.length; i++ ) {

ProductInfo product = catalog[i];

%>

<tr>

<td>

<a href='<%= response.encodeURL("view?id="

+ product.getId()) %>'>

<%= product.getShortName() %>

</a>

</td>

<td><%= product.getPrice() %> Euros</td>

</tr>

<% } %>

</table>

Aplicaciones Web con Servlets y JSP (II)– p. 13

Page 14: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Variables implícitas

JSP proporciona automáticamente una serie devariables adecuadamente declaradas einicializadas, utilizables por el programador:

javax.servlet.ServletContext application

javax.servlet.ServletConfig config

javax.servlet.jsp.JspWriter out

javax.servlet.jsp.PageContext pageContext

javax.servlet.http.HttpServletRequest request

javax.servlet.http.HttpServletResponse response

javax.servlet.http.HttpSession session

<%-- Sólo en páginas marcadas con isErrorPage: --%>

java.lang.Throwable exception

Aplicaciones Web con Servlets y JSP (II)– p. 14

Page 15: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Acciones: jsp:include

La acción jsp:include invoca al servlet o JSPdado e incluye en resultado de su ejecución en elpunto actual del documento JSP desde el cual seincluya.

El control retorna finalmente a la página inicial.

Opcionalmente, se pueden pasar parámetros.

<jsp:include page='header.jsp'>

<jsp:param name='title' value='Welcome' />

</jsp:include>

Aplicaciones Web con Servlets y JSP (II)– p. 15

Page 16: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Acciones: jsp:forward

La acción jsp:forward invoca al servlet o JSPdado e incluye en resultado de su ejecución en elpunto actual del documento JSP desde el cual seincluya, sin que retorne el control a la páginainicial.

Opcionalmente, se pueden pasar parámetros.

<jsp:forward page='list.jsp'>

<jsp:param name='order' value='date' />

</jsp:forward>

Aplicaciones Web con Servlets y JSP (II)– p. 16

Page 17: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Java Beans

Un Java Bean es una clase Java que cumple elsiguiente convenio:

Contiene propiedades (normalmente atributosde instancia privados).

El acceso a las propiedades se realizamediante métodos de acceso get, set e is.

Tiene siempre un constructor sin argumentos(aunque podría tener más constructores).

Aplicaciones Web con Servlets y JSP (II)– p. 17

Page 18: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Java Beans: ejemplo

package foo;

public class UserInfo implements java.io.Serializable

{

private String firstName;

private boolean registered;

public String getFirstName() {

return firstName;

}

public void setFirstName(String firstName) {

this.firstName = firstName;

}

public boolean isRegistered() {

return registered;

}

public void setRegistered(boolean registered) {

this.registered = registered;

}

}

Aplicaciones Web con Servlets y JSP (II)– p. 18

Page 19: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Java Beans en JSP

JSP proporciona instrucciones especiales paratrabajar más cómodamente con Java Beans.

La acción jsp:useBean:

Si el bean aún no existe en el contexto:Declara, crea e inicializa el bean.Crea una referencia al bean con el nombredado por id.

Si el bean ya existe en el contexto:Obtiene una referencia al mismo con elnombre dado por id.

<jsp:useBean id='user' class='foo.UserInfo' scope='session'>

<jsp:setProperty property='firstName' value='Pepe' />

</jsp:useBean>

Aplicaciones Web con Servlets y JSP (II)– p. 19

Page 20: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Java Beans en JSP: contextos (I)

Un bean en JSP se puede almacenar en uno delos siguientes contextos:

page: asociado a la página JSP y a unapetición HTTP concreta, desaparece al finalizarel procesado de la página.

request: asociado a una petición HTTPconcreta, compartida entre todos los JSPs yservlets que atiendan dicha petición,desaparece al finalizar el procesado de lapetición.

Aplicaciones Web con Servlets y JSP (II)– p. 20

Page 21: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Java Beans en JSP: contextos (II)

. . .

session: asociado a la sesión, compartida portodos los JSPs y servlets para todas laspeticiones de una misma sesión, desaparece alfinalizar la sesión.

application: asociado al contexto de laaplicación Web, compartido por todos losservlets y JSPs de la aplicación en todas laspeticiones.

Aplicaciones Web con Servlets y JSP (II)– p. 21

Page 22: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

La acción jsp:getProperty

Se evalúa al valor de una propiedad de un bean.

<jsp:getProperty name='user' property='firstName' />

Aplicaciones Web con Servlets y JSP (II)– p. 22

Page 23: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

La acción jsp:setProperty

Establece el valor de una propiedad de un bean.

Convierte, si es necesario, el valor de la propiedaddesde una cadena de texto al tipo de datoscorrespondiente.

Proporciona un atajo para establecer valores depropiedades a partir de los parámetros de lapetición, si ambos tienen el mismo nombre.

<jsp:setProperty name='user' property='firstName'

value='<%= request.getParameter("firstName") %>' />

<%-- si 'firstName' es un parámetro de la petición --%>

<jsp:setProperty name='user' property='firstName' />

<%-- todos los parámetros de la petición cuyo nombre

coincida con propiedades --%>

<jsp:setProperty name='user' property='*' />

Aplicaciones Web con Servlets y JSP (II)– p. 23

Page 24: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Algunas referencias

Marty Hall, Core Servlets and JavaServer Pages.Prentice Hall (2000).

http://www.oracle.com/technetwork/

java/javaee/jsp/

Aplicaciones Web con Servlets y JSP (II)– p. 24

Page 25: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Arquitectura de una aplicación con Servlets yJSP

Aplicaciones Web con Servlets y JSP (II)– p. 25

Page 26: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Introducción

Una aplicación Web realiza tareas de procesado ypresentación:

Los Servlets son adecuados para procesado.

Las páginas JSP son adecuadas presentación.

Una aplicación Web puede combinar Servlets ypáginas JSP:

Procesado de parámetros de la petición:Servlets.

Acceso a bases de datos: Servlets.

Lógica de la aplicación: Servlets.

Presentación (vistas): JSP.

Aplicaciones Web con Servlets y JSP (II)– p. 26

Page 27: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Modelo de funcionamiento (I)

1. El cliente envía la petición HTTP a un servlet.

2. El servlet procesa la petición.

Si es necesario, se conecta a la base de datos.

3. El servlet redirige la petición a un JSP.

Si es necesario, añade beans comoparámetros.

4. El JSP lee los parámetros y devuelve la respuestaformateada visualmente al usuario.

Aplicaciones Web con Servlets y JSP (II)– p. 27

Page 28: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Modelo de funcionamiento (II)

petición HTTP

Base dedatos

Servlet

JSP

respuesta HTTP

forw

ard bean

bean

navegador

Aplicaciones Web con Servlets y JSP (II)– p. 28

Page 29: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Mecanismos de redirección de peticio-

nes

Hay dos formas de redirigir una petición a otrorecurso:

Redirecciones HTTP (sendRedirect):El servidor envía una respuesta al cliente conun código 3xx y la URI a la que este debeenviar la petición.

Redirecciones internas en el servidor (forward):Se redirige la petición de un recurso a otrodentro de la misma aplicación Web.El recurso de la última redirección devuelveal cliente la respuesta HTTP.La redirección es transparente para el cliente.

Aplicaciones Web con Servlets y JSP (II)– p. 29

Page 30: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Redirecciones sendRedirect

Fuerza el envío de una respuesta HTTP deredirección al cliente.

El cliente envía la petición a la URI recibida en larespuesta.

// Redirección con URI absoluta

response.sendRedirect("http://www.ejemplo.es/");

// Redirección con URI relativa a la URI de la petición actual

response.sendRedirect("otra.html");

Aplicaciones Web con Servlets y JSP (II)– p. 30

Page 31: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Redirecciones forward

Un Servlet o JSP reenvía la petición a otro recurso(Servlet, JSP, HTML) de la misma aplicación Web.

El cliente no se entera de la redirección (p.e., elnavegador muestra la URI original de la petición,no la redirigida).

El control retorna al finalizar el método forward,por lo que conviene que sea lo último que seejecuta.

Aplicaciones Web con Servlets y JSP (II)– p. 31

Page 32: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Redirecciones forward

Forward desde un Servlet:RequestDispatcher rd = request.getRequestDispatcher("vista.jsp");

rd.forward(request, response);

Forward desde un JSP:<jsp:forward page="vista.jsp"/>

Aplicaciones Web con Servlets y JSP (II)– p. 32

Page 33: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Redirecciones forward con parámetros

El objeto de la petición (ServletRequest) de losrecursos origen y destino de la redirección es elmismo:

Se pueden añadir parámetros como atributos ala petición.

Noticia nuevaNoticia = (...)

request.setAttribute("noticia", nuevaNoticia);

RequestDispatcher rd = request.getRequestDispatcher("vista.jsp");

rd.forward(request, response);

Aplicaciones Web con Servlets y JSP (II)– p. 33

Page 34: Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web ... · Aplicaciones Web con Servlets y JSP (II) Aplicaciones Web (Curso 2014/2015) Jesus Arias Fisteus // jaf@it.uc3m.es´

Edited

with

em

acs

+LA

T EX

+pro

sper

Redirecciones forward con parámetros

Recogida de parámetros desde un Servlet:Noticia noticia = (Noticia) request.getAttribute("noticia");

Recogida de parámetros desde un JSP:<%-- Alternativa 1: con useBean --%>

<jsp:useBean id="noticia" class="beans.Noticia"

scope="request" />

<%-- Alternativa 2: con scriptlet --%>

<% Noticia noticia =

(Noticia) request.getAttribute("noticia"); %>

Aplicaciones Web con Servlets y JSP (II)– p. 34