Introducción

Aplicación web:

Curso de Java

Aplicación que se ejecuta en al menos un servidor y a la que el usuario accede desde un cliente de propósito general (navegador en un PC, teléfono WAP, etcétera). La comunicación en la Web gira entorno al protocolo HTTP. Protocolo de nivel de aplicación. Funciona sobre TCP (puerto 80 por defecto).

Java Server Pages (JSP)
El lenguaje Java — Tema 11 — JSP
Curso de Java

Modelo petición/respuesta. No tiene estado.

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 1

HTTP
Tipos de peticiones: GET, POST, PUT, DELETE, TRACE, OPTIONS, HEAD. Las dos tipos de peticiones más relevantes en aplicaciones web son GET y POST. Ejemplo de GET: Utilizamos un navegador para acceder a http://www.sip.ucm.es/~carlos/index.html El navegador abre una conexión TCP al puerto 80 de la máquina www.sip.ucm.es (resuelve el nombre por DNS) y envía una petición similar a: GET /~carlos/index.html HTTP/1.0 << Otros campos >>

HTTP
El navegador responde con: HTTP/1.0 200 OK << Otros campos >> Content-Type=text/html; ISO-8859-1 << Otros campos >> <html> << Resto del contenido de la página de carlos >> </html> Parámetros en peticiones GET: cadenas de consulta. URL?par1=val1&par2=val2 ... &parN=valN Ejemplo en una página HTML: ... <a href="/forecast?city=Hermosa+Beach&state=CA"> Temperatura en Hermosa Beach </a>...
Tema 11 – JSP - 2 Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 3

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

HTTP
Peticiones POST: Suelen usarse para enviar los datos de un formulario. Los datos se envían como parámetros, pero éstos no forman parte de la URL, sino que se envían como parte del cuerpo del mensaje. El cliente (navegador) codifica automáticamente los valores de los parámetros. Ejemplo en un formulario HTML: ... <form action="/forecast" method="POST"> City: <input type="text" name="city"> State: <input type="text" name=“state”> <p> <input type="submit"> </form> ...
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 4

HTTP
Cuando el usuario pulsa el botón de envío (submit), se envía una petición POST al servidor del que hemos obtenido el formulario.

POST /forecast HTTP/1.0 <<Otros campos>> city=Hermosa+Beach&state=CA

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 5

Tecnologías
Antes: CGI Crea un proceso por cada petición. Ineficiente. Se implementaron algunas variantes más eficientes. Ahora J2EE .NET PHP Servlets + JSP (Java Server Pages) ASP.NET

Los servlets

Los servlets son las respuesta de la tecnología Java a la programación CGI. Son programas que se ejecutan en un servidor web y construyen páginas web. La página web está basada en datos enviados por el usuario. Por ejemplo, las páginas de resultados de los motores de búsqueda se generan de esta forma y los programas que procesan pedidos desde sitios de comercio electrónico también. Los datos cambian frecuentemente. Por ejemplo, un informe sobre el tiempo o páginas de cabeceras de noticias podrían construir la página dinámicamente. Otros ejemplos: páginas de una tienda on-line que liste los precios actuales y el número de artículos en stock.

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 6

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 7

Java Server Pages (JSP)
JSP es una forma de ver un servlet. Concretamente, una forma de trabajar con el servlet como si fuera una página HTML. JSP combina HTML con fragmentos de Java para producir páginas web dinámicamente. La página JSP se preprocesa a un archivo .java, que se compila para generar un .class. Una página ASP se compila en memoria y JSP genera un archivo separado. Cuando el servidor web recibe la petición de una página JSP, el motor JSP convierte la página en un servlet, que se compila mediante javac estándar y se ejecuta mediante la API estándar de Java.

Arquitectura JSP

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 8

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 9

Solicitud de JSP
Tras la recepción de una petición de página JSP:

Esquema de un servlet
Un servlet es una subclase de un servlet genérico. El servlet es un archivo .class del lado del servidor que normalmente procesa peticiones GET y POST, y genera HTML dinámicamente, que se devuelve al cliente que realizó la petición. <FORM METHOD="POST" ACTION="EjeServlet">

1. El motor JSP analiza la página solicitada y crea un archivo de código fuente correspondiente al servlet. 2. El servlet se compila y se genera el .class, que se ejecuta como cualquier servlet. 3. Se crea la instancia del servlet y se ejecutan sus métodos init() y service(). 4. El motor de servlets carga la clase del servlet generado para ejecutarlo. 5. El servlet se ejecuta y devuelve su respuesta al cliente que hizo la solicitud (un archivo HTML).

Indicamos el servlet que va a procesar los datos del formulario

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 10

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 11

EjeServlet.java
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class EjeServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<TITLE>Example</TITLE>"); out.println("<BODY BGCOLOR=FFFFFF>"); out.println("<H2>Botón pulsado</H2>"); String DATA = request.getParameter("Datos"); if(DATA != null) { out.println(Datos); } else { out.println("No has escrito nada."); } out.println("<BR>" + "Hola, Hola"); out.close(); } }
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 12

EjeJSP.jsp
El servlet en forma de página JSP:
<HTML> <BODY> <% response.setContentType("text/html"); out.println("<TITLE>Ejemplo</TITLE>" + "<BODY BGCOLOR=FFFFFF>"); out.println("<H2>Botón pulsado</H2>"); String Datos = request.getParameter("Datos"); if(Datos != null){ out.println(Datos); } else { out.println("No has escrito nada."); } %> </BODY> </HTML>

Será una página de respuesta a un formulario, por ejemplo: <FORM METHOD="POST" ACTION="EjeJSP.jsp">
Luis Hernández Yáñez Carlos Cervigón Rückauer

Curso de Java

Tema 11 – JSP - 13

Ventajas de JSP

Ventajas de JSP

Frente a ASP: Al utilizar Java, es más portable a otros sistemas operativos y servidores web. Frente a los servlets: JSP no ofrece nada que no pudiéramos en principio hacer con un servlet. Pero es mucho más conveniente escribir HTML normal que tener que usar muchas instrucciones print() para generar el código HTML (necesario en los servlets). Separando el formato del contenido podemos poner diferentes personas en diferentes tareas: nuestros expertos en diseño de páginas web pueden construir el código HTML, dejando espacio para que los programadores de servlets inserten el contenido generado dinámicamente.

El inconveniente de los servlets es que el contenido de la página se genera a través del código incrustado en el servlet. Cualquier modificación de la página implica la recompilación del servlet. No debería haber dependencia entre la parte de diseño y la parte lógica de la aplicación. El diseñador gráfico de una web de comercio electrónico no tiene por qué saber manejar java para manipular el código del servlet. JSP debe verse como la norma habitual. Los servlets serán casos excepcionales.

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 14

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 15

Generación dinámica de contenido

Lógica de negocio y lógica de presentación
Lógica de negocio:

La incorporación dinámica de contenido en una página web siempre implica programación. Se trata de minimizar la parte de programación y separar la programación de la presentación del contenido. JSP mezcla HTML y Java. La generación dinámica de contenido se debe separar en dos partes, para facilitar la programación y reducir costes: Lógica de negocio. Lógica de presentación.

