Sei sulla pagina 1di 25

JSP (I)

Mario Muoz Organero & Norberto Fernndez * Departamento de Ingeniera Telemtica http://www.it.uc3m.es/mario http://www.it.uc3m.es/berto
(*) Agradecimientos a Lourdes Tajes en cuyo material docente se basa parcialmente esta presentacin

Introduccin a JSP
JSP es una especificacin de Sun Microsystems Sirve para crear y gestionar pginas web dinmicas Permite mezclar en una pgina cdigo HTML para generar la parte esttica, con contenido dinmico creado a partir de marcas especiales El contenido dinmico se obtiene, en esencia, gracias a la posibilidad de incrustar dentro de la pgina cdigo Java de diferentes formas Su objetivo final es separar la interfaz (presentacin visual) de la implementacin (lgica de ejecucin)
En servlets estaban mezclados

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

Introduccin a JSP
La pgina JSP se convierte en un servlet La conversin la realiza en la mquina servidora el motor o contenedor la primera vez que se solicita la pgina JSP Este servlet generado procesa cualquier peticin para esa pgina JSP Si se modifica el cdigo de la pgina JSP, entonces se regenera y recompila automticamente el servlet y se recarga la prxima vez que sea solicitada
En servlets, tendramos que modificar el cdigo fuente, recompilar y redesplegar nosotros

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

Hola Mundo JSP


<%@ page pageEncoding=iso-8859-1 import="java.util.Date" %> <html> <head> <title> Hola, Mundo </title> </head> <body> <h1> Hola, Mundo! </h1> La fecha de hoy es: <%= new Date() %> </body> </html> HolaMundo.jsp

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

Accediendo al JSP
Supongamos que nuestra aplicacin se llama HolaMundo
<Tomcat_Path>/webapps/HolaMundo/

Ubicamos la pgina JSP en la parte pblica de la aplicacin para hacerla accesible al usuario
<Tomcat_Path>/webapps/HolaMundo/HolaMundo.jsp

El usuario accede a la pgina con el navegador


http://un.servidor.net:8080/HolaMundo/HolaMundo.jsp

Qu pasa entonces?
Mario Muoz Organero & Norberto Fernndez Servidores de informacin 5

Accediendo al JSP
Etapas del proceso:
Traduccin:
Se genera el .java del servlet a partir del JSP <Tomcat_Path>/work/Catalina/<server>/HolaMundo/org/apache/jsp/ HolaMundo_jsp.java

Compilacin:
Se compila el .java para obtener el .class

Carga de clase:
La mquina virtual carga la clase

Crear instancia:
Se instancia la clase para crear un objeto con el servlet

Mismas etapas que ciclo de vida de servlet:


Inicializacin, servicio, destruccin
Mario Muoz Organero & Norberto Fernndez Servidores de informacin 6

Ciclo de vida del servlet generado


Cuando se llama por primera vez al fichero JSP, se genera un servlet con las siguientes operaciones _jspInit() Inicializa el servlet generado Slo se llama en la primera peticin _jspService(peticin,respuesta) Maneja las peticiones. Se invoca en cada peticin, incluso en la primera _jspDestroy() Invocada por el motor para eliminar el servlet

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

Elementos de una pgina JSP


Cdigo HTML Adems de cdigo HTML dentro de una pgina JSP nos podemos encontrar con:
Objetos implcitos
Nos permitirn por ejemplo acceder a: solicitud, respuesta, sesin,

Directivas
Instrucciones para el contenedor que sern tenidas en cuenta al generar el servlet

Elementos de Scripting (guiones)


Permiten insertar cdigo Java en la pgina JSP

Acciones
Etiquetas que llevan asociada cierta funcionalidad y que se tienen en cuenta en tiempo de ejecucin
Mario Muoz Organero & Norberto Fernndez Servidores de informacin 9

Objetos implcitos

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

10

Objetos implcitos
JSP utiliza los objetos implcitos, basados en la API de servlets Estos objetos estn disponibles para su uso en pginas JSP. Los ms importantes son:
request
Instancia de HttpServletRequest. Representa la peticin pasada como argumento de _jspService(). Proporciona entre otras cosas los parmetros recibidos del cliente, el tipo de peticin (GET/POST), etc.

response
Instancia de HttpServletResponse que representa la respuesta del servidor a la peticin

session
Instancia de HttpSession, permite acceder a la sesin para leer/escribir datos en ella

out
Instancia de JspWriter, el writer en el que se escribe la respuesta

Pero hay otros: config, application,


Mario Muoz Organero & Norberto Fernndez Servidores de informacin 11

Ejemplo de uso de objetos implcitos


