Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Edited
with
em
acs
+LA
T EX
+pro
sper
Computación Web con Servlets y JSP (II)
Computación Web (Curso 2015/2016)
Jesus Arias Fisteus // [email protected]
Computacion Web con Servlets y JSP (II)– p. 1
Edited
with
em
acs
+LA
T EX
+pro
sper
Java Server Pages (JSP)
Computacion Web con Servlets y JSP (II)– p. 2
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.
Computacion Web con Servlets y JSP (II)– p. 3
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.
Computacion Web con Servlets y JSP (II)– p. 4
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>
Computacion Web con Servlets y JSP (II)– p. 5
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>
Computacion Web con Servlets y JSP (II)– p. 6
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.
Computacion Web con Servlets y JSP (II)– p. 7
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");
(...)
Computacion Web con Servlets y JSP (II)– p. 8
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 --%>
Computacion Web con Servlets y JSP (II)– p. 9
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' %>
Computacion Web con Servlets y JSP (II)– p. 10
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.*' %>
Computacion Web con Servlets y JSP (II)– p. 11
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()); %>
Computacion Web con Servlets y JSP (II)– p. 12
Edited
with
em
acs
+LA
T EX
+pro
sper
Scriptlets: ejemplo
<table>
<tr><th>Product</th><th>Price</th></tr>
<%
for (Product product: catalog) {
%>
<tr>
<td>
<a href='<%= response.encodeURL("view?id="
+ product.getId()) %>'>
<%= product.getShortName() %>
</a>
</td>
<td><%= product.getPrice() %> Euros</td>
</tr>
<% } %>
</table>
Computacion Web con Servlets y JSP (II)– p. 13
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
Computacion Web con Servlets y JSP (II)– p. 14
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>
Computacion Web con Servlets y JSP (II)– p. 15
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).
Computacion Web con Servlets y JSP (II)– p. 16
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;
}
}
Computacion Web con Servlets y JSP (II)– p. 17
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>
Computacion Web con Servlets y JSP (II)– p. 18
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.
Computacion Web con Servlets y JSP (II)– p. 19
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.
Computacion Web con Servlets y JSP (II)– p. 20
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' />
Computacion Web con Servlets y JSP (II)– p. 21
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='*' />
Computacion Web con Servlets y JSP (II)– p. 22
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/
Computacion Web con Servlets y JSP (II)– p. 23
Edited
with
em
acs
+LA
T EX
+pro
sper
Arquitectura de una aplicación con Servlets yJSP
Computacion Web con Servlets y JSP (II)– p. 24
Edited
with
em
acs
+LA
T EX
+pro
sper
Patrón Modelo Vista Controlador
(MVC)
Patrón de arquitectura del software que divide laaplicación en tres partes:
Modelo: almacenamiento y manipulación de losdatos de la aplicación.
Vista: presentación del modelo que permita alusuario interaccionar con él (interfaz deusuario).
Controlador: recibe la entrada del usuario,solicita acciones sobre el modelo y controla lavista.
Computacion Web con Servlets y JSP (II)– p. 25
Edited
with
em
acs
+LA
T EX
+pro
sper
Aplicaciones web Java y MVC
Patrón MVC en una aplicación web Java:
Modelo: gestiona el almacenamiento,recuperación y manipulación de los datos de laaplicación (típicamente mediante base dedatos).
Vista: produce la salida, normalmente HTML,que se envía al usuario (típicamente JSP).
Controlador: recibe las peticiones HTTP, actúasobre el modelo y controla el funcionamiento dela vista (típicamente servlets).
Computacion Web con Servlets y JSP (II)– p. 26
Edited
with
em
acs
+LA
T EX
+pro
sper
Modelo de funcionamiento (I)
1. El cliente envía la petición HTTP a un controlador(servlet).
2. El controlador procesa la petición.
Si es necesario, interacciona con el modelo.
3. El controlador redirige la petición a una vista(JSP).
Si es necesario, añade beans comoparámetros.
4. La vista lee los parámetros y construye larespuesta HTTP que se envía al cliente.
Computacion Web con Servlets y JSP (II)– p. 27
Edited
with
em
acs
+LA
T EX
+pro
sper
Modelo de funcionamiento (II)
petición HTTP
Base dedatos
Controlador(servlet)
Vista(JSP)
respuesta HTTP
forw
ard bean
bean
navegador Modelo
JD
BC
Computacion Web con Servlets y JSP (II)– p. 28
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.
Computacion Web con Servlets y JSP (II)– p. 29
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");
Computacion Web con Servlets y JSP (II)– p. 30
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.
Computacion Web con Servlets y JSP (II)– p. 31
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);
Computacion Web con Servlets y JSP (II)– p. 32
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);
Computacion Web con Servlets y JSP (II)– p. 33
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"); %>
Computacion Web con Servlets y JSP (II)– p. 34
Edited
with
em
acs
+LA
T EX
+pro
sper
URIs relativas y absolutas
Computacion Web con Servlets y JSP (II)– p. 35
Edited
with
em
acs
+LA
T EX
+pro
sper
Introducción
En HTML, en un hiperenlace, imagen, etc. esnecesario especificar una URI.
El navegador necesita la URI completa para seguirel hiperenlace, cargar la imagen, etc.
Una URI se puede especificar como:
URI absoluta.
URI relativa a un servidor.
URI relativa.
Computacion Web con Servlets y JSP (II)– p. 36
Edited
with
em
acs
+LA
T EX
+pro
sper
URI absoluta
Se especifica directamente la URI completa delrecurso.
En HTTP, incluye el identificador de protocolo,servidor, ruta en el servidor y parámetros.
El navegador simplemente toma la URI.
<a href="http://www.it.uc3m.es/labttlat/lab8/">...</a>
Computacion Web con Servlets y JSP (II)– p. 37
Edited
with
em
acs
+LA
T EX
+pro
sper
URI relativa al servidor
Se especifica de forma absoluta la ruta del recurso(comenzando por “/”), pero no se indica protocoloni servidor.
El navegador toma el protocolo y servidor delrecurso en el cual está el enlace, imagen, etc.
<a href="/labttlat/lab8/">...</a>
Computacion Web con Servlets y JSP (II)– p. 38
Edited
with
em
acs
+LA
T EX
+pro
sper
URI relativa
Se especifica sólo la ruta del recurso relativa (nocomienza por “/”), pero no se indica protocolo niservidor, ni parte inicial de la ruta.
El navegador toma el protocolo, servidor y parteinicial de la ruta del recurso en el cual está elenlace, imagen, etc.
Para calcular la ruta, se toma la ruta del recursoactual excepto su último nivel (similar a la formade nombrar ficheros en un sistema de ficheros).
<a href="lab8/">...</a>
Computacion Web con Servlets y JSP (II)– p. 39
Edited
with
em
acs
+LA
T EX
+pro
sper
Ejemplo: URIs relativas
<html> <head> (...) </head> <body> <p> <img src="foto.jpg" alt="Una foto" /> </p> </body></html>
http://www.it.uc3m.es/labttlat/lab8/index.html
http://www.it.uc3m.es/labttlat/lab8/foto.jpg
Computacion Web con Servlets y JSP (II)– p. 40
Edited
with
em
acs
+LA
T EX
+pro
sper
Recomendaciones de diseño
Es recomendable utilizar rutas relativas siempreque sea posible:
Se puede cambiar la aplicación de servidor oruta sin necesidad de cambiar ninguna URI enlos servlets, JSP, HTML, etc.
Computacion Web con Servlets y JSP (II)– p. 41