Creación de contenidos y control de la relación entre la entrada, los algoritmos y la salida. Lógica de presentación: Diseño gráfico que determina la forma como se presenta la información al usuario. La lógica de negocio se puede controlar desde JavaBeans. La lógica de presentación se puede controlar desde JSP. El control de HTTP se puede realizar mediante servlets.

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 16

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 17

Distribución de tareas

Instalación de un servidor web para JSP
Vamos a trabajar con el servidor Blazix.

Situación a la que queremos llegar: Separación de roles. Personas que realizan el aspecto gráfico (la vista) diseñadores gráficos o similares. Conocimientos de diseño gráfico y herramientas para generación de HTML. Personas que implementan el controlador y el modelo informáticos. Conocimientos de diseño e implementación. Se deberían poder usar directamente las herramientas de diseño de páginas web.

www.Blazix.com Ocupa muy poco espacio. Una vez instalado, debemos conocer los siguientes datos: Dónde se ubican los archivos. Cómo acceder a ellos desde un navegador: http://localhost/pagina.jsp En Blazix, crearemos nuestra primera página de servidor en el directorio C:\Blazix\webfiles

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 18

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 19

Ejemplo
Desde el navegador:

Puerto 82: http://localhost:82/Hola.jsp
<HTML> <BODY> <H1> CURSO IZAR </H1> <H1> JAVA SERVER PAGES </H1> <H1> Primera página en el servidor </H1> </BODY> </HTML>

La primera página JSP

http://localhost/Hola.jsp

JSP simplemente intercala código Java entre el código HTML. JSP combina HTML con fragmentos de Java para generar dinámicamente páginas web. Cualquier página HTML se puede cambiar a la extensión ".jsp". Al cargar la página mediante http://localhost/Hola.jsp observamos que tarda su tiempo. Pero sólo es la primera vez que se carga. El archivo JSP se traduce a un archivo Java, se compila (archivo .class) y se carga (la compilación sólo se produce una vez).

Archivo Hola.jsp en el servidor

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 20

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 21

Elementos JSP

Elementos de guión
El signo % identifica a las etiquetas de lenguaje de guiones. Comentarios HTML: <!-- texto --> Comentarios JSP ocultos: <%-- texto --> Declaraciones: <%! declaración; [declaración;] %> Expresiones: <%= expresión %> Scriptlets: <% código java %>

Elementos de guión: Engloban instrucciones. Son similares a las etiquetas HTML. Acciones (instrucciones): Cosas que debe hacer el motor JSP al procesar la página. Pueden ser acciones estándar, propias o personalizadas. Directivas: Proporcionan información global sobre la página.

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 22

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 23

Comentarios
Archivo solicitado Página resultante

Expresiones
Permiten incluir contenido generado dinámicamente. La secuencia de caracteres <%= y %> incluyen código Java, que se interpreta en tiempo de ejecución. Servidor web <%= expresión %>
Expresión válida de Java

Cualquier expresión entre <%= y %> será evaluada, convertida automáticamente a String y posteriormente incluida como parte del código HTML (reemplazando al guión). <%= new java.util.Date() %> El contenido de la página resultante puede varias cada vez que se solicita la página JSP. <%= ... %> es una abreviatura de out.println().

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 24

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 25

Ejemplo

Hora0.jsp

Declaraciones
El código JSP de la página se convierte en una definición de clase. Los scriptlets (guiones) se convierten en métodos de esa clase. Las declaraciones permiten declarar variables o métodos que se utilizarán posteriormente en la página JSP. Sólo se evalúan cuando se carga por primera vez la página. No generan ninguna salida. Se pueden utilizar en expresiones y scriptlets. <%! declaración; [declaración;] %> Ejemplos: <%! int i = 0, j = 10; %> <%! java.util.Date fecha = new java.util.Date(); %> <%! public void jspInit() { . . . } %>

Servidor web

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 26

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 27

Ejemplo

Horad.jsp

Scriptlets
Hemos visto cómo incluir expresiones Java en las páginas JSP, entre los caracteres <%= y %>. JSP también permite escribir bloques de código Java: colocando el código entre los elementos <% y %> (igual que las expresiones pero sin el carácter =). Este bloque de código se llama scriptlet. Un scriptlet contiene código Java que se ejecuta cada vez que se llama a la JSP. El scriptlet no genera HTML de forma directa, se guarda en el objeto intrínseco out, a partir del cual se puede presentar cualquier información que contenga la página HTML. Se pueden declarar variables y métodos, incluir expresiones, así como usar objetos intrínsecos y cualquier instrucción válida de Java.

Al ser declaración, sólo se evalúa cuando se carga la página. Siempre sale el mismo valor de fecha
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 28

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 29

Ejemplo de scriptlet
<HTML> <BODY>
<%

Hora1.jsp

Proceso:

// Esto es un scriptlet. Obsérvese que la variable // date declarada aquí está disponible para un // guión posterior. System.out.println( "Evaluamos la fecha" ); java.util.Date date = new java.util.Date(); %> La fecha actual es <%= date %>

</BODY> </HTML> El código se ejecuta cada vez que se llama a la página JSP ¡El scriplet no genera HTML directamente!
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer

Aparece en la ventana del servidor (para depurar)

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 30

Tema 11 – JSP - 31

Objetos intrínsecos en el scriptlet
<HTML> <BODY> <% // Objetos intrínsecos: // request // response // session // out (permite generar HTML) // . . . %> </BODY> </HTML>

HTML + Java
Se puede alternar entre HTML y guiones tanto como se (re)quiera. Se pueden declarar variables y métodos, incluir expresiones, utilizar objetos intrínsecos y cualquier instrucción válida de Java. Mezcla de HTML y Java: ... <% for(int i = 3; i < 8; i++) { %> <BR> <FONT SIZE="<%= i %>"> Hola, joven </FONT> <% } %> ...

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 32

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 33

HTML + Java
<HTML> <BODY> <TABLE BORDER=2> <% for(int i = 0; i < 9; i++) { %> <TR> <TD>Numero </TD> <TD> </TD> <TD><%= i + 1 %></TD> </TR> <% } %> </TABLE> Se puede salir del scriptlet, </BODY> escribir HTML y volver a entrar </HTML> en el scriptlet sin problemas.
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer

Tabla.jsp

HTML + Java
<HTML> <BODY> <% boolean hola = false; if(hola) { %> <H1>Hola</H1> <% } else { %> <H1>Adiós</H1> <% } %> </BODY> </HTML>

Tema 11 – JSP - 34

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 35

Scriptlet que genera HTML

Hora02.jsp

Ejemplo
<HTML> <BODY> <% System.out.println("Evaluando la fecha "); java.util.Date fecha=new java.util.Date(); %> La fecha actual es

info.jsp

El scriptlet puede generar HTML mediante el objeto out. Todo lo que se envíe a out debe ser de tipo String. <HTML> <BODY> <% System.out.println("Evaluamos la fecha"); java.util.Date fecha = new java.util.Date(); %> Hola! La fecha actual es <% out.println("<BR>"); out.println(fecha); %> </BODY> </HTML>

<% out.println("<BR>" + fecha+"<br>"); out.println(System.getProperty("os.name")+ "<br>"); out.println(System.getProperty("java.version")+ "<br>"); out.println(System.getProperty("user.name")+ "<br>"); out.println(System.getProperty("user.home")+ "<br>"); out.println(System.getProperty("user.dir")+ "<br>"); out.println(System.getProperty("java.vendor")); %> </BODY> </HTML>
Tema 11 – JSP - 36 Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 37

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Objeto intrínseco request