Aplicacin que pide el nombre al usuario y le devuelve un saludo. Utiliza un fichero HTML como formulario que pide los datos al cliente y se los pasa a una pgina JSP que muestra el saludo con stos datos. El paso de los datos del formulario al JSP se realiza a travs de un objeto implcito: el objeto request
Objeto request (contiene los parmetros de la peticin)

Formulario HTML (pide datos al cliente)

Pgina JSP (muestra saludo personalizado al cliente)

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

12

Ejemplo de uso de objetos implcitos


Este es el fichero HTML que pide los datos al cliente
<HTML> <head> <title> Formulario de peticin de nombre </title> </head> <body> <h1> Formulario de peticin de nombre </h1> <!-- Se enva el formulario al JSP saludo.jsp --> <form method="post" action="saludo.jsp" > <p> Por favor, introduce tu nombre: <input type="text" name="nombre"> </p> <p> <input type="submit" value="enviar informacin"> </p> </form> </body> </HTML>

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

13

Ejemplo de uso de objetos implcitos


Fichero JSP que opera con los datos del cliente y muestra los resultados
<HTML> <head><title> Saludo al cliente </title></head> <body> <h1>Saludo al cliente</h1> <!-- Los parmetros que le pasa el cliente en la peticin se obtienen del objeto implcito request --> <% String nombre = request.getParameter(nombre"); out.println(Encantado de conocerle, + nombre); %> <!-- Al evaluarse el cdigo, hay que escribir explcitamente en la salida (obj. implcito out) --> </body> </HTML>

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

14

Directivas

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

15

Directivas JSP
Page
Configuracin de pgina

Include
Incluir otro fichero (HTML, JSP) en el actual

Taglib
Declarar qu libreras de tags se utilizarn en la pgina
Los tags representan acciones

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

16

Directiva Page
Sintaxis: <%@ page ATRIBUTOS %> Donde ATRIBUTOS son parejas: nombre=valor Ejemplo:
<%@ page import=java.rmi.*,java.util.* %>

La lista de atributos que pueden ser usados est predefinida

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

17

Directiva Page
Algunos de los atributos ms usados:

import
Lista de paquetes o clases, separados por comas, que sern importados para utilizarse dentro del cdigo java.

contentType
Especificar el tipo MIME de los contenidos que van a ser generados (por defecto HTML)

pageEncoding
Codificacin de caracteres de la pgina JSP (por defecto iso8859-1)

errorPage
Hace referencia a una pgina que se muestra si se produce alguna excepcin al procesar la pgina JSP y no se captura all

Mario Muoz Organero & Norberto Fernndez Servidores de informacin 18

Directiva Include
Indica al motor JSP que incluya el contenido del fichero correspondiente en el JSP, insertndolo en el lugar en el que aparece la directiva El contenido del fichero incluido es analizado en el momento de la traduccin del fichero JSP y se incluye una copia del mismo dentro del servlet generado Una vez incluido, si se modifica el fichero no se ver reflejado en el servlet El tipo de fichero a incluir puede ser un
fichero HTML (esttico) fichero JSP (dinmico)

Sintaxis <%@ include file=Nombre del fichero %>

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

19

Ejemplo de uso de la Directiva Include


Ejemplo: Pgina JSP que incluye el contenido de dos ficheros (una pgina HTML y una pgina JSP)
<HTML> <head><title>Prueba include</title></head> <body> <h1>Prueba de la directiva include</h1> <%@ include file=fichero.html %> <%@ include file=fichero.jsp %> </body> </HTML>

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

20

Directiva Taglib
Permite extender los marcadores de JSP con etiquetas o marcas generadas por el propio usuario (etiquetas personalizadas) Se hace referencia a una biblioteca de etiquetas que contiene cdigo Java compilado que especifica el comportamiento de las etiquetas que el usuario ha definido Sintaxis: <%@ taglib uri=tag-library-URI prefix=tagPrefix %>

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

21

Elementos de Scripting

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

22

Elementos de Scripting
Permiten la insercin de cdigo Java dentro de una pgina JSP Hay 3 tipos de elementos, que permiten aadir: Declaraciones Cdigo Java arbitrario (scriptlets) Expresiones

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

23

Declaraciones
Usadas para definir variables y mtodos con mbito de clase para el servlet generado Estas variables o mtodos declarados pasarn a ser variables de instancia de la clase servlet generada Esto significa que sern globales a todo el servlet generado para la pgina Sintaxis
<%! Decl. %>

Ejemplo
<%! int contador >

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

24

Scriptlets
Un scriptlet es un bloque de cdigo Java insertado en pgina y ejecutado durante el procesamiento de respuesta El cdigo introducido se inserta directamente en mtodo _jspService() del servlet generado para pgina Sintaxis
<% cdigo Java %>

la la el la

Ejemplo
<% int i,j; for (i=0;i<3;i++) { j=j+1; } %>
Mario Muoz Organero & Norberto Fernndez Servidores de informacin 25

Ejemplo de uso de Scriptlets


<HTML> <head><title> Ejemplo de scriptlet </title></head> <body> <h1> Ejemplo de scriptlet </h1> <% for (int i=0; i<10; i++;) { out.println("<b> Ejemplo de scriptlet " + i + "</b><br>"); System.out.println("Esto va al stream System.out" + i ); // Esto ltimo va a la consola del Java, no al cliente. // El Tomcat lo imprime en <Tomcat_Path>/logs/catalina.out // out a secas es para la respuesta al cliente. } %> </body> </HTML>

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

26

Expresiones
Notacin abreviada que enva el valor de una expresin Java al cliente La expresin se traduce por la llamada al mtodo println del objeto out dentro del mtodo _jspService(), con lo que en cada peticin, la expresin es evaluada y el resultado se convierte a un String y se visualiza Sintaxis <%= Expresin Java a evaluar %> Ejemplo <%= new Date() %>

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

27

Acciones

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

28

Acciones
Son etiquetas, con formato XML, que afectan al comportamiento en tiempo de ejecucin del JSP En la traduccin de JSP al servlet, la marca se reemplaza por cierto cdigo Java asociado a la etiqueta (es como una macro) Existen una serie de acciones estndar predefinidas, pero los usuarios pueden definir las suyas
Utilizando bibliotecas de tags (taglibs)

El nombre de la etiqueta consta de un prefijo y un sufijo. Adems puede haber atributos.


El prefijo es siempre jsp en las acciones estndar

Sintaxis <prefijo:sufijo atributos /> Ejemplo <jsp:include page=mi_jsp.jsp />

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

29

Acciones estndar
Algunas acciones estndar son:
<jsp:include> <jsp:param> <jsp:forward> <jsp:useBean> <jsp:setProperty> <jsp:getProperty>

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

30

Accin jsp:include
Permite incluir un recurso especificado por la URL, en la peticin JSP en tiempo de ejecucin Cuando se realiza la traduccin de JSP al servlet, dentro del mtodo _jspService() se genera el cdigo que incluye el recurso Cuando se ejecuta el servlet, se invoca al mecanismo que incluye el recurso y el resultado se aade a la pgina El elemento incluido puede acceder al objeto request de la pgina padre, y adems de los parmetros normales, a los que se aadan con <jsp:param>

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

31

Accin jsp:include
Sintaxis
<jsp:include page=URL> <jsp:param name=nombre clave value=valor /> // (parmetros no obligatorios) </jsp:include>

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

32

Diferencia accin includedirectiva include


Es importante distinguir entre directiva include y accin include
Directiva <%@ include file=Nombre fichero /> se incluye la informacin del fichero en el momento de hacer la traduccin a servlet (en tiempo de compilacin). Se incluye el contenido EXISTENTE EN EL MOMENTO INICIAL Accin <jsp:include> no se aade cdigo al servlet, sino que se invoca al cdigo que incluye el objeto en tiempo de ejecucin y se aade el contenido EXISTENTE EN EL MOMENTO DE LA PETICIN

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

33

Accin jsp:param
Sirve para pasar parmetros a un objeto
Ejemplo
<jsp:include page=otra_pagina.jsp> <jsp:param name=nombre value=valor /> </jsp:include>

Dentro de otra_pagina.jsp request.getParameter(nombre);

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

34

Accin jsp:forward
Esta marca permite que la peticin sea redirigida a otra pgina JSP, a otro servlet o a otro recurso esttico Muy til cuando se quiere separar la aplicacin en diferentes vistas, dependiendo de la peticin interceptada Cuando se ejecuta el servlet se redirige hacia el destino y no se vuelve al servlet original Sintaxis <jsp:forward page=URL > <jsp:param name=nombre value=valor /> // (no obligatorios) </jsp:forward>

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

35

Ejemplo de uso de la accin forward


Pgina HTML (forward.html) que pide nombre y password y los enva a una pgina JSP que los analiza (forward.jsp)
<HTML> <head> <title>Ejemplo de uso del forward</title> </head> <body> <form method=post action=forward.jsp> Usuario: <input type=text name=userName><br> Clave: <input type=password name=password><br> <input type=submit name=login value=Login> </form> </body> </HTML>

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

36

Ejemplo de uso de la accin forward


Pgina JSP que se ejecuta (forward.jsp)
No tiene nada de HTML En funcin de los valores de los parmetros de la peticin redirige a una segunda pgina JSP (si es un usuario y una clave determinadas) o bien recarga la pgina inicial (incluyndola) Mezcla cdigo Java puro con acciones estndar

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

37

Ejemplo de uso de la accin forward


<% if ((request.getParameter(userName).equals(loQueSea)) && (request.getParameter(password).equals(quienSabe))) { %> <jsp:forward page=saludoforward.jsp /> <% } else { %> <%@ include file=forward.html%> <% } %>

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

38

Accin jsp:useBean
Esta marca sirve para instanciar un JavaBean si no existe, o localizar una instancia ya existente, para su uso desde la pgina Los JavaBeans son objetos Java que cumplen ciertas caractersticas en cuanto a su diseo: son serializables y tienen un constructor implcito (sin argumentos) Se utilizan para reducir al mximo el cdigo Java insertado en una pgina JSP. En lugar de meterlo directamente en el fichero JSP se mete en una clase y una instancia de sta se llama desde el JSP Permite separar la lgica de ejecucin (en el JavaBean) de la presentacin (en el servlet generado) Se encapsula el cdigo Java en un objeto (JavaBean) y se instancia y usa con el JSP

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

39

Accin jsp:useBean
Los JavaBeans se caracterizan porque a sus atributos (llamados propiedades) se acceden (por convenio) a travs de los mtodos setNombreAtributo y getNombreAtributo
Ojo, si el nombre va en minsculas el mtodo lleva la inicial del nombre en maysculas para nombre se pone getNombre.

Si se usa un JavaBean en una pgina habr que definir la clase correspondiente, creando los mtodos set y get para los atributos definidos.
Normalmente se suele definir dentro de un paquete.

Dentro del servlet generado se puede llamar a mtodos de un JavaBean que se encarguen de realizar ciertas operaciones y el servlet muestra el resultado de las mismas

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

40

Accin jsp:useBean
Sintaxis
<jsp:useBean id=nombre scope=mbito class=clase/>

Caractersticas de los atributos de esta accin:


En id se define el nombre asignado al JavaBean (identificador asociado) El mbito se refiere a dnde puede referenciarse el JavaBean
Los veremos a continuacin

El atributo class indica la clase a la que pertenece el bean

Ejemplo:
<jsp:useBean id=cart scope=session class=pkg.Cart/>

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

41

mbitos
Define dnde y durante cunto tiempo estn accesibles los objetos Tipos de mbitos:
Pgina (page): objetos que slo estn accesibles durante la ejecucin del cdigo de una pgina Peticin (request): objetos compartidos entre las diferentes pginas que manejan una peticin, por ejemplo, una pgina y la que maneje errores de la primera, o una pgina y otra a la que se pasa control con la orden jsp:forward Sesin (session): objetos compartidos entre las diferentes pginas que se llamen a travs de una sesin Aplicacin (application): compartidos por todos los objetos dentro de una misma aplicacin del servidor
Mario Muoz Organero & Norberto Fernndez Servidores de informacin 42

Accin jsp:setProperty
Esta marca se utiliza junto con la marca useBean para asignar valor a las propiedades del Bean En el mtodo _jspService() del servlet generado se invoca al mtodo set de la propiedad deseada Sintaxis <jsp:setProperty name=id-Bean propiedad />

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

43

Accin jsp:setProperty
Donde propiedad puede ser property=*
Se cogen como propiedades y valores todos los parmetros del objeto request A la propiedad P del bean se le asigna el valor del parmetro P del objeto request

property=Nombre
El valor se coge de un parmetro con el mismo nombre del objeto request

property=Nombre param=NombreParmetro
El valor de la propiedad Nombre se saca del valor del parmetro NombreParmetro

property=Nombre value=valor parmetro


Se asigna directamente un valor
Mario Muoz Organero & Norberto Fernndez Servidores de informacin 44

Accin jsp:getProperty
Se utiliza para obtener el valor de las propiedades de un Bean. Dentro del mtodo _jspService() del servlet generado se accede al valor de una propiedad, lo convierte a string y lo imprime en la salida del cliente (objeto out) Sintaxis <jsp:getProperty name=id-Bean property=propiedad />

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

45

Un ejemplo: Calculadora

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

46

Un ejemplo: Calculadora

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

47

Un ejemplo: Calculadora

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

48

Un ejemplo: Calculadora

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

49

Un ejemplo: Calculadora

Mario Muoz Organero & Norberto Fernndez

Servidores de informacin

50

Potrebbero piacerti anche