Request.jsp

Funcionamiento
La hora actual es <% out.println( fecha ); out.println("<BR>La dirección de su máquina es " ); out.println( request.getRemoteHost()); %>

Contiene la información proporcionada por el navegador al servidor. <HTML> <BODY> <% System.out.println("Evaluamos la fecha:"); java.util.Date fecha = new java.util.Date(); %> La hora actual es <% out.println(fecha); out.println("<BR>La dirección de su máquina es " ); out.println(request.getRemoteHost()); %> </BODY> </HTML>

HTML que se genera

La hora actual es Sat Jan 26 17:40:53 CET 2002 <BR>La dirección de su máquina es localhost

Lo que se ve en el explorador

La hora actual es Sat Jan 26 17:40:53 CET 2002 La dirección de su máquina es localhost

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 38

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 39

Ejemplo

Cuatropruebas.jsp

Ejemplo
<HTML> <BODY> <%! String sitio="izar.com"; int contador = 0; void incrementa(){ contador++; } %> <% incrementa(); %> <br> El sitio web del día es <%= sitio %> <br> número de accesos <%= contador %> </BODY> </HTML>

contador1.jsp

<UL> <LI><B>Expresión.</B><BR> Tu máquina host es: <%= request.getRemoteHost() %>.<br> Tu id. de sesión: <%= session.getId() %> <LI><B>Scriptlet.</B><BR> <% out.println("datos de la cadena de GET: " + request.getQueryString(); %> <LI><B>Declaración (más expresión).</B><BR> <%! private int cuentaAccesos = 0; %> Accesos desde que se reinició el servidor: <%= ++cuentaAccesos %> <LI><B>Directiva (más expresión).</B><BR> <%@ page import = "java.util.*" %> Directiva para Momento actual: <%= new Date() %> incluir un paquete </UL>

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 40

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 41

Directivas JSP
Permiten especificar caracterísitcas globales de página, de etiquetas, de importación de clases, archivos, etc......
Sintaxis:

Directiva de inclusión: include

include01.jsp

Permite incluir en tiempo de compilación una página HTML, archivo java, fichero de texto u otra página JSP (normalmente para encabezados, pies, tablas, etc...)
<%@ include file=“URL relativa” %>

<%@ directiva {atributo = “valor”}%>
page: Información para la página. include: Incluye archivos completos palabra por palabra. taglib: La dirección de la librerí de tags que se usará en la página. a

<HTML> <BODY> Vamos a incluir hola.jsp...<BR> <%@ include file="hola.jsp" %> </BODY> </HTML>

Ejemplos:

<%@ include file="hola.jsp" %> <%@ page import=“java.util”%> . . .

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 42

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 43

Directiva de página: page
<%@ page atributo= "valor" Atributos y posibles valores
language="java“ Comunica al servidor el lenguaje que va a ser extends="package.class“ La variable extends, define la clase

Directiva de página: page
%> <%@ page atributo= "valor" Atributos y posibles valores
isThreadSafe="true|false“ Por defecto vale true, le hace señales

%>

utilizado en el archivo. Java es el único posible es esta especificación

al motor de JSP para que multiples pedidos del cliente puedan ser tomadas como una.

padre del servlet generado. Normalmente no es necesario utilizar otras que no sean las clases base del proveedor. paquetes y clases que se quieran utilizar.

info="text” Información en la página a la que puede accederse a través del método Servlet.getServletInfo() (autor, versión, etc) errorPage="pagina_error“ Página que manejará las excepciones

import="package.*,package.class“ Sirve para especificar los session="true|false“ Por defecto session vale true, manteniendo

de errores.

los datos de las sesión para la página.

isErrorPage="true|false“ Marca a la página como la página que

manejará los errores. La página tiene acceso al objeto intrínseco exception.

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 44

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 45

Directiva de página: import
<%@ page import="java.util.*" %> <HTML> <BODY> <% System.out.println("Evaluamos la fecha"); Date fecha = new Date(); %> Hola! </BODY> </HTML> La hora es <%= fecha %>

Directiva de página : errorPage
<%@ page errorPage= "urlRelativa" %> Mediante esta directiva es posible redireccionar a una página JSP en caso de producirse una excepción en tiempo de ejecución. <%@ page isErrorPage=“false” errorPage="tratarerror.jsp" %> Informa al motor JSP que redireccione una excepción a la página
tratarerror.jsp.

Es necesario que la página tratarerror.jsp esté marcada como página de error mediante la directiva <%@ page isErrorPage="true" %> Esto que permite que el objeto que contiene la excepción sea accesible dentro del scriptlet a través del objeto intrínseco del scriptlet
exception.

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 46

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 47

Ejemplo:
<html> <body>

trataerror.jsp

Ejemplo:
<%@ page isErrorPage="true" %> <html> <body> <h1> Error Page </h1> <hr> <h2> Recibí la excepción:<br> <font color=green> <%= exception.toString() %> </font> </h2> </body> </html>

paginaerror.jsp

<%@ page errorPage="paginaerror.jsp" %>

<form method=post action="trataerror.jsp"> ¿Cual es el mejor lenguaje de programación?<p> Java<input type=radio name=lenguaje value="JAVA" checked> C++<input type=radio name=lenguaje value="CPP"> Visual Basic<input type=radio name=lenguaje value="VB"> <p> <input type=submit> </form> <% if (request.getMethod().equals("POST")) { if (request.getParameter("lenguaje").equals("JAVA")) { out.println("<hr><font color=red>Acertaste tu!</font>"); } else { throw new Exception("Te equivocaste de lenguaje!"); } } %>
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 48

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 49

Directiva de librería de etiquetas
Una librería de etiquetas es una colección de etiquetas personalizadas que se pueden usar en la página. <%@ taglib uri = “URI de librería de etiquetas” prefijo= “prefijo etiqueta” %> Las etiquetas personalizadas permiten ocultar código complejo a los diseñadores web.

Objetos intrínsecos del scriptlet
Los Scriptlets son bloques de código Java residentes entre los tags <% y %>. Este bloques de código estarán dentro del servlet generado, incluídos en el método _jspService(). Los Scripts pueden acceder a cualquier variable o Bean que haya sido declarado. También hay algunos objetos intrínsecos disponibles para los Scripts desde entorno del Servlet. Los más utilizados: request, response, out, session

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 50

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 51

Objetos intrínsecos del scriptlet
Objetos que se pueden llamar directamente desde la página jsp:

Objetos del entorno
application : Objeto que representa el contexto JSP a lo largo de su vida, desde que se lanza por primera vez hasta que se destruye Permite compartir datos entre diferents sesiones y peticiones config : Permite acceder a los parámetros de configuración del motor JSP. Con cada nueva petición de la página se crea un nuevo objeto
request.

out :

javax.servlet.jsp.JspWriter

Objeto que representa la salida de texto Proporciona métodos como println(), para generar salidas dentro de scriptlets

request :

javax.servlet.http.HttpServletRequest

Es la petición del cliente y proporciona métodos para recuperar información de la cabecera http o de cookies. Con cada nueva petición de la página se crea un nuevo objeto request.

response : session :

javax.servlet.http.HttpServletResponse

Proporciona acceso a los parámetros asociados con las respuestas HTML generadas por la página (página de respuesta)
javax.servlet.http.HttpSession

page : Representa la página JSP completa. Es sinónimo del objeto this exception : Permite capturar y tratar errores. Solo está disponible cuando se activa el salto a una página de error.

Para mantener información del cliente que establece conexión con el servidor. Cada objeto session corresponde a un solo cliente y permanece durante múltiples peticiones

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 52

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 53

Objeto request

pidenombre0.htm guardarnombre0.jsp

Otros métodos de request:
Info de la máquina cliente:
<%= request.getRemoteHost() %>

request : javax.servlet.http.HttpServletRequest
Proporciona métodos para recuperar información de la cabecera http o de cookies. Con cada nueva petición de la página se crea un nuevo objeto request

quiz.jsp quizhandler.jsp

Obtener el valor de un parámetro:
<%= request.getParameter("edad") %> <br>

Mostrar la cadena del GET
<% out.println("GET:"+ request.getQueryString()); %>

Obtener los Cookies del cliente (devuelve un array con cookies) Caros l A cabo de obt ener...
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 54

Cookie[] request.getCookie()

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 55

Objeto session
session : javax.servlet.http.HttpSession
Se usa para mantener información sobre el cliente o visitante que ha establecido conexión con el servidor. El visitante puede recorrer varias páginas y me puede interesar almacenar su información durante la visita a dichas páginas. Cada objeto session corresponde a un solo cliente y permanece durante múltiples peticiones. Puedo mantener diferente información de cada sesión Métodos del objeto session
getCreationTime(), getLastAccesedTime() getId() setAttribute(String clave, Object valor) getAttribute(String clave) : devuelve el objeto

Objeto session: ejemplo

1.

El usuario introduce su nombre en un formulario (“pidenombre1.htm”), cuya información procesa la página “guardarnombre1.jsp”. “guardarnombre1.jsp” establece un atributo para la sesión y muestra un vínculo continuar para llevarme a otra página, pero ya he almacenado el nombre para toda esta sesión. En la página “siguiente.jsp” recupero el atributo guardado para la sesión. pidenombre1.htm guardarnombre1.js p siguiente.jsp

2.

3.

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 56

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 57

Ejemplo

Ejemplo (cont.)

4
2.“Guardarnombre1.jsp” pr oces l dat envi a os os ados .

3

En l pági a na
“siguiente.jsp” obt engo el

ati o “el br de l rbut nom e” a s s on es i

1

Cl -obj o ave et

2

1.clck i
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 58 Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 59

Session
Todas las páginas JSP participan en una sesión http. Los objetos de la sesión se identifican mediante un ID y se almacenan en el explorador como un cookie. Se pueden almacenar en la sesión cualquier objeto java identificándolo mediante una clave. Por ejemplo:
El objeto a identificado por ident pertenece a la sesión <% Algo a = new Algo(); session.setAttribute(“ident",a); %>

Session
No es obligatorio que las páginas JSP participen en una sesión. Se puede modificar la directiva: <%@ page session="false" %> No hay límite en el número de objetos que se pueden almacenar en una sesión. Sin embargo, objetos grandes pueden degradar el rendimiento. Por defecto, la mayoría de los servidores establecen un tiempo de vida de objetos de sesión de 30 minutos, aunque se puede modificar dicho valor. Veamos el ejemplo de un contador utilizando el objeto session.

Hace que la instancia a esté disponible en todas las páginas JSP y servlets pertenecientes a la misma sesión. La instancia se puede recuperar en otra página :
<% Algo otro =(Algo)session.getAttribute(“ident"); %>
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 60

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 61

Contador3.jsp
<HTML> <BODY>

Objeto response
Proporciona acceso a los parámetros asociados con las respuestas HTML generadas por la página (página de respuesta):

<% Integer numvisitas = (Integer)session.getValue("elcontador"); if (numvisitas==null) { //lo pongo a 0 numvisitas= new Integer(0); session.putValue("elcontador",numvisitas); out.println("Bienvenido"); } else { numvisitas= new Integer(numvisitas.intValue()+1); session.putValue("elcontador",numvisitas); out.println("Has visitado " + numvisitas + " veces"); } %>
</BODY> </HTML>
Curso de Java

Métodos:
Establecer el tipo del mensaje de respuesta: response.setContentType(String) Redirigir a otra página: response.sendRedirect(String) Colocar una cookie en el cliente: response.addCookie(Cookie) Creación del cookie: new Cookie(nombre,valor) Caducidad del cookie: setMaxAge(valor)
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 63

showSession.jsp showApplication.jsp
Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 62

Uso de cookies
Creación del cookie: Caducidad del cookie: new Cookie(nombre,valor) setMaxAge(valor)
<html> <body>

Ejemplo:

ponCookie.jsp

Envio del cookie al cliente: response.addCookie(Cookie) <% Cookie micookie=new Cookie(“nombre”, “Carlos”); miCookie.setMaxAge(24*60*60); response.addCookie(micookie); %> Obtención de cookies del cliente(devuelve un array de Cookies): request.getCookie() <% Cookie[] listacookies = request.getCookies(); . .
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 64

<h1>Almacenando Cookie!</h1>

<%
Cookie miCookie = new Cookie("nombre", "Carlos"); miCookie.setMaxAge(24*60*60); response.addCookie(miCookie); %> <a href="CogeCookie.jsp"/>Leer Cookie</a> </body> </html>

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 65

Ejemplo:
<html> <body>

cogeCookie.jsp
<html>

Captura de Excepciones
<head><title>JSP Page</title></head> <body> <% int i=10; </body> </html> <% int i = 10; int j = 0; try { i = i / j ; } catch (Exception e) { out.print(“Se produjo el siguiente error:<br>"); out.print(e.toString()); } %> <p> El valor de i es <%= i%> </p> </body> </html> ____________________________________________ int j=0; i = i/j ; %> <p> El valor de i <%= i %> </p>

errorconcatch.jsp

<h1>el nombre de usuario lo saco del cookie almacenado en el cliente.</h1>

<% Cookie[] listacookies = request.getCookies(); for(int I = 0; I< listacookies.length;I++) { Cookie miCookie = listacookies[I]; if (miCookie.getName().equals("nombre")) { out.println("el nombre es: " + miCookie.getValue()); } } %>
</body> </html>

Si capt arexcepci ! n ur ón

Capt am os l excepci ! ur a ón

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 66

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 67

Acceso a exception en JSP
<%@ page errorPage=“trataError.jsp" %> <html> <body> <% int i = 10; i = i / 0; %> </body> </html>

Ejemplo de acceso a base de datos
<%@page import="java.sql.*" %> <%
try { String urlBD = "jdbc:odbc:JDBC_ALUMNOS"; Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver"); Connection conexion = DriverManager.getConnection (urlBD); Statement select = conexion.createStatement(); ResultSet res = select.executeQuery( "SELECT * FROM Tabla1 ORDER BY NOMBRE" ); out.println("NOMBRE");%> <BR> <% out.println("------");%> <BR>

ejemploError.jsp

<%@ page isErrorPage="true" %> <html> <body>

trataError.jsp

Ocurrió el error :<br> <%= exception.toString()%> <br> </body> </html>
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 68 Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 69

Ejemplo de acceso a base de datos
<% int col = res.findColumn( "nombre" ); boolean seguir = res.next(); while( seguir ) { out.println(res.getString( col )); %> <BR> <% seguir = res.next(); }; res.close(); select.close(); conexion.close(); } catch( SQLException ex ) { System.out.println(ex.toString()); } %>
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 70

Resultado obtenido
Al solicitar la página http://oemcomputer:82/Listado.jsp se genera la siguiente página

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 71

Etiquetas JSP
Sintaxis:
<algo:etiqueta> Cuerpo </algo:etiqueta>

Etiquetas JSP predefinidas
<jsp:accion atributo=“valor” />
<algo:etiqueta/>

Toda acción tiene dos atributos permanentes: id y scope id identifica el objeto o acción declarada en otro momento del JSP scope indica el ámbito y vida de la acción: page: sólo durante la vida del JSP en esa petición request: mientras dure la petición session: mientras dure la sesión application: mientras el JSP no se elimine del servidor (jspDestroy) Lo estudiaremos al ver beans.

Los tags pueden ser : predefinidos (comienzan por jsp):
<jsp: accion atributo=“valor” />

<jsp:include . . ./> <jsp:usebean . . ./>
<jsp:include es similar a la directiva include, pero en vez de cargar el texto del archivo incluido en el archivo original, el tag <jsp:include> llama al

objetivo en tiempo de ejecución. Cargados de una biblioteca externa

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 72

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 73

Directiva de librería de etiquetas
Una librería de etiquetas es una colección de etiquetas personalizadas que se pueden usar en la página (ampliamos las etiquetas JSP). Definición <%@ taglib uri = “URI de librería de etiquetas” prefijo= “prefijo etiqueta” %> Uso posterior: <prefijo:accion atributo=“valor”> -----</prefijo:accion> (las predefinidas: <jsp:include . . ./> )

Ejemplo : jsp:include
<HTML> <BODY> Voy a incluir el archivo hola.jsp...<br> <jsp:include page="hola.jsp"/> </BODY> </HTML> Se incluye el resultado del jsp

include02.jsp

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 74

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 75

Ejemplo : jsp:forward
<HTML> <BODY> Voy a incluir el archivo hola.jsp...<br> <jsp:forward page="hola.jsp"/> </BODY> </HTML> Termina el jsp y al cliente salta a la url

forward.jsp

Ejercicio
1) Creamos el siguiente formulario

login.html

2) En la página “Validarlogin.jsp” comprobamos que el usuario es Pepe y la contraseña abcd Si los datos no son correctos, saltamos a la página “error.jsp”:

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 76

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 77

Ejercicio
Si los datos son correctos, saltamos a la página menu.jsp:

Pagina de login predeterminada (Blazix)
login.html (directorio wefiles):

<p><FORM METHOD=POST ACTION="j_security_check">Username:&nbsp; <INPUT TYPE=TEXT NAME=j_username SIZE=20> <br>Password:&nbsp;<INPUT TYPE=PASSWORD NAME=j_password SIZE=20> <br><INPUT TYPE=SUBMIT VALUE="Login">
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 78 Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 79

Fichero de configuración web.ini (opcion 1)
# Sample authentication # Remove these lines to take out the authentication sample # Change the authType to "Basic" to see basic authentication example # and uncomment the "authRealm" line.

Ejemplo login

application.default.authType: Form #application.default.authRealm: Sample application.default.authLoginForm: /login.html application.default.authErrorPage: /loginFailed.html role.name: user role.user.url: /AuthenticationTest.html

Página de login

Página cuando login incorrecto

Página cuando login correcto Password y login a cotejar
Luis Hernández Yáñez Carlos Cervigón Rückauer Luis Hernández Yáñez Carlos Cervigón Rückauer

Curso de Java

Tema 11 – JSP - 80

Curso de Java

Tema 11 – JSP - 81

Fichero de configuración web.ini (opcion 2)
# Sample authentication # Remove these lines to take out the authentication sample # Change the authType to "Basic" to see basic authentication example # and uncomment the "authRealm" line.

Directiva de página: contentType

excel.jsp

<%@ page atributo= "valor" %> Vamos a generar una hoja de cálculo Excel con los datos de la página JSP:
<%@ page contentType="application/vnd.ms-excel" %> <%-- Observe que hay tabuladores, no espacios entre columnas. --%> 1997 1998 1999 2000 2001 12.3 13.4 14.5 15.6 16.7

application.default.authType: Basic application.default.authRealm: Sample application.default.authLoginForm: /login.html application.default.authErrorPage: /loginFailed.html role.name: user role.user.url: /AuthenticationTest.html

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 82

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 83

Response: setContentType
<HTML><HEAD><TITLE>Comparing Apples and Oranges</TITLE> </HEAD> <BODY> <CENTER> <H2>Comparing Apples and Oranges</H2> <% response.setContentType("application/vnd.ms-excel"); %> <TABLE BORDER=1> <TR><TH></TH><TH>Apples<TH>Oranges <TR><TH>First Quarter<TD>2307<TD>4706 <TR><TH>Second Quarter<TD>2982<TD>5104 <TR><TH>Third Quarter<TD>3011<TD>5220 <TR><TH>Fourth Quarter<TD>3055<TD>5287 </TABLE></CENTER> </BODY> </HTML>
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 84

Response: setRedirect(URL)
<%@page import="java.util.*" %> <html> <head> <title>HolaUsuario</title> </head> <body> <% Date actual; actual = new Date(); out.print("Hola " + request.getParameter("usuario")); out.print("hoy es " + actual.toString()); . . . response.sendRedirect("http://www.ucm.es"); %> </body> </html>
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 85

Reescritura de URL
<%@ page session="false" %> . . . <% int cont = 0; String parm = request.getParameter("cont"); if (parm != null) if (cont == 0) { %> Es la primera vez. <% } } veces antes.<% else if (cont == 1) { %> ya has accedidoantes.<% else { %> Has accedido <%= cont %> } %> <P> Pulsa <A HREF="Counter7.jsp?cont=<%=cont + 1 %>" >aqui</A> para volver a visitar la página. </BODY> </HTML>
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 86

Applets y jsp
<html><body> <form method=post > ¿Quieres probar el applet?<p>

formapplet.jsp

Si<input type=radio name=respuesta value="SI" checked> No<input type=radio name=respuesta value="NO"> <p> <input type=submit> </form> <% if (request.getMethod().equals("POST")) { if (request.getParameter("respuesta").equals("SI")) out.println("<hr><font color=red>SI!</font>"); %> { cont = Integer.parseInt(parm);

<jsp:include page="euros.jsp"/>
<% } else { out.println("<hr><font color=red>NO!</font>"); } } %> </body></html>
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 87

<jsp:plugin .....>
<jsp:plugin type="applet" code="DigitalClock.class" codebase="/bookstore2" jreversion="1.4" align="center" height="25" width="300" > . . . </jsp:plugin>
}

javaBeans

Empleado.jsp

Un JavaBean es una clase java que se puede relacionar con una página JSP y que suele tener : Constructor sin argumentos Metodos get/set
public class Empleado { public String nombre = "sin nombre"; public String getNombre(){ return nombre; } public void setNombre(String nombre){ this.nombre = nombre; }

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 88

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 89

javaBeans

javaBeans: operaciones
Vamos a usar el bean que identificamos como “mibean” y cuya clase es “Empleado”
<jsp:useBean id="mibean" class="Empleado" />

La utilidad de javaBeans es que se puede reutilizar el código de la clase en otras aplicaciones. Reduce el código java en la página JSP y permite a los diseñadores trabajar con HTML sin saber mucho de Java. Veamos un ejemplo en el que se relaciona la clase Empleado (javaBean) con una página JSP que accede a los campos de dicha clase, mediante useBean setProperty getProperty

Establecer la propiedad “nombre” de dicho bean:
<jsp:setProperty name="mibean" property ="nombre" value ="kiko" />

Obtener la propiedad “nombre” de dicho bean:
<jsp:getProperty name="mibean" property="nombre" />

Usamos un método del bean en una expresión:
<%= mibean.getNombre() %>

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 90

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 91

javaBeans
<HTML> <BODY>

beans1.jsp

Beans y tratamiento de formularios (1)
El modo usual de trabajar con formularios es mediante la definición de un “bean”. El “bean” contiene código Java que se puede llamar desde la página JSP. Se trata de definir una clase con un atributo por cada campo del formulario. La clase debe tener métodos modificadores y consultores de cada uno de los atributos (campos). Consideramos un formulario que pide el nombre, el e-mail y la edad del cliente. Se trata de enlazar el bean con el servlet o la página JSP para que trabaje con los datos del formulario.

<jsp:useBean id="mibean" class="Empleado" /> <jsp:setProperty name="mibean" property="nombre" value="kiko" Bienvenido a nuestra empresa, <jsp:getProperty name="mibean" property="nombre" /> <br><br> <%= mibean.getNombre() %>, por favor visita nuestra web más a menudo . . . </BODY> </HTML>
Luis Hernández Yáñez Carlos Cervigón Rückauer

/>

Curso de Java

Tema 11 – JSP - 92

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 93

Beans y tratamiento de formularios (2)
<HTML> <BODY> <FORM method=post> action=“guardaenbean.jsp”
Escribe nombre : <INPUT type="text" name=campousuario> <br> Escribe e-mail : <INPUT type="text" name=campomail> <br> Escribe edad : <INPUT type="text" name=campoedad> <br>

Beans y tratamiento de formularios (3)
public class Usuario{ String campousuario; String campomail; int campoedad; public void setCampousuario(String valor){ campousuario=valor;} public void setCampomail(String valor){ campomail=valor;} public void setCampoedad(int valor){ campoedad=valor;} public String getCampousuario(){return campousuario;} public String getCampomail(){return campomail;} public int getCampoedad(){return campoedad;} }

PideDatos.jsp

Creamos el bean Usuario.java

<P><INPUT type=submit value="Enviar"> </FORM> </BODY> </HTML>

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 94

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 95

Beans y tratamiento de formularios (4)
Compilamos la clase y verificamos el classpath del servidor web (En Blazix podemos colocarla en la carpeta “classes”). El programa que procesa el formulario usa las etiquetas useBean y setProperty <jsp:useBean id="beanusuario" class="Usuario" scope="session"/> <jsp:setProperty name="beanusuario" property="*"/> ... <HTML> <BODY> <A Href=“recuperarbean.jsp">recuperar</A> </BODY> </HTML> <HTML> <BODY>

Beans y tratamiento de formularios (5)
Utiliza la instancia de la clase Usuario en esta sesión <jsp:useBean id="beanusuario" class="Usuario" scope="session"/> Coge los datos del form. Y los coloca en el bean <jsp:setProperty name="beanusuario" property="*"/>

<A Href=“recuperabean.jsp">Recuperar datos</A> </BODY> </HTML> Vamos a otra página desde la que recuperamos los datos del bean
Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 97

guardaenbean.jsp

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 96

Curso de Java

Beans y tratamiento de formularios (6)
<jsp:useBean id="beanusuario" class="Usuario" scope="session"/> <HTML> <BODY> Los datos que introdujo son:<br> Nombre: <%= beanusuario.getCampousuario() %> <br> e-Mail: <%= beanusuario.getCampomail() %> <br> Edad: <%= beanusuario.getCampoedad() %> <br>
<jsp:getProperty name="beanusuario" property="campousuario" /> <jsp:getProperty name="beanusuario" property="campomail" /> <jsp:getProperty name="beanusuario" property="campoedad" />

Proceso :

1.

Usa los métodos del bean para obtener atributos

2.

</BODY> </HTML>

Otra forma de obtener los atributos
Luis Hernández Yáñez Carlos Cervigón Rückauer

recuperabean.jsp

1.Envi l dat delf m ul i o os os or aro 2.Los guar en elbean do 3.Los r ecuper delbean o

3.
Luis Hernández Yáñez Carlos Cervigón Rückauer

Curso de Java

Tema 11 – JSP - 98

Curso de Java

Tema 11 – JSP - 99

Otro enfoque :
<jsp:setProperty name="beanusuario" property="*"/> <HTML> <BODY> <FORM method=get> Escribe tu nombre Escribe tu e-mail Escribe tu edad </FORM>

pideDatos2.jsp

Proceso:

<jsp:useBean id="beanusuario" class="Usuario" scope="session"/>

N o us os un s i acton) am crpt( i
: <INPUT type="text" name=campousuario> <br> : <INPUT type="text" name=campomail> <br> : <INPUT type="text" name=campoEdad> <br>

<P><INPUT type=submit value="Enviar"> <% if (request.getParameter("campousuario") != null){ %> <h1> Hola,<jsp:getProperty name="beanusuario” property="campousuario"/></h1> <% } %> </BODY> </HTML>
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 100 Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 101

Obtengo una propiedad del bean, en la propia página del formulario

Resumen: beans
Normas en la creación de beans: Si usamos <jsp:getProperty>, necesitamos el correspondiente método get en el bean Si usamos <jsp:setProperty>, necesitamos uno o más métodos set correspondientes. Del formulario al bean: Localizamos el ejemplar del bean : Poner las propiedades en el bean: Del bean al formulario: Localizamos el ejemplar del bean :
<jsp:useBean> <jsp:getProperty>
}
Luis Hernández Yáñez Carlos Cervigón Rückauer

Carrito compra con beans (1)
public class Product { private int productId; private String productName; private double productPrice; public Product(int prodid, String prodname, double prodprice) { productId = prodid; productName = prodname; productPrice = prodprice; } public int getProductId(){ ... } public void setProductId(int ProductId){...} public String getProductName(){...} public void setProductName(String ProductName){... } public double getProductPrice(){ ... } public void setProductPrice(double productPrice){ ...}

<jsp:useBean> <jsp:setProperty>

Obtenemos las propiedades del bean:

Curso de Java

Tema 11 – JSP - 102

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 103

Carrito compra con beans (2)
public class ProductManager { private Product[] productList = new Product[3]; private int productCount; public ProductManager() { initializeProductList(); } private void initializeProductList() { productList[0] = new Product(1,"Leche",49.99); productList[1] = new Product(2,"Galletas",59.99); productList[2] = new Product(3,"Pan",39.99); } public Product[] getProductList(){ return productList; } public int getProductCount(){ return productList.length; } public Product getProductDetails(int prodid) { ....
Luis Hernández Yáñez Carlos Cervigón Rückauer <html>

Carrito compra con beans (3)
<body> Catalogo de productos&nbsp; <p>&nbsp;</p> <form method="POST" action=“tratacarrito1.jsp">

carrito1.jsp

<table border="0" cellpadding="0" cellspacing="0" width="439"> <tr> <td width="157"><b>Catalogo</b></td> <td width="128"></td> <td width="148"></td> </tr> <tr> </td> </td> </td> <td width="157" bgcolor="#C0C0C0"> <font color="#FFFFFF">Producto</font> <td width="128" bgcolor="#C0C0C0"> <font color="#FFFFFF">Precio</font> <td width="148" bgcolor="#C0C0C0"> <font color="#FFFFFF">Selecccionar</font> </tr> <tr> <td width="157">Leche JSP</td> <td width="128">2.99</td> </td> </tr> <td width="148"> <input type="checkbox" name="productid" value="1" />

Curso de Java

Tema 11 – JSP - 104

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 105

Carrito compra con beans (3)
<tr> <td width="157">Galletas</td> <td width="128">3.99</td> <td width="148"> <input type="checkbox" name="productid" value="2" /> </td> </tr> <tr> <td width="157">Pan</td> <td width="128">1.99</td> <td width="148"> <input type="checkbox" name="productid" value="3" /> </td> </tr> </table> <p> <input type="submit"

carrito1.jsp

carrito1.jsp

value="Añadir al carrito" name="AddToShoppingCartBtn" /> </p> </form> </body> </html> Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 106 Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 107

tratacarrito1.jsp
<html> <body>

Modelos de accesos JSP
Las primeras especificaciones JSP definían dos arquitecturas conocidas como Modelo 1 y Modelo 2. La diferencia fundamental radica en donde se encuentra el núcleo del proceso de las peticiones En el modelo 1, la petición desde el explorador se envía directamente a la página JSP, que es responsable de procesarla y de devolver la respuesta al cliente. Hay una separación entre el contenido y la presentación, puesto que se suele acceder a los datos a través de beans. Adecuado en aplicaciones pequeñas Mucho código Java dentro de la página JSP

<b>(Respuesta) </b><br /><br /> <jsp:useBean id="pm" class="ProductManager" scope="session"> </jsp:useBean> <% String[] selProducts = request.getParameterValues("productid"); int selProductsCount = 0; if (selProducts == null) { out.println("No seleccionó nada"); } else { selProductsCount = selProducts.length; out.println("El carrito tiene lo siguiente :" +"<BR>"); for(int i=0;i<selProductsCount;i++) { int ProductId = Integer.parseInt(selProducts[i]); Product prod = pm.getProductDetails(ProductId); out.println(prod.getProductName());out.println(prod.getProductPrice()); out.println("<BR>"); } %> }
Luis Hernández Yáñez Carlos Cervigón Rückauer </body></html> Tema 11 – JSP - 108

Curso de Java

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 109

Modelo 1 (Cliente-Servidor)

Modelo 2 (Modelo-Vista-Controlador)

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 110

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 111

Modelo 2 (Modelo-Vista-Controlador)

Modelo 1: ejemplo
Aplicación que solicita al lector datos sobre el coche o moto que le gustaría tener. Página del formulario:
encuesta.html

El proceso se divide entre componentes de presentación y controladores. El modelo viene representado por los beans Los componentes de presentación son páginas JSP que generan la respuesta HTML Los controladores procesan las peticiones HTTP y son responsables de crear beans. Se pueden implementar como servlets o como páginas JSP
Página que procesa los datos del formulario: proencuesta.jsp: Todo el control de los datos del formulario los recibe esta página y los manipula, simplemente guardándolos en un fichero en disco, con el nombre del usuario.

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 112

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 113

Clase Properties
<html>

proencuesta.jsp (1)
<body> <%@ page import="java.util.*,java.io.*" %> <h2>Tutorial JSP, resultado encuesta</h2> <% String usuario = request.getParameter("usuario"); String sexo = request.getParameter("genero"); String coche = request.getParameter("coche"); String moto = request.getParameter("moto"); if(usuario == null || sexo == null || coche == null || moto == null) { %> <br>Hay opciones no seleccionadas y debe haber una<br> selección en cada uno para completar la encuesta.<br> Pulse aquí <a href="javascript:history.back()">volver</a> para realizar la selección.

Usaremos la clase Properties para almacenar los datos del formulario La clase Properties permite guardar un conjunto de propiedades que se pueden volcar a un flujo de salida o se puede cargar desde un flujo Contiene pares del tipo “clave-valor”, como un string. Creación del objeto Properties:
Properties p = new Properties();

Mapear claves con valores:
p.put(clave,valor);

Grabar el objeto en el flujo de salida
p.store (OutputStream , String ) :

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 114

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 115

proencuesta.jsp (2)
<% } else { // Almacenamos la información del usuario en una instancia del objeto properties Properties p = new Properties(); p.put( "usuario",usuario ); p.put( "genero",sexo ); p.put( "coche",coche ); p.put( "moto",moto ); // Almacenamos el objeto en un fichero con nombre de usuario FileOutputStream fos = new FileOutputStream(usuario); p.store( fos,"Encuesta, realizada a -- "+usuario ); fos.flush(); fos.close(); %>
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 116

proencuesta.jsp (3)
<font face="Verdana,Helvetica" size="-1" color="#000099"> Gracias <b><%= usuario%></b>, su selección ha sido recogida.<br> son:<br> </font><br> <table width="40%" border="0" cellspacing="1" cellpadding="0" align="center"> . . . <font face="Verdana,Helvetica" size="-1" color="#000099"> Sexo:</font></td> <td nowrap> <font face="Verdana,Helvetica" size="-1" color="#990000"> <b><%= sexo %></b></font> </td></tr> . . . </td></tr> </table> <% } %> </body> <tr><td nowrap> <font face="Verdana,Helvetica" size="-1" Los datos

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 117

resultado

Modelo 2: ejemplo
Página del formulario:encuesta3.html Definimos un javabean que implemente la lógica de la aplicación:
DatosEncuesta.java

La pági proencuesta3.jsp ahor s encar s o de l pr ent ón na a e ga ól a es aci

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 118

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 119

encuesta3.htm

El bean: DatosEncuesta.java
public class DatosEncuesta { private String usuario; private String coche; private String genero; private String moto; }

public String getUsuario() { return( usuario ); public void setUsuario( String _usuario ) { usuario = _usuario;} public String getGenero() { return( genero ); genero = _genero; return( coche ); } } } } public void setGenero( String _genero ) { public String getCoche() { public void setCoche( String _coche ) {

El valor de action en el formulario es:
proencuesta3.jsp
Luis Hernández Yáñez Carlos Cervigón Rückauer

coche = _coche;

public String getMoto() {. . .} public void setMoto( String _moto ) {. . .}

Curso de Java

Tema 11 – JSP - 120

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 121

El bean: DatosEncuesta.java
// Método que se encarga del almacenamiento del objeto // p en fichero de disco public void guardar() throws IOException { Properties p = new Properties(); p.put( "usuario",usuario ); p.put( "genero",genero ); p.put( "coche",coche ); p.put( "moto",moto ); FileOutputStream fos = new FileOutputStream(usuario); p.store( fos,"Encuesta realizada a -- "+usuario ); fos.flush(); fos.close(); } } %>

Proceso del bean: Proencuesta3.jsp
<html> <body> <h3> Encuesta - revisión datos </h3> <jsp:useBean id="vbean" scope="request" class="DatosEncuesta" /> <jsp:setProperty name="vbean" property="*" /> <% // Comprobamos que todos los datos han sido seleccionados if(vbean.getUsuario() == null || vbean.getGenero() == null || vbean.getMoto() == null || vbean.getCoche() == null ) { <br>Hay opciones que no se han seleccionado y debe haber una<br> selección en cada uno de ellos para completar la encuesta.<br> Pulse aquí <a href="javascript:history.back()">volver</a> para realizar la selección. <% } else { %> <% vbean.guardar();%>

En este modelo la página JSP no utiliza casi el lenguaje Java

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 122

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 123

Proceso del bean: Proencuesta3.jsp
<font face="Verdana,Helvetica" size="-1" color="#000099"> Gracias <b><jsp:getProperty name="vbean" property="usuario" /></b>, su selección ha sido recogida.<br> </font><br> <table width="40%" border="0" cellspacing="1" cellpadding="0" align="center"> <tr><td> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr bgcolor="#999999"><td bgcolor="#003399"> <table width="100%" border="0" cellspacing="1" cellpadding="2"> <tr bgcolor="#FFFFFF"><td nowrap> . . . . Moto:</font></td> <td nowrap> <font face="Verdana,Helvetica" size="-1" color="#990000"> <b><jsp:getProperty name="vbean" property="moto" /></b></font> </td></tr> </table> . . . . <% } %> </body> </html> Los datos son:<br>

Ejemplo : (Modelo 2)
Página del catálogo: Catalog.jsp

<i g s m rc="w roxl gi" ogo. f

<j p:ncl s i udepage= "Shoppi art ngC Sum m ary.s j p"

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 124

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 125

Ejemplos : carrito compra (M2)
Tratamiento del formulario: WroxShopController.jsp
<jsp:useBean id="cart“ class="ShoppingCart" </jsp:useBean> <%!String URL="";%> <% String action= request.getParameter("Action"); if (action.equals("AddToCart")) { String ISBN float = (String)request.getParameter("ISBN"); String title = (String)request.getParameter("Title"); price = Float.parseFloat(request.getParameter("Price")); System.out.println(ISBN + "," + title + "," + price); Book b = new Book(); b.setISBN(ISBN); b.setBookTitle(title); b.setPrice((float)price); b.setQuantity(1); cart.addItem(b); URL = "Catalog.jsp"; } else if (action.equals("CheckOut")) { URL = "CheckOut.jsp";} response.sendRedirect(URL); %>
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 126

shoppingCartSummary.jsp
<%@ page import="java.util.Iterator" %> <jsp:useBean id="cart“ class="ShoppingCart" scope="session"> </jsp:useBean> <% Iterator contents = cart.getContents(); float totalValue = (float)0.0; int totalItems = 0; while (contents.hasNext()) { Book b = (Book)contents.next(); totalItems = totalItems + b.getQuantity(); totalValue = totalValue + b.getQuantity()*b.getPrice(); } out.println("<B><U>Shopping Cart Summary</U></B>" + "<BR>"); out.println("Total Items : " + totalItems + "<BR>"); out.println("Total Value : $" + totalValue); %>);

scope="session">

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 127

Checkout.jsp

Librería de etiquetas de Blazix
<%@ taglib uri = “Url de librería de etiquetas” prefix= “prefijo etiqueta” %> <%@ taglib uri="/blx.tld" prefix="blx" %>

ur ldelfcher .ar i o j que contene l i a defni ón de lbr í i ci i era de etquet i as

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 128

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 129

Ejemplo

(pidenombre3>guardabean>pidenombre5.jsp)

Arquitectura de un servlet

<%@ taglib prefix="blx" uri="/blx.tld" %> <jsp:useBean id="beanusuario" class="Usuario" scope="session"/> <HTML> <BODY> <blx:getProperty name="beanusuario" property="*"> <FORM method=post action="otra2.jsp"> Escribe tu nombre <br> : <INPUT type="text" name=campousuario>

Escribe tu e-mail &nbsp;&nbsp: <INPUT type="text" name=campomail> <br> Escribe tu edad &nbsp;&nbsp;&nbsp;&nbsp: <INPUT type="text" name=campoedad> <br> <P><INPUT type=submit value="Enviar"> </FORM> </blx:getProperty> </BODY> </HTML>
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 130 Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 11 – JSP - 131

Ciclo de vida
...

Ejemplo de llama a Servlet
<HTML> <HEAD> <TITLE>Example</TITLE> </HEAD> <H2>Formulario enlazado con un servlet</H2> Introduzca texto y pulse enviar.<BR> al pulsar enviar se llama a ExampServlet.java <BR> que devuelve una página HTML al explorador <FORM METHOD="POST" ACTION="ExampServlet"> <INPUT TYPE="TEXT" NAME="DATA" SIZE=30> <P> <INPUT TYPE="SUBMIT" VALUE="Pulsa"> <INPUT TYPE="RESET"> </FORM> ... </BODY> </HTML>

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 132

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 133

ExampServlet.java
import java.io.*;import javax.servlet.*;import javax.servlet.http.*; public class ExampServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<title>Example</title>" + "<body bgcolor=FFFFFF>"); out.println("<h2>Boton Pulsado</h2>"); String DATA = request.getParameter("DATA"); if(DATA != null){ out.println(DATA); } else { out.println("No text entered."); } out.close(); }}

Esctructura básica de un servlet
Cuando se genera un servlet a partir del fichero jsp es posible ver el código del servlet generado. Si nos fijamos en este archivo podemos encontrar las siguientes clases:
HttpJspPage

Ellas definen la interface para el compilador de páginas JSP. Nos encontramos también tres métodos:
JspInit() JspDestroy() _jspService(HttpServletRequest request, HttpServletResponse response)

Los dos primeros métodos pueden ser definidos por el autor de la página JSP, pero el tercer método es una versión compilada de la página JSP, y su creación es responsabilidad del motor de JSP

Boton Pulsado Carlos

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 134

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 135

Esctructura básica de un servlet
La implementación de la clase JSP extiende HttpJspBase, que a su vez implementa la interface javax.servlet.Servlet, que define los siguientes métodos del ciclo de vida: Métodos: jspService(), básicamente inserta el contenido de la página JSP. jspInit() y jspDestroy() se pueden redefinir. Una vez cargada la clase en el servlet contenedor, el método _jspService() es responsable de atender las peticiones Un Servlet es construído e inicializado, después se procesan cero o varias peticiones y por último se destruye.

Métodos básicos
init(): es donde comienza el servlet. Aquí se colocá código que se desea sea ejecutado sólo cuando carga el servlet. service(): maneja las peticiones del cliente. destroy(): cuando el servlet es desmontado se invoca este metodo. Es usado para hacer limpieza. doGet() y doPost(): son identicos excepto que uno atiende las peticiones GET y el otro las POST. Ambos métodos reciben objetos del tipo HttpServletResponse y HttpServletRequest. getServletInfo(): retorna información del servlet, como autor, copyrigth, etc.

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 136

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 11 – JSP - 137