180
1 Java Server Java Server Pages (JSP) Pages (JSP)

1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

Embed Size (px)

Citation preview

Page 1: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

1

Java Server Java Server Pages (JSP)Pages (JSP)

Page 2: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

2

ContenidoContenido1.1. Primer vistazo a la tecnología JSPPrimer vistazo a la tecnología JSP

Qué es y para qué sirve JSPQué es y para qué sirve JSP Primer ejemplo Primer ejemplo Hola Mundo y la fechaHola Mundo y la fecha Uso de objetos implícitos y ejemploUso de objetos implícitos y ejemplo

-> -> Ejercicio: instalación y ejecución de la primera Ejercicio: instalación y ejecución de la primera aplicación web con tecnología JSPaplicación web con tecnología JSP

1.1. Elementos básicos de una página JSPElementos básicos de una página JSP DirectivasDirectivas <%@ (page | include | taglib) <%@ (page | include | taglib) Código JavaCódigo Java <% (declaraciones | java | expresiones) <% (declaraciones | java | expresiones)

-> -> Ejercicios de manejo de ejemplos simplesEjercicios de manejo de ejemplos simples Acciones estándarAcciones estándar <jsp:acción (include |forward | <jsp:acción (include |forward |

usebean| getproperty | setproperty) usebean| getproperty | setproperty) -> -> Ejercicios de manejo de JavaBeansEjercicios de manejo de JavaBeans1.1. Elementos Avanzados de una página JSPElementos Avanzados de una página JSP

Acciones personalizadasAcciones personalizadas (etiquetas) (etiquetas) Definición de la estructura (biblioteca.tld y ésta en web.xml)Definición de la estructura (biblioteca.tld y ésta en web.xml)

Nombre, clase controladoraNombre, clase controladora, atributos, cuerpo, etc., atributos, cuerpo, etc. Definición de la funcionalidad (JavaBean que deriva de taglib)Definición de la funcionalidad (JavaBean que deriva de taglib) Declaración en página con <%@taglib y uso posteriorDeclaración en página con <%@taglib y uso posterior

-> -> Ejercicios de manejo de Etiquetas personalizadasEjercicios de manejo de Etiquetas personalizadas

Page 3: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

3

Introducción a JSPIntroducción a JSP

JSP es una especificación de JSP es una especificación de Sun MicrosystemsSun Microsystems Sirve para crear y gestionar Sirve para crear y gestionar páginas web dinámicaspáginas web dinámicas Permite mezclar en una página código HTML para Permite mezclar en una página código HTML para

generar la parte estática, con contenido dinámico generar la parte estática, con contenido dinámico generado a partir de marcas especiales <% .... %>generado a partir de marcas especiales <% .... %>

El contenido dinámico se obtiene, en esencia, gracias El contenido dinámico se obtiene, en esencia, gracias a la posibilidad de incrustar dentro de la página a la posibilidad de incrustar dentro de la página código Java de diferentes formas código Java de diferentes formas Hay 3 formas de Hay 3 formas de añadir contenido dinámicoañadir contenido dinámico

Su objetivo final es separar la interfaz (presentación Su objetivo final es separar la interfaz (presentación visual) de la implementación (lógica de ejecución)visual) de la implementación (lógica de ejecución)

Page 4: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

4

Introducción a JSPIntroducción a JSP

Página JSP Página JSP Servlet Servlet La página JSP se convierte en un servletLa página JSP se convierte en un servlet La conversión la realiza en la máquina La conversión la realiza en la máquina

servidora el servidora el motor omotor o contenedor JSPcontenedor JSP, la , la primera vez que se solicita la página JSPprimera vez que se solicita la página JSP

Este servlet generado procesa cualquier Este servlet generado procesa cualquier petición para esa página JSPpetición para esa página JSP

Si se modifica el código de la página JSP, Si se modifica el código de la página JSP, entonces se regenera y recompila entonces se regenera y recompila automáticamente el servlet y se recarga la automáticamente el servlet y se recarga la próxima vez que sea solicitadapróxima vez que sea solicitadaFichero.jsp ServletJsp.java ServletJsp.class

Traduce

MotorJSP

Compila

Compilador java

Page 5: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

5

FuncionamientoFuncionamiento

ClienteServidor

Web

MotorJSP

Extensionesdel servidor

MotorServlet

AnalizadorJSP

CompiladorJava

CargadorClases

Fichero.JSP ServletJSP.java ServletJSP.class

Peticiónfichero.jsp

Respuesta

1º vez

1º vez

1º vez

respuesta

petición

respuestarespuesta

petición

Page 6: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

6

Primer ejemplo de JSP Primer ejemplo de JSP

Ejemplo de página que dice Hola y escribe la fecha Ejemplo de página que dice Hola y escribe la fecha actual (fichero ej1_hola.jsp)actual (fichero ej1_hola.jsp)

<%@ page info="Un Hola Mundo“ import="java.util.Date" %><%@ page info="Un Hola Mundo“ import="java.util.Date" %><HTML><HTML><head> <title> Hola, Mundo </title> </head><head> <title> Hola, Mundo </title> </head><body> <h1> ¡Hola, Mundo! </h1> <body> <h1> ¡Hola, Mundo! </h1> La fecha de hoy es: <%= new Date().toString() %>La fecha de hoy es: <%= new Date().toString() %></body></body></HTML></HTML>

En esta página se mezcla código HTML con código Java En esta página se mezcla código HTML con código Java incrustado con unas marcas especialesincrustado con unas marcas especiales

En este caso es una expresión, que se sustituye en la página En este caso es una expresión, que se sustituye en la página por el resultado de evaluarlapor el resultado de evaluarla

En otros casos es un trozo de código Java que simplemente se En otros casos es un trozo de código Java que simplemente se ejecutaejecuta

Page 7: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

7

Ciclo de vida del servlet Ciclo de vida del servlet generadogenerado

Cuando se llama por primera vez al fichero JSP, se Cuando se llama por primera vez al fichero JSP, se genera un servlet con las siguientes operacionesgenera un servlet con las siguientes operaciones

jspInit()jspInit() Inicializa el servlet generadoInicializa el servlet generado Sólo se llama en la primera peticiónSólo se llama en la primera petición

jspService(petición,respuesta)jspService(petición,respuesta) Maneja las peticiones. Se invoca en cada Maneja las peticiones. Se invoca en cada

petición, incluso en la primerapetición, incluso en la primera jspDestroy()jspDestroy()

Invocada por el motor para eliminar el servletInvocada por el motor para eliminar el servlet

Page 8: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

8

Servlet generado por un Servlet generado por un JSPJSP

En el método En el método _jspService_jspService se introduce se introduce automáticamente el contenido dinámico de la automáticamente el contenido dinámico de la página JSP.página JSP. El código html se transforma en una llamada al El código html se transforma en una llamada al

objeto out donde se vuelca el contenido En el objeto out donde se vuelca el contenido En el ejemplo:ejemplo:

out.write("\r\n\r\n<HTML>\r\n<head> <title> Hola, out.write("\r\n\r\n<HTML>\r\n<head> <title> Hola, Mundo </title> </head>\r\n\r\n<body> <h1> ¡Hola, Mundo </title> </head>\r\n\r\n<body> <h1> ¡Hola, Mundo! </h1> \r\nLa fecha de hoy es: ");Mundo! </h1> \r\nLa fecha de hoy es: ");

El código dinámico se traduce en función del El código dinámico se traduce en función del contenidocontenido

Ej: El código jsp Ej: El código jsp <%= new Date().toString() %><%= new Date().toString() %> se se traduce por traduce por out.print( new Date().toString() );out.print( new Date().toString() );

Page 9: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

9

Servlet generado por un Servlet generado por un JSPJSP

En la primera invocación de esta página se genera En la primera invocación de esta página se genera automáticamente el siguiente servlet:automáticamente el siguiente servlet:

public class public class ej1_0005fhola$jsp ej1_0005fhola$jsp extends HttpJspBase {extends HttpJspBase {..........public final void _jspx_init() throws JasperException { ...public final void _jspx_init() throws JasperException { ...public void _jspService(HttpServletRequest request, public void _jspService(HttpServletRequest request,

HttpServletResponse response)HttpServletResponse response) throws IOException, ServletException {throws IOException, ServletException {.... .... JspFactory _jspxFactory = null;JspFactory _jspxFactory = null; PageContext pageContext = null;PageContext pageContext = null; HttpSession session = null;HttpSession session = null; ServletContext application = null;ServletContext application = null; ServletConfig config = null;ServletConfig config = null; JspWriter out = null;JspWriter out = null; Object page = this;Object page = this; String _value = null;String _value = null;

Page 10: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

10

Servlet generado por un Servlet generado por un JSPJSPtry {try { if (_jspx_inited == false) {if (_jspx_inited == false) { _jspx_init();_jspx_init(); _jspx_inited = true;_jspx_inited = true; }} _jspxFactory = JspFactory.getDefaultFactory();_jspxFactory = JspFactory.getDefaultFactory();

response.setContentType("text/HTML;charset=ISO-8859-1");response.setContentType("text/HTML;charset=ISO-8859-1"); pageContext = pageContext =

_jspxFactory.getPageContext(this, request, response,"", _jspxFactory.getPageContext(this, request, response,"", true, 8192, true);true, 8192, true);

application = pageContext.getServletContext();application = pageContext.getServletContext(); config = pageContext.getServletConfig();config = pageContext.getServletConfig(); session = pageContext.getSession();session = pageContext.getSession(); out = pageContext.getOut();out = pageContext.getOut();

Page 11: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

11

Servlet generado por un Servlet generado por un JSPJSP

// HTML// HTML// begin [file="C:\\web\\jakarta-tomcat3.2.2\\webapps\\// begin [file="C:\\web\\jakarta-tomcat3.2.2\\webapps\\

marian\\hola.jsp";from=(0,40);to=(6,20)]marian\\hola.jsp";from=(0,40);to=(6,20)] out.write("\r\n\r\n<HTML>\r\n<head> <title> Hola, Mundo out.write("\r\n\r\n<HTML>\r\n<head> <title> Hola, Mundo

</title> </head>\r\n\r\n<body> <h1> ¡Hola, Mundo! </title> </head>\r\n\r\n<body> <h1> ¡Hola, Mundo! </h1> \r\nLa fecha de hoy es:</h1> \r\nLa fecha de hoy es: "); ");

// end// end// begin [file="C:\\web\\jakarta-tomcat3.2.2\\webapps\\// begin [file="C:\\web\\jakarta-tomcat3.2.2\\webapps\\

marian\\hola.jsp";from=(6,23);to=(6,46)]marian\\hola.jsp";from=(6,23);to=(6,46)] out.print( new Date().toString() );out.print( new Date().toString() );// end// end// HTML // begin [file="C:\\web\\jakarta-tomcat3.2.2\\// HTML // begin [file="C:\\web\\jakarta-tomcat3.2.2\\

webapps\\marian\\hola.jsp";from=(6,48);to=(11,0)]webapps\\marian\\hola.jsp";from=(6,48);to=(11,0)] out.write("\r\n\r\n</body>\r\n</HTML>\r\n\r\n");out.write("\r\n\r\n</body>\r\n</HTML>\r\n\r\n");// end// end

Page 12: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

12

Objetos implícitosObjetos implícitos

JSP utiliza los objetos implícitos, basados en la JSP utiliza los objetos implícitos, basados en la API de servlets. API de servlets.

Estos objetos están disponibles para su uso en Estos objetos están disponibles para su uso en páginas JSP y son los siguientes:páginas JSP y son los siguientes:

Objeto requestObjeto request Representa la petición lanzada en la Representa la petición lanzada en la

invocación de service(). Proporciona entre invocación de service(). Proporciona entre otras cosas los parámetros recibidos del otras cosas los parámetros recibidos del cliente, el tipo de petición (GET/POST)cliente, el tipo de petición (GET/POST)

Objeto responseObjeto response Instancia de HttpServletResponse que Instancia de HttpServletResponse que

representa la respuesta del servidor a la representa la respuesta del servidor a la petición. Ámbito de páginapetición. Ámbito de página

Page 13: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

13

Objetos implícitosObjetos implícitos

outout: Es el PrintWriter usado para enviar la salida al : Es el PrintWriter usado para enviar la salida al cliente. Es una versión con buffer de PrintWriter cliente. Es una versión con buffer de PrintWriter llamada JspWriter. Podemos ajustar el tamaño del llamada JspWriter. Podemos ajustar el tamaño del buffer, o incluso desactivar el buffer, usando el buffer, o incluso desactivar el buffer, usando el atributo buffer de la directiva page. Se usa casi atributo buffer de la directiva page. Se usa casi exclusivamente en scriptlets ya que las expresiones exclusivamente en scriptlets ya que las expresiones JSP obtienen un lugar en el stream de salida, y por eso JSP obtienen un lugar en el stream de salida, y por eso raramente se refieren explícitamente a out. raramente se refieren explícitamente a out.

sessionsession: Este es el objeto HttpSession asociado con la : Este es el objeto HttpSession asociado con la petición. Las sesiones se crean automáticamente, salvo petición. Las sesiones se crean automáticamente, salvo que se use el atributo session de la directiva page para que se use el atributo session de la directiva page para desactivar las sesiones, en cuyo caso los intentos de desactivar las sesiones, en cuyo caso los intentos de referenciar la variable session causarán un error en el referenciar la variable session causarán un error en el momento de traducir la página JSP a un servlet.momento de traducir la página JSP a un servlet.

Page 14: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

14

Objetos implícitosObjetos implícitos

applicationapplication: El ServletContext obtenido mediante : El ServletContext obtenido mediante getServletConfig().getContext(). getServletConfig().getContext().

configconfig: El objeto ServletConfig.: El objeto ServletConfig. pageContextpageContext: JSP presenta una nueva clase llamada : JSP presenta una nueva clase llamada

PageContext para encapsular características de uso PageContext para encapsular características de uso específicas del servidor como JspWriters de alto específicas del servidor como JspWriters de alto rendimiento. La idea es que, si tenemos acceso a ellas rendimiento. La idea es que, si tenemos acceso a ellas a través de esta clase en vez directamente, nuestro a través de esta clase en vez directamente, nuestro código seguirá funcionando en motores servlet/JSP código seguirá funcionando en motores servlet/JSP "normales"."normales".

pagepage: Esto es sólo un sinónimo de this, y no es muy : Esto es sólo un sinónimo de this, y no es muy útil en Java. Fue creado como situación para el día útil en Java. Fue creado como situación para el día que el los lenguajes de script puedan incluir otros que el los lenguajes de script puedan incluir otros lenguajes distintos de Java.lenguajes distintos de Java.

Page 15: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

15

ÁmbitosÁmbitos

Define dónde y durante cuanto tiempo están Define dónde y durante cuanto tiempo están accesibles los objetos (Objetos implícitos, accesibles los objetos (Objetos implícitos, JavaBeans, etc)JavaBeans, etc)

Tipos de ámbitos:Tipos de ámbitos: de página. El objeto es accesible por el servlet de página. El objeto es accesible por el servlet

que representa la páginaque representa la página de petición de petición de sesión. El objeto es accesible durante toda de sesión. El objeto es accesible durante toda

la sesión, desde los servlets a los que se la sesión, desde los servlets a los que se accedeaccede

de aplicación. El objeto es accesible por el de aplicación. El objeto es accesible por el servlet que representa la páginaservlet que representa la página

Page 16: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

16

Ejemplo de objetos Ejemplo de objetos implícitosimplícitosAplicación que pide el nombre al usuario y le devuelve Aplicación que pide el nombre al usuario y le devuelve

un saludo . Utiliza un fichero HTML como formulario un saludo . Utiliza un fichero HTML como formulario que pide los datos al cliente y se los pasa a una que pide los datos al cliente y se los pasa a una página JSP que muestra el saludo con estos datos. El página JSP que muestra el saludo con estos datos. El paso de los datos del formulario al JSP se realiza a paso de los datos del formulario al JSP se realiza a través de un objeto través de un objeto implícitoimplícito: objeto request: objeto request

Formulario HTML(pide datos al cliente)

Página JSP(muestra saludo

personalizado al cliente)

Objeto request(contiene los parámetros de

la petición)

Page 17: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

17

Ejemplo de objetos Ejemplo de objetos implícitosimplícitos

Fichero HTML que pide los datos al cliente Fichero HTML que pide los datos al cliente (ej2_saludo.html) (ej2_saludo.html)

<HTML><HTML> <head><head> <title> Formulario de petición de nombre </title><title> Formulario de petición de nombre </title> </head></head> <body><body> <h1> Formulario de petición de nombre </h1><h1> Formulario de petición de nombre </h1> <!-- Se envía el formulario al JSP “saludo.jsp”<!-- Se envía el formulario al JSP “saludo.jsp” --> --> <form method="post" action="saludo.jsp" ><form method="post" action="saludo.jsp" > <p> Por favor, introduce tu nombre:<p> Por favor, introduce tu nombre: <input type="text" name="nombre"><input type="text" name="nombre"> </p></p> <p> <p> <input type="submit" value="enviar información"><input type="submit" value="enviar información"> </p></p> </form> </body></form> </body></HTML></HTML>

Page 18: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

18

Ejemplo de objetos Ejemplo de objetos implícitosimplícitosFichero JSP que opera dinámicamente con los datos Fichero JSP que opera dinámicamente con los datos

del cliente y muestra los resultados del cliente y muestra los resultados (ej2_saludo.jsp)(ej2_saludo.jsp)

<HTML><HTML><head><title> Saludo al cliente </title></head><head><title> Saludo al cliente </title></head><body><body> <h1> Saludo al cliente</h1><h1> Saludo al cliente</h1> <!-- Los parámetros que le pasa el cliente en la petición <!-- Los parámetros que le pasa el cliente en la petición

se obtienen del objeto implícito request -->se obtienen del objeto implícito request --><%<% String nombre = request.getParameter(”nombre"); String nombre = request.getParameter(”nombre"); out.println(”Encantado de conocerle, “ + nombre);out.println(”Encantado de conocerle, “ + nombre);%>%> <!-- Al evaluarse el código, hay que escribir <!-- Al evaluarse el código, hay que escribir

explícitamente en la salida (obj. implícito out) --> explícitamente en la salida (obj. implícito out) --> </body></body></HTML></HTML>

Page 19: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

19

Elementos de una página Elementos de una página JSPJSP Código HTMLCódigo HTML

Además de código HTML la página JSP puede Además de código HTML la página JSP puede incluir marcadores que se agrupan en tres incluir marcadores que se agrupan en tres categorías:categorías: Directivas.Directivas.

Afectan a toda la estructura del servlet generadoAfectan a toda la estructura del servlet generado Elementos de ScriptingElementos de Scripting (guiones) (guiones)

Permiten insertar código Java en la página JSPPermiten insertar código Java en la página JSP AccionesAcciones

Afectan al comportamiento en tiempo de ejecución Afectan al comportamiento en tiempo de ejecución del JSPdel JSP

Page 20: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

20

Directivas JSPDirectivas JSP

Utilizadas para definir y manipular una Utilizadas para definir y manipular una serie de atributos dependientes de la serie de atributos dependientes de la página que afectan a todo el JSP.página que afectan a todo el JSP.

Las directivas existentes son las Las directivas existentes son las siguientes:siguientes: PagePage IncludeInclude TaglibTaglib

Page 21: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

21

Sintaxis Sintaxis

<%@ page ATRIBUTOS %><%@ page ATRIBUTOS %>

Donde ATRIBUTOS son parejas:Donde ATRIBUTOS son parejas:

nombre=”valor”nombre=”valor” Ejemplo:Ejemplo:

<%@ <%@ page language=”Java” page language=”Java” import=”java.rmi.*,java.util.*” import=”java.rmi.*,java.util.*”

session=”true” buffer=”12kb” %>session=”true” buffer=”12kb” %>

Existe una lista de atributos que pueden ser Existe una lista de atributos que pueden ser usadosusados

Directivas de JSP - Directivas de JSP - Directiva PageDirectiva Page

Page 22: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

22

Algunos de los atributos más usados:Algunos de los atributos más usados: import import ="="package.classpackage.class". ".

Lista de paquetes o clases, separados por Lista de paquetes o clases, separados por comas, que serán importados para utilizarse comas, que serán importados para utilizarse dentro del código java.dentro del código java.

session =“true|false”session =“true|false” Especifica si la página participa en una sesión Especifica si la página participa en una sesión

HTTP. Si se inicializa a true, está disponible el HTTP. Si se inicializa a true, está disponible el objeto implícito sesión.objeto implícito sesión.

buffer =“tamañokb”buffer =“tamañokb” Especifica el tamaño de un buffer de salida de Especifica el tamaño de un buffer de salida de

tipo stream, para el cliente.tipo stream, para el cliente.

Directivas de JSP - Directivas de JSP - Directiva PageDirectiva Page

Page 23: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

23

Directivas de JSP - Directiva Directivas de JSP - Directiva PagePage autoflush ="true|false". autoflush ="true|false".

Un valor de true (por defecto) indica que el buffer Un valor de true (por defecto) indica que el buffer debería desacargase cuando esté lleno. Un valor de debería desacargase cuando esté lleno. Un valor de false, raramente utilizado, indica que se debe lanzar false, raramente utilizado, indica que se debe lanzar una excepción cuando el buffe se sobrecargue. Un valor una excepción cuando el buffe se sobrecargue. Un valor de false es ilegal cuando usamos buffer="none". de false es ilegal cuando usamos buffer="none".

extends ="extends ="package.classpackage.class". ". Esto indica la superclase del servlet que se va a Esto indica la superclase del servlet que se va a

generar. Debemos usarla con extrema precaución, ya generar. Debemos usarla con extrema precaución, ya que el servidor podría utilizar una superclase que el servidor podría utilizar una superclase personalizada.personalizada.

info ="info ="messagemessage". ". Define un string que puede usarse para ser recuperado Define un string que puede usarse para ser recuperado

mediante el método getServletInfo. mediante el método getServletInfo.

Page 24: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

24

Directivas de JSP - Directiva Directivas de JSP - Directiva PagePage errorPage="errorPage="urlurl". ".

Especifica una página JSP que se debería procesar si se Especifica una página JSP que se debería procesar si se lanzará cualquier Throwable pero no fuera capturado lanzará cualquier Throwable pero no fuera capturado en la página actual.en la página actual.

isErrorPage="true|false". isErrorPage="true|false". Indica si la página actual actúa o no como página de Indica si la página actual actúa o no como página de

error de otra página JSP. El valor por defecto es false. error de otra página JSP. El valor por defecto es false. ContentType = "MIME-Type" o contentType = ContentType = "MIME-Type" o contentType =

"MIME-Type; charset = Character-Set" "MIME-Type; charset = Character-Set" Esto especifica el tipo MIME de la salida. El valor por Esto especifica el tipo MIME de la salida. El valor por

defecto es text/html. Tiene el mismo valor que el defecto es text/html. Tiene el mismo valor que el scriptlet usando “response.setContentType”.scriptlet usando “response.setContentType”.

Page 25: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

25

Directivas de JSP - Directivas de JSP - Directiva PageDirectiva Page isThreadSafe="true|false"isThreadSafe="true|false"

Un valor de true (por defecto) indica un procesamiento Un valor de true (por defecto) indica un procesamiento del servlet normal, donde múltiples peticiones pueden del servlet normal, donde múltiples peticiones pueden procesarse simultáneamente con un sólo ejemplar del procesarse simultáneamente con un sólo ejemplar del servlet, bajo la suposición que el autor sincroniza los servlet, bajo la suposición que el autor sincroniza los recursos compartidos. Un valor de false indica que el recursos compartidos. Un valor de false indica que el servlet debería implementar SingleThreadModel. servlet debería implementar SingleThreadModel.

language="java"language="java" En algunos momentos, esto está pensado para En algunos momentos, esto está pensado para

especificar el lenguaje a utilizar. Por ahora, no debemos especificar el lenguaje a utilizar. Por ahora, no debemos precuparnos por él ya que java es tanto el valor por precuparnos por él ya que java es tanto el valor por defecto como la única opción legal. defecto como la única opción legal.

Page 26: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

26

Indica al motor JSP que incluya el contenido del Indica al motor JSP que incluya el contenido del fichero correspondiente en el JSP, insertándolo en el fichero correspondiente en el JSP, insertándolo en el lugar de la directiva del JSP. lugar de la directiva del JSP.

El contenido del fichero incluido es analizado en el El contenido del fichero incluido es analizado en el momento de la traducción del fichero JSP y se incluye momento de la traducción del fichero JSP y se incluye una copia del mismo dentro del servlet generado.una copia del mismo dentro del servlet generado.

Una vez incluido, si se modifica el fichero incluido no Una vez incluido, si se modifica el fichero incluido no se verá reflejado en el servletse verá reflejado en el servlet

El tipo de fichero a incluir puede ser un El tipo de fichero a incluir puede ser un fichero HTML (estático)fichero HTML (estático) fichero jsp (dinámico)fichero jsp (dinámico)

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

Directivas de JSP - Directiva Directivas de JSP - Directiva IncludeInclude

Page 27: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

27

Ejemplo:Página JSP que incluye el contenido de Ejemplo:Página JSP que incluye el contenido de dos ficheros (una página HTML y una página dos ficheros (una página HTML y una página JSP)JSP)

<HTML><HTML>

<head><head>

<title> Página de prueba de directivas de compilación <title> Página de prueba de directivas de compilación </title></title>

</head></head>

<body><body>

<h1> Página de prueba de directivas de compilación <h1> Página de prueba de directivas de compilación </h1></h1>

<%@ include file=”/fichero.html” %><%@ include file=”/fichero.html” %>

<%@ include file=”/fichero.jsp” %><%@ include file=”/fichero.jsp” %>

</body></body>

</HTML></HTML>

Ejemplo de la Directiva Ejemplo de la Directiva IncludeInclude

Page 28: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

28

Siendo, por ejemplo el fichero HTML el Siendo, por ejemplo el fichero HTML el siguiente:siguiente:

<HTML><HTML>

<head> <title> Hola, Mundo </title> </head><head> <title> Hola, Mundo </title> </head>

<body> <h1> ¡Hola, Mundo! </h1> <body> <h1> ¡Hola, Mundo! </h1>

</body></body>

</HTML></HTML>

y el fichero JSP el siguiente:y el fichero JSP el siguiente:

<%@ page info="Un ejemplo Hola Mundo" <%@ page info="Un ejemplo Hola Mundo" import="java.util.Date" %>import="java.util.Date" %>

La fecha de hoy es: La fecha de hoy es: <%= new Date().toString() %><%= new Date().toString() %>

Ejemplo de la Directiva Ejemplo de la Directiva IncludeInclude

Page 29: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

29

Permite extender los marcadores de JSP con Permite extender los marcadores de JSP con etiquetas o marcas generadas por el propio etiquetas o marcas generadas por el propio usuario (etiquetas personalizadas). usuario (etiquetas personalizadas).

Se hace referencia a una biblioteca de etiquetas Se hace referencia a una biblioteca de etiquetas que contiene código Java compilado definiendo que contiene código Java compilado definiendo las etiquetas que van a ser usadas, y que han las etiquetas que van a ser usadas, y que han sido definidas por el usuariosido definidas por el usuario

SintaxisSintaxis<%@ taglib uri=”taglibraryURI” prefix=”tagPrefix” <%@ taglib uri=”taglibraryURI” prefix=”tagPrefix”

%>%>

Directivas de JSP - Directiva Directivas de JSP - Directiva TaglibTaglib

Page 30: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

30

Elementos de una página Elementos de una página JSPJSP Código HTMLCódigo HTML DirectivasDirectivas

pagepage includeinclude taglibtaglib

Elementos de ScriptingElementos de Scripting (guiones) (guiones) AccionesAcciones (marcas estandar) (marcas estandar)

Page 31: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

31

Elementos ScriptingElementos Scripting

Permiten la inserción de Permiten la inserción de DeclaracionesDeclaraciones, , Código Código Java Java (scriptlets) y (scriptlets) y ExpresionesExpresiones dentro de una dentro de una página JSPpágina JSP

Hay 3 categorías:Hay 3 categorías: Declaraciones Declaraciones Código Java arbitrarioCódigo Java arbitrario ExpresionesExpresiones

Page 32: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

32

Usadas para definir variables y métodos Usadas para definir variables y métodos con con ámbito de claseámbito de clase para el servlet generado para el servlet generado

Estas variables o métodos declarados pasarán a Estas variables o métodos declarados pasarán a ser variables de instancia de la clase servlet ser variables de instancia de la clase servlet generadagenerada

Esto significa que serán globales a todo el servlet Esto significa que serán globales a todo el servlet generado para la páginagenerado para la página

SintaxisSintaxis<%! Declaración %><%! Declaración %>

Ejemplo:Ejemplo:<%! int contador ><%! int contador >

Elementos Scripting - Elementos Scripting - DeclaracionesDeclaraciones

Page 33: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

33

Uso de un contador que indica el número de veces Uso de un contador que indica el número de veces que se accede a una página que se accede a una página (ej5_declaraciones.jsp)(ej5_declaraciones.jsp)

<HTML><HTML><head><title> Página de control de declaraciones <head><title> Página de control de declaraciones

</title></head></title></head><body><body> <h1> Página de control de declaraciones </h1><h1> Página de control de declaraciones </h1> <%! int i=0 ; %><%! int i=0 ; %> <!-- Esto es una declaración --> <!-- Esto es una declaración --> <% i++; %><% i++; %> <!-- scriptlet (código Java) que se ejecuta-- <!-- scriptlet (código Java) que se ejecuta--

>> HOLA MUNDOHOLA MUNDO <%= "Este JSP ha sido accedido " + i + ” veces" %><%= "Este JSP ha sido accedido " + i + ” veces" %><!-- Esto es una expresión que se evalúa y se sustituye en <!-- Esto es una expresión que se evalúa y se sustituye en

la página por su resultado -->la página por su resultado --></body></body></HTML></HTML>

Ejemplo de uso de Ejemplo de uso de DeclaracionesDeclaraciones

Page 34: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

34

Un scriptlet es un bloque de código Java insertado en Un scriptlet es un bloque de código Java insertado en la página y ejecutado durante el procesamiento de la la página y ejecutado durante el procesamiento de la

respuestarespuesta El código introducido se inserta directamente en el El código introducido se inserta directamente en el

método _jspService() del servlet generado para la método _jspService() del servlet generado para la páginapágina

Sintaxis Sintaxis

<% código Java %><% código Java %> EjemploEjemplo

<% int i,j;<% int i,j;

for (i=0;i<3;i++) {for (i=0;i<3;i++) {

j=j+1;j=j+1;

}}

%>%>

Elementos Scripting - Elementos Scripting - ScriptletsScriptlets

Page 35: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

35

Página JSP que usa código Java para repetir 10 Página JSP que usa código Java para repetir 10 veces un saludoveces un saludo

<HTML><HTML><head><title> Página de ejemplo de scriptlet </title></head><head><title> Página de ejemplo de scriptlet </title></head><body> <body> <h1> Página de ejemplo de scriptlet </h1><h1> Página de ejemplo de scriptlet </h1> <%<% for (int i=0; i<10; i++;){for (int i=0; i<10; i++;){ out.println("<b> Hola a todos. Esto es un ejemplo de out.println("<b> Hola a todos. Esto es un ejemplo de

scriptlet " + i + "</b><br>");scriptlet " + i + "</b><br>"); System.out.println("Esto va al stream System.out" + System.out.println("Esto va al stream System.out" +

i );i );//Esto último va a la consola del Java, no al //Esto último va a la consola del Java, no al

cliente,cliente,//out a secas es para la respuesta al cliente.//out a secas es para la respuesta al cliente.

}} %>%></body></body></HTML></HTML>

Ejemplo de uso de Ejemplo de uso de ScriptletsScriptlets

Page 36: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

36

Notación abreviada que envía el valor de una Notación abreviada que envía el valor de una expresión Java al cliente.expresión Java al cliente.

La expresión se traduce por la llamada al método La expresión se traduce por la llamada al método println del objeto out dentro del método println del objeto out dentro del método _jspService(), con lo que en cada petición, la _jspService(), con lo que en cada petición, la expresión es evaluada y el resultado expresión es evaluada y el resultado se convierte a se convierte a un String y se visualizaun String y se visualiza

SintaxisSintaxis

<%= Expresión Java a evaluar %><%= Expresión Java a evaluar %> EjemploEjemplo

<%= “Esta expresión muestra el valor de un contador “ + <%= “Esta expresión muestra el valor de un contador “ + contador %>contador %>

Nota: será necesario que previamente contador haya tomado Nota: será necesario que previamente contador haya tomado un valor a través de un scriptletun valor a través de un scriptlet

Elementos Scripting - Elementos Scripting - ExpresionesExpresiones

Page 37: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

37

En esta página JSP la expresión consiste en crear En esta página JSP la expresión consiste en crear un objeto y llamar a uno de sus métodos. El un objeto y llamar a uno de sus métodos. El resultado es un string que se muestra al clienteresultado es un string que se muestra al cliente

<HTML><HTML>

<head><head>

<title> Página de ejemplo de expresiones </title><title> Página de ejemplo de expresiones </title>

</head></head>

<body><body>

<h1> Página de ejemplo de expresiones </h1><h1> Página de ejemplo de expresiones </h1>

Hola a todos, son las <%= new Date().toString() %>Hola a todos, son las <%= new Date().toString() %>

</body></body>

</HTML></HTML>

Ejemplo de uso de Ejemplo de uso de ExpresionesExpresiones

Page 38: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

38

EjerciciosEjercicios1.1. Con los ejemplos existentes en el directorio JSP\Con los ejemplos existentes en el directorio JSP\

ejemplossimples ejemplossimples • Ejecutarlos, visualizar el contenido de los ficheros, visualizar Ejecutarlos, visualizar el contenido de los ficheros, visualizar

el contenido de alguno de los servlets generados para ellos el contenido de alguno de los servlets generados para ellos

2.2. Modificar el fichero ej4_incluido.html y comprobar que Modificar el fichero ej4_incluido.html y comprobar que dichas modificaciones no aparecen reflejadas por la dichas modificaciones no aparecen reflejadas por la directiva directiva

3.3. Ejecutar la sumadora situada en el directorio sumadoraEjecutar la sumadora situada en el directorio sumadora

4.4. Crear una aplicación que funcione como calculadora con Crear una aplicación que funcione como calculadora con todas las operaciones.todas las operaciones.

• Basarse en ej2_saludo.html para hacer el formulario y Basarse en ej2_saludo.html para hacer el formulario y sumadora.jspsumadora.jsp

• Usar la instrucción if(operación.equals(“restar”) Usar la instrucción if(operación.equals(“restar”) resultado=… resultado=…

5.5. Crear una aplicación que funciones como euroconversorCrear una aplicación que funciones como euroconversor

Page 39: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

39

Elementos de una página Elementos de una página JSPJSP Código HTMLCódigo HTML DirectivasDirectivas

pagepage includeinclude taglibtaglib

Elementos de ScriptingElementos de Scripting (guiones) (guiones) Declaraciones Declaraciones Código Java arbitrarioCódigo Java arbitrario ExpresionesExpresiones

AccionesAcciones Acciones estándarAcciones estándar Acciones personalizadasAcciones personalizadas

Page 40: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

40

Acciones estándar Acciones estándar Son marcas estándar, con formato XML, que Son marcas estándar, con formato XML, que

afectan al comportamiento en tiempo de ejecución afectan al comportamiento en tiempo de ejecución del JSP y la respuesta se devuelve al cliente.del JSP y la respuesta se devuelve al cliente.

En la traducción de JSP al servlet, la marca se En la traducción de JSP al servlet, la marca se reemplaza por cierto código Java que define a dicha reemplaza por cierto código Java que define a dicha marca. Una marca por tanto define un cierto código marca. Una marca por tanto define un cierto código Java (es como una macro)Java (es como una macro)

Constan de un prefijo y un sufijo además de una Constan de un prefijo y un sufijo además de una serie de atributos. El prefijo es siempre “serie de atributos. El prefijo es siempre “jspjsp” en las ” en las acciones estándaracciones estándar

SintaxisSintaxis<jsp:sufijo atributos/><jsp:sufijo atributos/>

EjemploEjemplo<jsp:include page=“mijsp.jsp” “flush=“true” /><jsp:include page=“mijsp.jsp” “flush=“true” />

Page 41: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

41

<jsp:include><jsp:include> <jsp:forward><jsp:forward> <jsp:param><jsp:param>

<jsp:useBean><jsp:useBean> <jsp:setProperty><jsp:setProperty> <jsp:getProperty><jsp:getProperty>

<jsp:plugin><jsp:plugin>

Acciones estándar Acciones estándar existentesexistentes

Page 42: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

42

Permite incluir un recurso especificado por la URL, Permite incluir un recurso especificado por la URL, en la petición JSP en en la petición JSP en tiempo de ejecucióntiempo de ejecución..

Cuando se realiza la traducción de JSP al servlet, Cuando se realiza la traducción de JSP al servlet, dentro del método _jspService() se genera el código dentro del método _jspService() se genera el código que comprueba si existe el recurso (página) y si no se que comprueba si existe el recurso (página) y si no se crea, invocándolo a continuación.crea, invocándolo a continuación.

Cuando se ejecuta el servlet, se invoca al recurso que Cuando se ejecuta el servlet, se invoca al recurso que realiza la operación y devuelve el resultado al servletrealiza la operación y devuelve el resultado al servlet

El elemento incluido puede acceder al objeto request El elemento incluido puede acceder al objeto request de la página padre, y además de los parámetros de la página padre, y además de los parámetros normales, a los que se añadan con <jsp:param>normales, a los que se añadan con <jsp:param>

Acción jsp:includeAcción jsp:include

Page 43: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

43

SintaxisSintaxis

<jsp:include page=“URL” flush=“true”><jsp:include page=“URL” flush=“true”><jsp:param name=“nombre clave” <jsp:param name=“nombre clave”

value=“valor” /> (no obligatorios) value=“valor” /> (no obligatorios) ........

</jsp:include></jsp:include>

Acción jsp:includeAcción jsp:include

Page 44: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

44

Es importante distinguir entre directiva include y Es importante distinguir entre directiva include y acción includeacción include

Directiva <%@ include file=“Nombre fichero” /> Directiva <%@ include file=“Nombre fichero” /> se añade el código al servlet que se genera para se añade el código al servlet que se genera para la página en tiempo de compilación y se incluye la página en tiempo de compilación y se incluye el contenido EXISTENTE EN EL MOMENTO el contenido EXISTENTE EN EL MOMENTO INICIAL.INICIAL.

Acción <jsp:include> no se añade código al Acción <jsp:include> no se añade código al servlet, sino que se invoca al objeto en tiempo de servlet, sino que se invoca al objeto en tiempo de ejecución y se ejecuta el contenido EXISTENTE ejecución y se ejecuta el contenido EXISTENTE EN EL MOMENTO DE LA PETICIÓNEN EL MOMENTO DE LA PETICIÓN

Acción include vs Directiva Acción include vs Directiva includeinclude

Page 45: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

45

<HTML><HTML>

<head><head>

<title> Inclusión de fichero </title><title> Inclusión de fichero </title>

</head></head>

<body><body>

<h1> Inclusión de ficheros </h1><h1> Inclusión de ficheros </h1>

<%@ include file="incluido.jsp" %><%@ include file="incluido.jsp" %>

<jsp:include page=“incluido.jsp” /><jsp:include page=“incluido.jsp” />

</body></body>

</HTML></HTML> Fichero incluido (“Fichero incluido (“incluido.jspincluido.jsp”)”)

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

<%= "Fecha actual es " + new Date() %><%= "Fecha actual es " + new Date() %>

Ejemplo de la acción Ejemplo de la acción includeinclude

Page 46: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

46

<jsp:include><jsp:include>

<jsp:param><jsp:param>

<jsp:forward><jsp:forward>

<jsp:useBean><jsp:useBean> <jsp:setProperty><jsp:setProperty> <jsp:getProperty><jsp:getProperty>

<jsp:plugin><jsp:plugin>

Tipos de acciones Tipos de acciones existentesexistentes

Page 47: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

47

Se usa como submarca dentro de cualquier otra Se usa como submarca dentro de cualquier otra marcamarca

Sirve para pasar parámetros a un objetoSirve para pasar parámetros a un objeto

SintaxisSintaxis

<jsp:.... ><jsp:.... >

<jsp:param name=“nombre clave” <jsp:param name=“nombre clave” value=“valor” /> (no obligatorios)value=“valor” /> (no obligatorios)

........

</jsp:.... ></jsp:.... >

Acción jsp:paramAcción jsp:param

Page 48: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

48

<jsp:include><jsp:include>

<jsp:param><jsp:param>

<jsp:forward><jsp:forward>

<jsp:useBean><jsp:useBean> <jsp:setProperty><jsp:setProperty> <jsp:getProperty><jsp:getProperty>

<jsp:plugin><jsp:plugin>

Tipos de acciones Tipos de acciones existentesexistentes

Page 49: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

49

Esta marca permite que la petición sea redirigida a Esta marca permite que la petición sea redirigida a otra página JSP, a otro servlet o a otro recurso estáticootra página JSP, a otro servlet o a otro recurso estático

Muy útil cuando se quiere separar la aplicación en Muy útil cuando se quiere separar la aplicación en diferentes vistas, dependiendo de la petición diferentes vistas, dependiendo de la petición interceptada.interceptada.

Cuando se ejecuta el servlet se redirige hacia otro Cuando se ejecuta el servlet se redirige hacia otro servlet y no se vuelve al servlet originalservlet y no se vuelve al servlet original

SintaxisSintaxis

<jsp:forward page=“URL” ><jsp:forward page=“URL” >

<jsp:param name=“nombre clave” <jsp:param name=“nombre clave” value=“valor” /> (no obligatorios)value=“valor” /> (no obligatorios)

........

</jsp:forward></jsp:forward>

Acción jsp:forwardAcción jsp:forward

Page 50: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

50

Formulario HTML que pide nombre y password y los Formulario HTML que pide nombre y password y los envía a una página jsp que lo analiza envía a una página jsp que lo analiza (forward.jsp)(forward.jsp)<HTML><HTML> <head> <title> Ejemplo de uso del forward <head> <title> Ejemplo de uso del forward </title> </head></title> </head>

<body><body> <h1> Ejemplo de uso del forward </h1><h1> Ejemplo de uso del forward </h1> <form method=“post” action=“forward.jsp”><form method=“post” action=“forward.jsp”> <input type=“text” name=“userName”><input type=“text” name=“userName”> <br> y clave:<br> y clave: <input type=“password” name=“password”><input type=“password” name=“password”> </p></p> <p><input type=“submit” name=“log in”><p><input type=“submit” name=“log in”> </form></form></body></body></HTML></HTML>

Ejemplo de la acción Ejemplo de la acción forwardforward

Page 51: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

51

Página JSP que lo ejecutaPágina JSP que lo ejecuta No tiene nada de HTMLNo tiene nada de HTML En función de los valores de los parámetros de En función de los valores de los parámetros de

la petición redirige a una segunda página JSP la petición redirige a una segunda página JSP (si es un usuario y una clave determinadas) o (si es un usuario y una clave determinadas) o bien recarga la página inicial (incluyéndola)bien recarga la página inicial (incluyéndola)

Mezcla código Java puro con acciones Mezcla código Java puro con acciones estándardestándard

Ejemplo de la acción Ejemplo de la acción forwardforward

Page 52: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

52

<% if <% if ((request.getParameter(“userName”).equals(((request.getParameter(“userName”).equals(“Ricardo”)) && “Ricardo”)) && (request.getParameter(“password”).equals(“(request.getParameter(“password”).equals(“xyzzy”))) {xyzzy”))) {

%>%>

<jsp:forward page=“saludoforward.jsp” /><jsp:forward page=“saludoforward.jsp” />

<% } else { %><% } else { %>

<%@ include file=“forward.html”%><%@ include file=“forward.html”%>

<% } %><% } %>

Ejemplo de la acción Ejemplo de la acción forwardforward

Page 53: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

53

El programa El programa saludoforward.jspsaludoforward.jsp podría ser el siguiente: podría ser el siguiente:

<HTML><HTML>

<head><head>

<title> Saludo al cliente </title><title> Saludo al cliente </title>

</head></head>

<body><body>

<h1> Saludo al cliente</h1><h1> Saludo al cliente</h1>

<%<%

out.println(“Bienvenido a la nueva out.println(“Bienvenido a la nueva aplicación");aplicación");

%>%>

</body> </HTML></body> </HTML>

Ejemplo de la acción Ejemplo de la acción forwardforward

Page 54: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

54

<jsp:include><jsp:include> <jsp:forward><jsp:forward>

<jsp:param><jsp:param>

<jsp:useBean><jsp:useBean> <jsp:setProperty><jsp:setProperty> <jsp:getProperty><jsp:getProperty>

<jsp:plugin><jsp:plugin>

Tipos de acciones Tipos de acciones existentesexistentes

Page 55: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

55

Esta marca sirve para instanciar un JavaBean si no Esta marca sirve para instanciar un JavaBean si no existe, o localizar una instancia ya existente, para su existe, o localizar una instancia ya existente, para su uso desde la página. uso desde la página.

Los JavaBeans son objetos Java que cumplen Los JavaBeans son objetos Java que cumplen ciertas características en cuanto a su diseño: ciertas características en cuanto a su diseño: son serializables y tienen un constructor son serializables y tienen un constructor implícito.implícito.

Se utilizan para reducir al máximo el código Java Se utilizan para reducir al máximo el código Java insertado en una página JSP. En lugar de meterlo insertado en una página JSP. En lugar de meterlo directamente en el fichero JSP se mete en directamente en el fichero JSP se mete en una clase una clase y una instancia de éstay una instancia de ésta se llama desde el JSP se llama desde el JSP

Permite separar la lógica de ejecución (en el Permite separar la lógica de ejecución (en el JavaBean) de la presentación (en el servlet generado)JavaBean) de la presentación (en el servlet generado) Se encapsula el código Java en un objeto Se encapsula el código Java en un objeto

(JavaBean) y se instancia y usa con el JSP.(JavaBean) y se instancia y usa con el JSP.

Acción jsp:useBeanAcción jsp:useBean

Page 56: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

56

Los JavaBeans se caracterizan porque a sus atributos Los JavaBeans se caracterizan porque a sus atributos (llamados propiedades) se acceden (por convenio) a (llamados propiedades) se acceden (por convenio) a través de los métodos setNombreAtributo y través de los métodos setNombreAtributo y getNombreAtributogetNombreAtributo Ojo, si el nombre va en minúsculas el método lleva la inicial del Ojo, si el nombre va en minúsculas el método lleva la inicial del

nombre en mayúsculas para “nombre” se pone “getNombre”.nombre en mayúsculas para “nombre” se pone “getNombre”. Si se usa un JavaBean en una página Si se usa un JavaBean en una página habrá que definir habrá que definir

la clase correspondientela clase correspondiente, creando los métodos set y get , creando los métodos set y get para los atributos definidos. para los atributos definidos. Normalmente se suele Normalmente se suele definir dentro de un paquete.definir dentro de un paquete.

Dentro del servlet generado se puede llamar a métodos Dentro del servlet generado se puede llamar a métodos de un JavaBean que se encarguen de realizar ciertas de un JavaBean que se encarguen de realizar ciertas operaciones y el servlet muestra el resultado de las operaciones y el servlet muestra el resultado de las mismasmismas

Ventaja del traslado de la lógica a un JavaBeanVentaja del traslado de la lógica a un JavaBean Separación de interfaz de la implementaciónSeparación de interfaz de la implementación

Acción jsp:useBeanAcción jsp:useBean

Page 57: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

57

SintaxisSintaxis<jsp:useBean id=“nombre” scope=“nombreámbito” <jsp:useBean id=“nombre” scope=“nombreámbito” detallesdetalles /> />

Características de los atributos de esta acción:Características de los atributos de esta acción: En id se define el nombre asignado al JavaBean En id se define el nombre asignado al JavaBean

(identificador asociado)(identificador asociado) El ámbito se refiere a dónde puede referenciarse El ámbito se refiere a dónde puede referenciarse

el JavaBean. Permite compartir objetos en una el JavaBean. Permite compartir objetos en una sesiónsesión ““page”,”request”,”session” y “application”page”,”request”,”session” y “application”

Acción jsp:useBeanAcción jsp:useBean

Page 58: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

58

Acción jsp:useBeanAcción jsp:useBean

Los detalles pueden ser:Los detalles pueden ser: class=“Nombre de la clase del JavaBean”class=“Nombre de la clase del JavaBean” (es lo que más (es lo que más

se usa)se usa) idid: Da un nombre a la variable que referencia al bean. Se : Da un nombre a la variable que referencia al bean. Se

usará un objeto bean anterior en lugar de instanciar uno usará un objeto bean anterior en lugar de instanciar uno nuevo si se puede encontrar uno con el mismo id y scope. nuevo si se puede encontrar uno con el mismo id y scope.

class:class: Designa el nombre completo del paquete del bean. Designa el nombre completo del paquete del bean. scope:scope: Indica el contexto en el que el bean debería estar Indica el contexto en el que el bean debería estar

disponible. Hay cuatro posibles valores: page, request, disponible. Hay cuatro posibles valores: page, request, session, y application. session, y application.

type:type: Especifica el tipo de la variable a la que se referirá el Especifica el tipo de la variable a la que se referirá el objeto.objeto.

beanName:beanName: Da el nombre del bean, como lo Da el nombre del bean, como lo suministraríamos en el método instantiate de Beans. Esta suministraríamos en el método instantiate de Beans. Esta permitido suministrar un type y un beanName, y omitir el permitido suministrar un type y un beanName, y omitir el atributo class.atributo class.

Page 59: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

59

Esta marca se utiliza junto con la marca useBean Esta marca se utiliza junto con la marca useBean para asignar valor a las propiedades del Beanpara asignar valor a las propiedades del Bean

En el método En el método _jspService()_jspService() del servlet generado del servlet generado se invoca al método se invoca al método setset de la propiedad deseada. de la propiedad deseada.

2 usos:2 usos: Después de un useBean.Después de un useBean.<jsp:useBean id="myName" ... /><jsp:useBean id="myName" ... />

......

<jsp:setProperty name="myName“<jsp:setProperty name="myName“

property="someProperty" ... />property="someProperty" ... />

Se ejecuta siempre que haya una solicitud.Se ejecuta siempre que haya una solicitud.

Acción jsp:setPropertyAcción jsp:setProperty

Page 60: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

60

Acción jsp:setPropertyAcción jsp:setProperty

Dentro de un useBeanDentro de un useBean

<jsp:useBean id="myName“ ... ><jsp:useBean id="myName“ ... >

    ...  ...  

<jsp:setProperty name="myName" <jsp:setProperty name="myName" property="someProperty" ... />property="someProperty" ... />

</jsp:useBean></jsp:useBean>

Sólo se ejecuta cuando haya que Sólo se ejecuta cuando haya que instanciar un bean.instanciar un bean.

Page 61: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

61

SintaxisSintaxis<jsp:setProperty name=“identificador del Bean” detalles <jsp:setProperty name=“identificador del Bean” detalles de la propiedad />de la propiedad />

Donde los detalles pueden serDonde los detalles pueden ser property:property: Este atributo requerido indica la propiedad que Este atributo requerido indica la propiedad que

queremos seleccionar. Sin embargo, hay un caso especial: un queremos seleccionar. Sin embargo, hay un caso especial: un valor de "*" significa que todos los parámetros de la petición valor de "*" significa que todos los parámetros de la petición cuyos nombres correspondan con nombres de propiedades del cuyos nombres correspondan con nombres de propiedades del Bean serán pasados a los métodos de selección apropiados.Bean serán pasados a los métodos de selección apropiados.

value:value: Este atributo opcional especifica el valor para la Este atributo opcional especifica el valor para la propiedad. Los valores string son convertidos propiedad. Los valores string son convertidos automáticamente a lo que corresponda mediante el método automáticamente a lo que corresponda mediante el método estándard valueOf. No se pueden usar value y param juntos, estándard valueOf. No se pueden usar value y param juntos, pero si está permitido no usar ninguna.pero si está permitido no usar ninguna.

paramparam: Este parámetro opcional designa el parámetro de la petición : Este parámetro opcional designa el parámetro de la petición del que se debería derivar la propiedad. Si la petición actual no tiene del que se debería derivar la propiedad. Si la petición actual no tiene dicho parámetro, no se hace nada: el sistema no pasa null al método dicho parámetro, no se hace nada: el sistema no pasa null al método seleccionador de la propiedad. seleccionador de la propiedad.

Acción jsp:setPropertyAcción jsp:setProperty

Page 62: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

62

Acción jsp:setPropertyAcción jsp:setProperty

property=“*” (se cogen como propiedades property=“*” (se cogen como propiedades y valores todos los parámetros del objeto y valores todos los parámetros del objeto request)request)

property=“Nombre” (se coge un parámetro property=“Nombre” (se coge un parámetro con el mismo nombre del objeto request)con el mismo nombre del objeto request)

property=“Nombre” property=“Nombre” param=“NombreParámetro” (si se desean param=“NombreParámetro” (si se desean nombres distintos)nombres distintos)

property=“Nombre” value=“valor property=“Nombre” value=“valor parámetro” (se asignan propiedades parámetro” (se asignan propiedades arbitrarias con valores concretos)arbitrarias con valores concretos)

Page 63: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

63

Se utiliza para obtener el valor de las Se utiliza para obtener el valor de las propiedades de un Bean. propiedades de un Bean.

Dentro del método Dentro del método _jspService()_jspService() del servlet del servlet generado se accede al valor de una propiedad, generado se accede al valor de una propiedad, lo lo convierte a string y lo imprime en la salida convierte a string y lo imprime en la salida del cliente (objeto out)del cliente (objeto out)..

SintaxisSintaxis<jsp:getProperty> name=“nombre del Bean” <jsp:getProperty> name=“nombre del Bean” property=“Nombre de la propiedad” />property=“Nombre de la propiedad” />

Acción jsp:getPropertyAcción jsp:getProperty

Page 64: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

64

((lenguaje/beans.htmllenguaje/beans.html))

<HTML><HTML>

<head><head>

<title> Página de prueba del uso de beans </title><title> Página de prueba del uso de beans </title>

</head> </head>

<body><body>

<h1> Página de prueba del uso de beans </h1> <h1> Página de prueba del uso de beans </h1>

<form method="post" action="beans.jsp" ><form method="post" action="beans.jsp" >

Se envía el formulario al servicio cuyo fichero es Se envía el formulario al servicio cuyo fichero es “beans.jsp”“beans.jsp”

<p> Por favor, introduce tu nombre:<p> Por favor, introduce tu nombre:

<input type="text" name="nombre"><input type="text" name="nombre">

<br> ¿Cuál es tu lenguaje de programación favorito?<br> ¿Cuál es tu lenguaje de programación favorito?

[...][...]

Ej. de uso de JavaBean Ej. de uso de JavaBean (Formulario cliente)(Formulario cliente)

Page 65: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

65

[...][...]

<select name="lenguaje"><select name="lenguaje">

<option value="Java"> Java<option value="Java"> Java

<option value="C++"> C++<option value="C++"> C++

<option value="Perl"> Perl<option value="Perl"> Perl

</select></select>

</p></p>

<p> <p>

<input type="submit" value="enviar información"><input type="submit" value="enviar información">

</p></p>

</form> </form>

</body> </body>

</HTML></HTML>

Ej. de uso de JavaBean Ej. de uso de JavaBean (Formulario cliente)(Formulario cliente)

Page 66: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

66

Fichero Fichero lenguaje/beans.jsplenguaje/beans.jsp que usa un Bean que usa un Bean para elaborar los resultados y los muestrapara elaborar los resultados y los muestra

<jsp:useBean id="lenguajeBean" scope="page" <jsp:useBean id="lenguajeBean" scope="page" class="es.uniovi.di.servinfo.lenguaje.LenguajeBean"> class="es.uniovi.di.servinfo.lenguaje.LenguajeBean">

Usa un Bean generado a partir de la clase denominada Usa un Bean generado a partir de la clase denominada “LenguajeBean” que está en el paquete “LenguajeBean” que está en el paquete “es.uniovi.di.servinfo.lenguaje” con ámbito de página“es.uniovi.di.servinfo.lenguaje” con ámbito de página

<jsp:setProperty name="lenguajeBean" property="*"/> <jsp:setProperty name="lenguajeBean" property="*"/>

Las propiedades del Bean las toma del objeto peticiónLas propiedades del Bean las toma del objeto petición

</jsp:useBean></jsp:useBean>

<HTML> <HTML>

<head><title> Resultado de prueba del uso de beans </title> <head><title> Resultado de prueba del uso de beans </title> </head></head>

Ej. de uso de JavaBean (Fichero Ej. de uso de JavaBean (Fichero jsp)jsp)

Page 67: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

67

<body> <h1> Resultado de prueba del uso de beans </h1> <body> <h1> Resultado de prueba del uso de beans </h1>

<p> Hola <p> Hola

<jsp:getProperty name="lenguajeBean" property="nombre" />. <jsp:getProperty name="lenguajeBean" property="nombre" />. </p> </p>

coge el valor de la propiedad indicada y lo imprime para lo coge el valor de la propiedad indicada y lo imprime para lo cual se ejecuta un método del Bean con el nombre de la cual se ejecuta un método del Bean con el nombre de la propiedadpropiedad

<p> Tu lenguaje favorito es <p> Tu lenguaje favorito es

<jsp:getProperty name="lenguajeBean" property="lenguaje" <jsp:getProperty name="lenguajeBean" property="lenguaje" />. </p> />. </p>

<p> Mis comentarios acerca del lenguaje<p> Mis comentarios acerca del lenguaje

<p> <jsp:getProperty name="lenguajeBean" <p> <jsp:getProperty name="lenguajeBean" property="comentariosLenguaje" />. </p>property="comentariosLenguaje" />. </p>

</body> </HTML></body> </HTML>

Ej. de uso de JavaBeanEj. de uso de JavaBean (Fichero jsp)(Fichero jsp)

Page 68: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

68

Clase LenguajeBean (Clase LenguajeBean (classes\classes\es.uniovi.di.servinfo.lenguaje.LenguajeBean.javes.uniovi.di.servinfo.lenguaje.LenguajeBean.javaa))

package es.uniovi.di.servinfo.lenguaje;package es.uniovi.di.servinfo.lenguaje;

public class LenguajeBean {public class LenguajeBean {

// propiedades// propiedades

private String nombre;private String nombre;

private String lenguaje;private String lenguaje;

// constructor implicito, no hace falta declararlo// constructor implicito, no hace falta declararlo

public LenguajeBean() {}public LenguajeBean() {}

[…][…]

Ej. de uso de JavaBeanEj. de uso de JavaBean (Definición (Definición de la clase)de la clase)

Page 69: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

69

// Coloca el valor a la propiedad “Nombre”// Coloca el valor a la propiedad “Nombre”public void setNombre(String nombre) {public void setNombre(String nombre) { this.nombre=nombre; this.nombre=nombre; }}// Recupera el valor de la propiedad nombre// Recupera el valor de la propiedad nombrepublic String getNombre() {public String getNombre() {

return nombre; return nombre; }}

//// Coloca el valor a la propiedad “lenguaje”Coloca el valor a la propiedad “lenguaje”public void setLenguaje(String lenguaje) { public void setLenguaje(String lenguaje) { this.lenguaje=lenguaje;this.lenguaje=lenguaje; }}// Consigue el valor de la propiedad “Lenguaje”// Consigue el valor de la propiedad “Lenguaje”public String getLenguaje() { public String getLenguaje() {

return lenguaje; }return lenguaje; } [...][...]

Ej. de uso de JavaBean (Definición de Ej. de uso de JavaBean (Definición de la clase)la clase)

Page 70: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

70

/*/* Consigue el valor de la propiedad “comentariosLenguaje” */Consigue el valor de la propiedad “comentariosLenguaje” */public String getcomentariosLenguaje () {public String getcomentariosLenguaje () { if (lenguaje.equals("Java")) {if (lenguaje.equals("Java")) { return "El rey de los lenguajes Orientados a objetos"; return "El rey de los lenguajes Orientados a objetos";

} }else if (lenguaje.equals("C++")) {else if (lenguaje.equals("C++")) { return "Demasiado complejo";return "Demasiado complejo"; }}else if (lenguaje.equals("Perl")) {else if (lenguaje.equals("Perl")) { return "OK si te gusta el código incomprensible"; }return "OK si te gusta el código incomprensible"; } else {else { return "Lo siento, no conozco el lenguaje " + return "Lo siento, no conozco el lenguaje " +

lenguaje ;lenguaje ; }} }}}}

Ej. de uso de JavaBean Ej. de uso de JavaBean (Definición (Definición de la clase)de la clase)

Page 71: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

71

Acción jsp:pluginAcción jsp:plugin

Permite incluir applets en la jsp que la definePermite incluir applets en la jsp que la define, , sin que el programador deba preocuparse ni por su sin que el programador deba preocuparse ni por su correcta visualización en el cliente ni de que sus correcta visualización en el cliente ni de que sus recursos se hospeden en el mismo servidor que la jsp. recursos se hospeden en el mismo servidor que la jsp. No obstante, cuando en la máquina cliente hay No obstante, cuando en la máquina cliente hay instaladas varias versiones del JRE, puede haber instaladas varias versiones del JRE, puede haber problemas.problemas.

Lo que hace esta acción es identificar el tipo y versión Lo que hace esta acción es identificar el tipo y versión del cliente web mediante el encabezado de petición del cliente web mediante el encabezado de petición User-Agent y generar código html específico para ese User-Agent y generar código html específico para ese cliente que permita asegurar la correcta visualización cliente que permita asegurar la correcta visualización del applet sin importar versión ni tipo de cliente.del applet sin importar versión ni tipo de cliente.

Tiene muchos atributos coincidentes con los de la Tiene muchos atributos coincidentes con los de la etiqueta <applet> asociada a los applets Java. Los etiqueta <applet> asociada a los applets Java. Los principales son los siguientes:principales son los siguientes:

Page 72: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

72

Acción jsp:plugin - Acción jsp:plugin - AtributosAtributos typetype

El valor “applet” es el más normal.El valor “applet” es el más normal. Indica el tipo de componente que va a Indica el tipo de componente que va a

insertarseinsertarse Si incluimos un bean gráfico, Si incluimos un bean gráfico,

utilizaríamos “bean”utilizaríamos “bean” ObligatorioObligatorio

codecode Nombre de la clase del appletNombre de la clase del applet ObligatorioObligatorio

Page 73: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

73

Acción jsp:plugin - Acción jsp:plugin - AtributosAtributos widthwidth

Anchura en píxelesAnchura en píxeles ObligatorioObligatorio

heightheight Altura en píxelesAltura en píxeles ObligatorioObligatorio

codebasecodebase En el caso de que no se encuentre En el caso de que no se encuentre

donde su archivo html asociadodonde su archivo html asociado

Page 74: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

74

Acción jsp:plugin - Acción jsp:plugin - AtributosAtributos

Se utiliza para ejecutar applets Se utiliza para ejecutar applets ubicados en un servidor distinto de ubicados en un servidor distinto de aquel en el que está el jspaquel en el que está el jsp

No es obligatorioNo es obligatorio archivearchive

Indica el fichero jar donde están Indica el fichero jar donde están almacenados el applet y sus recursosalmacenados el applet y sus recursos

No es obligatorioNo es obligatorio Hay más, pero estos son los más Hay más, pero estos son los más

utilizadosutilizados

Page 75: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

75

Acción jsp:plugin - Acción jsp:plugin - EjemploEjemplo<html><html><head><title>Boletin de noticias con <head><title>Boletin de noticias con

applet</title></head>applet</title></head><body><body><h1>Boletin de noticias CON APPLET</h1><h1>Boletin de noticias CON APPLET</h1><b>Jueguecillo de capitales (es un <b>Jueguecillo de capitales (es un

applet):</b><p>applet):</b><p>

<jsp:plugin type="applet" <jsp:plugin type="applet" code="JuegoCapitales.class" width="700" code="JuegoCapitales.class" width="700" height="350">height="350">

</jsp:plugin><hr><p></jsp:plugin><hr><p>

Page 76: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

76

Acción jsp:plugin - Acción jsp:plugin - EjemploEjemplo

<!-- Si los recursos del applet se encuentran <!-- Si los recursos del applet se encuentran en un servidor distinto de aquél enen un servidor distinto de aquél en

que se encuentra la jsp donde se declara la que se encuentra la jsp donde se declara la acción -->acción -->

<%-- <jsp:plugin type="applet" <%-- <jsp:plugin type="applet" code="JuegoCapitales.class" code="JuegoCapitales.class" codebase="http://www10.brinkster.com/codebase="http://www10.brinkster.com/trilcejf/applets" trilcejf/applets" width="700" height="350">width="700" height="350">

</jsp:plugin> --%></jsp:plugin> --%>

Page 77: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

77

Acción jsp:plugin - Acción jsp:plugin - EjemploEjemplo<b>Resumen de noticias:</b><p><b>Resumen de noticias:</b><p><ol><ol> <li><jsp:include <li><jsp:include

page="/Noticia1.html"/><hr><p>page="/Noticia1.html"/><hr><p> <li><jsp:include <li><jsp:include

page="/Noticia2.html"/><hr><p>page="/Noticia2.html"/><hr><p> <li><jsp:include page="/Noticia3.jsp"><li><jsp:include page="/Noticia3.jsp">

<jsp:param name="origen" value="El <jsp:param name="origen" value="El País" />País" />

</jsp:include><hr><p></jsp:include><hr><p></ol></ol></body></body></html></html>

Page 78: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

78

JSP 2.0JSP 2.0

Algunas nuevas características de Algunas nuevas características de JSP 2.0 frente a 1.2 orientadas a JSP 2.0 frente a 1.2 orientadas a simplificar su desarrollo son:simplificar su desarrollo son: Simple Expression Language (EL)Simple Expression Language (EL) Fragmentos JSPFragmentos JSP Ficheros de TagsFicheros de Tags Manejadores de Etiquetas SimplificadosManejadores de Etiquetas Simplificados

Page 79: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

79

Simple Expression Simple Expression LanguageLanguage La Expression Language, está inspirada en los La Expression Language, está inspirada en los

lenguajes de expresiones de ECMAScript y XPathlenguajes de expresiones de ECMAScript y XPath Simplifican el uso de expresiones en JSPs. Simplifican el uso de expresiones en JSPs. Permite la ejecución de expresiones fuera de los elementos Permite la ejecución de expresiones fuera de los elementos

de scripting de JSPde scripting de JSP Fue introducida con JSTL 1.0 como un mecanismo Fue introducida con JSTL 1.0 como un mecanismo

alternativo al uso de expresiones en Java para asignar alternativo al uso de expresiones en Java para asignar valores a atributosvalores a atributos

Desde JSP 2.0 el JSP container entiende expresiones Desde JSP 2.0 el JSP container entiende expresiones en ELen EL

EL es mucho más tolerante sobre variables sin valor EL es mucho más tolerante sobre variables sin valor ((nullnull) y realiza conversiones automáticas de datos) y realiza conversiones automáticas de datos

Se puede habilitar (por defecto) o deshabilitar el Se puede habilitar (por defecto) o deshabilitar el uso de expresiones EL: uso de expresiones EL: <%@ page isScriptingEnabled="true|false" <%@ page isScriptingEnabled="true|false" isELEnabled="true|falseisELEnabled="true|false"%>"%>

Page 80: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

80

Sintaxis de ELSintaxis de EL

Una expresión en EL contiene variables y Una expresión en EL contiene variables y operadoresoperadores

${expr}${expr}, donde , donde exprexpr es: es: Literales:Literales:

truetrue o o falsefalse IntegerInteger Floating pointFloating point StringString nullnull

Ejemplos:Ejemplos:${false} <%-- evaluates to false --%>${false} <%-- evaluates to false --%>${3*8} ${3*8}

Page 81: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

81

Sintaxis de ELSintaxis de EL

${expr}${expr}, donde , donde exprexpr es: es: Operadores:Operadores:

Aritméticos: +, -, *, /, div, %, mod, -Aritméticos: +, -, *, /, div, %, mod, - Lógicos: and, &&, or, ||, !, notLógicos: and, &&, or, ||, !, not Relacionales: ==, eq, !=, ne, <, lt, <, gt, <=, le, >=, geRelacionales: ==, eq, !=, ne, <, lt, <, gt, <=, le, >=, ge Vacío, Vacío, emptyempty, valida si una variable es null o una collección , valida si una variable es null o una collección

no tiene elementosno tiene elementos Llamadas a función, donde Llamadas a función, donde funcfunc es el nombre de la función es el nombre de la función

y args es 0 o más argumentos separados por comas.y args es 0 o más argumentos separados por comas. Condicional: Condicional: A ? B: CA ? B: C, como en C y Java, como en C y Java

Ejemplos:Ejemplos:${ (6 * 5) + 5 } <%-- evaluates to 35 --%>${ (6 * 5) + 5 } <%-- evaluates to 35 --%>${empty name} ${empty name}

Page 82: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

82

Sintaxis de ELSintaxis de EL

${expr}${expr}, donde , donde exprexpr es: es: Objetos implícitos:Objetos implícitos:

pageContextpageContext contexto del JSP, puede usarse para acceder a contexto del JSP, puede usarse para acceder a objetos implícitos como request, response, session, out, objetos implícitos como request, response, session, out, servletContext, etc.servletContext, etc.

EjemploEjemplo: : ${pageContext.response} ${pageContext.response} paramparam

$(param.name) <-> request.getParameter (name)$(param.name) <-> request.getParameter (name) paramValuesparamValues

${paramvalues.name) <-> request.getParamterValues(name )${paramvalues.name) <-> request.getParamterValues(name ) headerheader

${header.name} <-> request.getHeader(name)${header.name} <-> request.getHeader(name) headerValuesheaderValues

${headerValues.name} <-> request.getHeaderValues(name)${headerValues.name} <-> request.getHeaderValues(name) cookiecookie

${cookie.name.value}${cookie.name.value} devuelve el valor de la primera cookie devuelve el valor de la primera cookie con el nombre dadocon el nombre dado

initParaminitParam initParam.name initParam.name ServletContext.getInitparameter(String ServletContext.getInitparameter(String

name)name)

Page 83: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

83

Sintaxis de ELSintaxis de EL

${expr}${expr}, donde , donde exprexpr es: es: Objetos implícitos:Objetos implícitos:

pageScopepageScope puede acceder a objetos puede acceder a objetos dentro del contexto de páginadentro del contexto de página${pageScope.objectName} ${pageScope.objectName} ${pageScope.objectName.attributeName}. ${pageScope.objectName.attributeName}.

requestScoperequestScope ${requestScope.objectName} ${requestScope.objectName} ${requestScope.objectName.attributeName}${requestScope.objectName.attributeName}

sessionScopesessionScope${sessionScope.name} ${sessionScope.name}

applicationScopeapplicationScope

Page 84: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

84

Ejemplos ELEjemplos EL

${amount + 5}${amount + 5} , añade 5 a una variable , añade 5 a una variable amountamount

${order.amount + 5}${order.amount + 5}, añade 5 a la , añade 5 a la propiedad amount del bean orderpropiedad amount del bean order Lo mismo sería hacer: Lo mismo sería hacer: ${order['amount'] + 5}${order['amount'] + 5}

Para asignar un valor dinámico a un Para asignar un valor dinámico a un atributo podemos hacer:atributo podemos hacer:<input name="firstName" value="$<input name="firstName" value="${customer.firstName}">{customer.firstName}">

Page 85: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

85

Ejemplos ELEjemplos EL

El operador El operador ??::<select name="artist"><select name="artist"><option value="1" <option value="1" ${param.artist == 1 ? ${param.artist == 1 ? 'selected' : ''}'selected' : ''}>>

Vesica PiscesVesica Pisces<option value="2" ${param.artist == 2 ? <option value="2" ${param.artist == 2 ? 'selected' : ''}>'selected' : ''}>

Cortical ControlCortical Control<option value="3" ${param.artist == 3 ? <option value="3" ${param.artist == 3 ? 'selected' : ''}>'selected' : ''}>

Vida VierraVida Vierra</select></select>

Page 86: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

86

Páginas de Error JSPPáginas de Error JSP

Errores en servlets and JSPs desde su versión 2.0 Errores en servlets and JSPs desde su versión 2.0 vienen dadas en la variable vienen dadas en la variable javax.servlet.error.exceptionjavax.servlet.error.exception

La propiedad La propiedad errorDataerrorData del objeto implícito del objeto implícito pageContextpageContext expone información sobre el expone información sobre el problema. problema.

javax.servlet.jsp.ErrorDatajavax.servlet.jsp.ErrorData tiene las tiene las siguientes propiedades:siguientes propiedades: requestURIrequestURI la URI para la que falló la petición la URI para la que falló la petición servletNameservletName el nombre del servlet o JSP que falló el nombre del servlet o JSP que falló statusCodestatusCode el código del fallo el código del fallo throwablethrowable la excepción que causó la invocación de la la excepción que causó la invocación de la

página de errorpágina de error

Page 87: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

87

Páginas de Error JSPPáginas de Error JSP

<%@ page isErrorPage="true" contentType="text/html" %><%@ page isErrorPage="true" contentType="text/html" %><%@ taglib prefix="log" uri="http://jakarta.apache.org/taglibs/log-1.0" %><%@ taglib prefix="log" uri="http://jakarta.apache.org/taglibs/log-1.0" %>

Sorry, but things didn't work out as planned. I've logged as much asSorry, but things didn't work out as planned. I've logged as much asI know about the problem, so rest assured that my master will lookI know about the problem, so rest assured that my master will lookinto what's wrong as soon as he's sober.into what's wrong as soon as he's sober.

<jsp:useBean id="now" class="java.util.Date" /><jsp:useBean id="now" class="java.util.Date" /><log:fatal><log:fatal> ---------- ${now}${now} Request that failed: ${pageContext.errorData.requestURI}Request that failed: ${pageContext.errorData.requestURI} Status code: ${pageContext.errorData.statusCode}Status code: ${pageContext.errorData.statusCode} Exception: ${pageContext.errorData.throwable}Exception: ${pageContext.errorData.throwable} ----------</log:fatal></log:fatal>

Page 88: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

88

Páginas de Error JSPPáginas de Error JSP

En el En el web.xmlweb.xml se puede indicar que esta es la se puede indicar que esta es la página de error mediante los siguientes página de error mediante los siguientes elementos:elementos:...... <error-page><error-page> <exception-type>java.lang.Throwable</exception-<exception-type>java.lang.Throwable</exception-type>type>

<location>/error.jsp</location><location>/error.jsp</location> </error-page></error-page> <error-page><error-page> <exception-code>500</exception-code><exception-code>500</exception-code> <location>/error.jsp</location><location>/error.jsp</location> </error-page></error-page>......

Page 89: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

89

web.xmlweb.xml en JSP 2.0 en JSP 2.0

Aunque se sigue utilizando Aunque se sigue utilizando web.xmlweb.xml hay dos hay dos diferencias principales:diferencias principales: Las reglas de Las reglas de web.xml web.xml están definidas en un XML están definidas en un XML

Schema Schema Las configuraciones específicas de JSP han sido Las configuraciones específicas de JSP han sido

movidas a un nuevo elemento XMLmovidas a un nuevo elemento XML Usar Schemas en vez de DTDs nos permite Usar Schemas en vez de DTDs nos permite

colocar los elementos XML de primer nivel en colocar los elementos XML de primer nivel en cualquier orden y realizar aún mas verificaciones cualquier orden y realizar aún mas verificaciones sobre la sintaxis de sobre la sintaxis de web.xmlweb.xml

Todos los elementos específicos a la Todos los elementos específicos a la configuración de un JSP se encuentran configuración de un JSP se encuentran agrupados dentro del nuevo elemento agrupados dentro del nuevo elemento <jsp-<jsp-config>config>..

Page 90: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

90

Elemento Elemento jsp-configjsp-config

Su subelemento Su subelemento <jsp-property-group><jsp-property-group> es es muy interesante.muy interesante. Permite aplicar configuraciones a un grupo de Permite aplicar configuraciones a un grupo de

JSPs que conforman con un patrón de url JSPs que conforman con un patrón de url específicoespecífico...... <jsp-config><jsp-config> <jsp-property-group><jsp-property-group> <url-pattern>*.jsp</url-pattern><url-pattern>*.jsp</url-pattern> <scripting-invalid>true</scripting-invalid><scripting-invalid>true</scripting-invalid> </jsp-property-group></jsp-property-group> </jsp-config></jsp-config>......

Page 91: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

91

Elemento Elemento jsp-configjsp-config

ElementoElemento Descripción

<el-<el-ignoredignored>>

Indica si ignorar o no las expresiones EL dentro de un JSP Indica si ignorar o no las expresiones EL dentro de un JSP correspondiente al patrón URL indicado. Por defecto es correspondiente al patrón URL indicado. Por defecto es false. false.

<scripting-<scripting-invalid>invalid> Si es true no se pueden introducir scriplets en el JSP. Si es true no se pueden introducir scriplets en el JSP.

<page-<page-encodinencoding>g>

Indica la codificación de caracteres para un conjunto de Indica la codificación de caracteres para un conjunto de JSPsJSPs

<include-<include-coda>coda>

Indica el path correspondiente a un fichero a añadir al final Indica el path correspondiente a un fichero a añadir al final de cada página JSP.. de cada página JSP..

<include-<include-preludeprelude>>

Lo mismo pero al comienzo de cada JSP.Lo mismo pero al comienzo de cada JSP.

<is-xml><is-xml> Si se asigna a true la sintaxis de los JSPs es en XML. Si se asigna a true la sintaxis de los JSPs es en XML.

Page 92: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

92

EjerciciosEjercicios

1.1. Modificar la página ej4_directivainclude.jsp para Modificar la página ej4_directivainclude.jsp para incluir también el fichero “incluido.jsp” como incluir también el fichero “incluido.jsp” como acción include acción include

2.2. Cambiar la página HTML o JSP y volver a ejecutar Cambiar la página HTML o JSP y volver a ejecutar comprobando resultadoscomprobando resultados

3.3. Ejecutar el ejemplo del Bean que evalúa el Ejecutar el ejemplo del Bean que evalúa el lenguaje preferido del cliente lenguaje preferido del cliente

4.4. Crear un Bean que funcione como sumadora. Crear un Bean que funcione como sumadora. • Usar como base sumadora.html para sumadorabean.html, Usar como base sumadora.html para sumadorabean.html,

lenguajebean.jsp para sumadorabean.jsp lenguajebean.jsp para sumadorabean.jsp • lenguajebean.java y sumadora.jsp para lenguajebean.java y sumadora.jsp para

sumadorabean.javasumadorabean.java

5.5. Ampliar la sumadora a calculadora con más Ampliar la sumadora a calculadora con más operacionesoperaciones

6.6. Usar un Bean para crear un euroconversorUsar un Bean para crear un euroconversor

Page 93: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

93

Código HTMLCódigo HTML

Directivas Directivas <%@<%@ page page <%@ page ATRIBUTOS %><%@ page ATRIBUTOS %> include include <%@ include file=”Nombre del <%@ include file=”Nombre del

fichero” %>fichero” %> taglibtaglib <%@ taglib uri=”taglibraryURI” prefix=”tagPrefix” %><%@ taglib uri=”taglibraryURI” prefix=”tagPrefix” %>

Elementos de ScriptingElementos de Scripting (guiones) (guiones) <% <% DeclaracionesDeclaraciones <% ! Declaración %><% ! Declaración %> Código Java arbitrario (scriptlets)Código Java arbitrario (scriptlets) <% código Java <% código Java

%> %> ExpresionesExpresiones <%= Expresión Java a evaluar <%= Expresión Java a evaluar

%>%>

Elementos de una página JSP Elementos de una página JSP - - ResumenResumen

Page 94: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

94

Elementos de una página JSP - Elementos de una página JSP - ResumenResumen

AccionesAcciones estándar estándar <jsp: <jsp: <jsp:useBean> <jsp:useBean> <jsp:setProperty> <jsp:setProperty> <jsp:getProperty><jsp:getProperty> <jsp:include> <jsp:include> <jsp:param><jsp:param> <jsp:forward> <jsp:forward> <jsp:plugin><jsp:plugin>

Acciones personalizadas Acciones personalizadas <etiq: <etiq:

Page 95: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

95

Problemas con JSPsProblemas con JSPs

JavaBeans nos permiten separar la parte de JavaBeans nos permiten separar la parte de presentación de una página JSP de la presentación de una página JSP de la implementación de una regla de negocioimplementación de una regla de negocio Sin embargo, sólo 3 elementos acción en JSP se pueden Sin embargo, sólo 3 elementos acción en JSP se pueden

usar para acceder a un bean:usar para acceder a un bean: jsp:useBeanjsp:useBean jsp:getPropertyjsp:getProperty jsp:setPropertyjsp:setProperty

Por tanto a menudo tenemos que incluir código en un Por tanto a menudo tenemos que incluir código en un JSPJSP

JSP (1.1 en adelante) define custom tags que pueden JSP (1.1 en adelante) define custom tags que pueden ser usadas para definir acciones propietarias, de ser usadas para definir acciones propietarias, de manera que en nuestro JSP únicamente tenemos código manera que en nuestro JSP únicamente tenemos código de marcadode marcado

Page 96: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

96

Las acciones personalizadas están definidas por el Las acciones personalizadas están definidas por el programador de la aplicación web mediante el uso de programador de la aplicación web mediante el uso de etiquetas personalizadas.etiquetas personalizadas.

Una etiqueta personalizada permite ocultar bajo ella un Una etiqueta personalizada permite ocultar bajo ella un conjunto de acciones (definidas con instrucciones java) conjunto de acciones (definidas con instrucciones java) evitando que las mismas se incluyan en el fichero JSP.evitando que las mismas se incluyan en el fichero JSP.

Así pues, para incluir lógica de programa en una Así pues, para incluir lógica de programa en una aplicación web, es posible realizarlo de tres modosaplicación web, es posible realizarlo de tres modos Incluyendo el correspondiente código Java en una Incluyendo el correspondiente código Java en una

página JSPpágina JSP Incluyéndolo en un Java Bean que se llama desde la Incluyéndolo en un Java Bean que se llama desde la

página JSPpágina JSP Incluyéndolo en una etiqueta personalizadaIncluyéndolo en una etiqueta personalizada

Etiquetas Etiquetas personalizadaspersonalizadas

Page 97: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

97

Ventajas que proporcionanVentajas que proporcionan Permiten reutilizar códigoPermiten reutilizar código

Usando bibliotecas de etiquetas con las Usando bibliotecas de etiquetas con las funcionalidades más extendidasfuncionalidades más extendidas

Permiten separar las funciones del diseñador Permiten separar las funciones del diseñador web (que usa HTML y XML) de las del web (que usa HTML y XML) de las del programador web (que usa Java)programador web (que usa Java) Permiten invocar funcionalidad sin necesidad de Permiten invocar funcionalidad sin necesidad de

introducir código Java en la página JSPintroducir código Java en la página JSP Son más potentes que los JavaBeansSon más potentes que los JavaBeans

(página siguiente)(página siguiente)

Etiquetas personalizadas - Etiquetas personalizadas - CaracterísticasCaracterísticas

Page 98: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

98

Son más potentes que los JavaBeansSon más potentes que los JavaBeans El uso exclusivo de Beans no es suficiente para evitar todo El uso exclusivo de Beans no es suficiente para evitar todo

tipo de código Java en una página JSPtipo de código Java en una página JSP Las marcas propias pueden lograr directamente lo que los Las marcas propias pueden lograr directamente lo que los

beans pueden sólo lograr en conjunción con los scriptletsbeans pueden sólo lograr en conjunción con los scriptlets

Ej: Una etiqueta que compruebe que un usuario existe Ej: Una etiqueta que compruebe que un usuario existe (u otra condición) y se redirija a una página de éxito (u otra condición) y se redirija a una página de éxito o de error en función de la comprobación.o de error en función de la comprobación.

El uso exclusivo de Beans no es suficiente. El uso exclusivo de Beans no es suficiente. Podríamos usar un bean para comprobar que el usuario Podríamos usar un bean para comprobar que el usuario

existe.existe. El hecho de redirigir a una página o a otra en función de si El hecho de redirigir a una página o a otra en función de si

existe o no debe hacerse en una página JSP (puesto que existe o no debe hacerse en una página JSP (puesto que desde un bean no se puede reenviar a una página JSP) y desde un bean no se puede reenviar a una página JSP) y debe utilizarse código Java para realizar la comparación debe utilizarse código Java para realizar la comparación (if…)(if…)

JavaBeans no permiten interactuar con la JSP.JavaBeans no permiten interactuar con la JSP.

Etiquetas personalizadas - Etiquetas personalizadas - CaracterísticasCaracterísticas

Page 99: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

99

Si se desea solicitar una lista de libros de una base Si se desea solicitar una lista de libros de una base de datos con JSP podría hacerse utilizando un Bean de datos con JSP podría hacerse utilizando un Bean que devuelva la lista de libros. que devuelva la lista de libros.

<jsp:useBean id=“biblio” class=“Libros” /><jsp:useBean id=“biblio” class=“Libros” />

<% ResultSet res=getLibros(“Libros”);%><% ResultSet res=getLibros(“Libros”);%>

Posteriomente se recorre la lista y se muestra el Posteriomente se recorre la lista y se muestra el atributo “título de cada libro”. Esto no se puede atributo “título de cada libro”. Esto no se puede hacer en el Bean porque en él no se puede acceder hacer en el Bean porque en él no se puede acceder al objeto out para devolver el resultado al cliente, al objeto out para devolver el resultado al cliente, por lo que hay que incluirlo en el fichero JSPpor lo que hay que incluirlo en el fichero JSP

<% while (res.next()){ %><% while (res.next()){ %>

<%=res.getString(“titulo”) %><%=res.getString(“titulo”) %>

<% } %><% } %>

Etiquetas personalizadas - Etiquetas personalizadas - Ejemplo de usoEjemplo de uso

Page 100: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

100

La inclusión de las acciones personalizadas La inclusión de las acciones personalizadas permite ocultar todo el código Java al diseñador permite ocultar todo el código Java al diseñador web, permitiendo que éste utilice etiquetas como web, permitiendo que éste utilice etiquetas como si de cualquier otra etiqueta HTML se tratasesi de cualquier otra etiqueta HTML se tratase

<%@ taglib uri=“/bilbliolib” prefix=“etiq” %><%@ taglib uri=“/bilbliolib” prefix=“etiq” %>

<etiq:getLibro id=“libros” /><etiq:getLibro id=“libros” />

<ul><ul>

<etiq:bucle name=“libros” bucledId=“biblio” ><etiq:bucle name=“libros” bucledId=“biblio” >

<li> <jsp:getProperty name=“libros” <li> <jsp:getProperty name=“libros” property=“titulo” />property=“titulo” />

</etiq:bucle></etiq:bucle>

Etiquetas personalizadas - Etiquetas personalizadas - Ejemplo de usoEjemplo de uso

Page 101: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

101

Reducen o eliminan código Java en las páginas Reducen o eliminan código Java en las páginas JSPJSP

Sintaxis muy simple, como código HTMLSintaxis muy simple, como código HTML Tienen acceso a todos los objetos implícitosTienen acceso a todos los objetos implícitos

de las páginas JSPde las páginas JSP Facilitan la reutilización de código porque Facilitan la reutilización de código porque

pueden ser usadas en cualquier aplicación webpueden ser usadas en cualquier aplicación web Se pueden anidar, consiguiendo interacciones Se pueden anidar, consiguiendo interacciones

complejascomplejas Pueden ser personalizadas a través de atributos Pueden ser personalizadas a través de atributos

y determinadas de forma estática o dinámicay determinadas de forma estática o dinámica

Etiquetas personalizadas - Etiquetas personalizadas - VentajasVentajas

Page 102: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

102

1.1. Definición de la estructuraDefinición de la estructura en un fichero de en un fichero de definición de etiquetasdefinición de etiquetas (biblioteca de etiquetas) (biblioteca de etiquetas) Fichero con extensión .tld “Tag Library Descriptor (TLD)” Fichero con extensión .tld “Tag Library Descriptor (TLD)”

es un fichero XML que describe la bibliotecaes un fichero XML que describe la biblioteca Los .tld se guardan en un directorio TLDS dentro de WEB-Los .tld se guardan en un directorio TLDS dentro de WEB-

INF de la aplicaciónINF de la aplicación La biblioteca (.tld) debe estar a su vez definida en el La biblioteca (.tld) debe estar a su vez definida en el

fichero web.xml, que existirá en el directorio WEB-fichero web.xml, que existirá en el directorio WEB-INF de la aplicaciónINF de la aplicación

2.2. Definición de la funcionalidadDefinición de la funcionalidad asociada a la asociada a la etiqueta (lo que queremos que haga cuando se use etiqueta (lo que queremos que haga cuando se use la etiqueta) . Se define a través de un la etiqueta) . Se define a través de un controlador controlador de la etiquetade la etiqueta (clase que implementa la etiqueta) (clase que implementa la etiqueta) Es un JavaBean, con propiedades que coinciden con los Es un JavaBean, con propiedades que coinciden con los

atributos XML de la etiqueta. atributos XML de la etiqueta.

Etiquetas personalizadas - Etiquetas personalizadas -

DefiniciónDefinición

Page 103: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

103

Cuando se desee usar la etiqueta, se incluye en el Cuando se desee usar la etiqueta, se incluye en el fichero JSP la directiva JSP fichero JSP la directiva JSP taglib taglib para importar las para importar las etiquetasetiquetas

<%@ taglib uri=”dirección de la biblioteca” <%@ taglib uri=”dirección de la biblioteca” prefix=”tagPrifix” %>prefix=”tagPrifix” %>

Posteriormente se usa la etiqueta dentro de la página Posteriormente se usa la etiqueta dentro de la página

Ejemplos:Ejemplos:<eti:holamundo/> <eti:holamundo/> esto es una etiqueta que muestra un mensaje de esto es una etiqueta que muestra un mensaje de

hola Mundohola Mundo

<eti:hola nombre=Marian/> <eti:hola nombre=Marian/> Muestra un mensaje hola MarianMuestra un mensaje hola Marian

<eti:suma 3 4/><eti:suma 3 4/> muestra la suma de dos valoresmuestra la suma de dos valores

Etiquetas personalizadas - Etiquetas personalizadas - Uso en Uso en una página JSPuna página JSP

Page 104: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

104

Caso simple, sin atributos ni cuerpo, que saca código Caso simple, sin atributos ni cuerpo, que saca código HTML y contenido dinámico (etiquetas\HTML y contenido dinámico (etiquetas\ejtag1_hola.jsp)ejtag1_hola.jsp)

<%@ taglib uri=“/WEB-INF/tlds/etiquetas.tld” prefix=“ejemplo” <%@ taglib uri=“/WEB-INF/tlds/etiquetas.tld” prefix=“ejemplo” %>%>

<HTML><HTML> <head><title> Saludo al cliente mediante el uso de una <head><title> Saludo al cliente mediante el uso de una

etiqueta </title></head>etiqueta </title></head> <body><body> <h1> Saludo al cliente con una etiqueta </h1><h1> Saludo al cliente con una etiqueta </h1>

<ejemplo:hola /><ejemplo:hola />

</body></body></HTML></HTML>

Etiquetas personalizadas -Etiquetas personalizadas - Ejemplo de uso en Ejemplo de uso en un fichero JSPun fichero JSP

Page 105: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

105

Descriptor de la biblioteca TLD Descriptor de la biblioteca TLD Tag Library Tag Library DescriptorDescriptor

1.1. Información acerca de la biblioteca Información acerca de la biblioteca (cabecera)(cabecera)

2.2. Definición de la estructura de cada etiquetaDefinición de la estructura de cada etiqueta

Etiquetas personalizadas - Etiquetas personalizadas - Partes de Partes de un fichero TLDun fichero TLD

Page 106: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

106

Descriptor de la Librería de Etiquetas (Tag Library Descriptor de la Librería de Etiquetas (Tag Library Descriptor)Descriptor)

Fichero XML que define una librería de Fichero XML que define una librería de tags y sus etiquetas. Consta de:tags y sus etiquetas. Consta de: Prólogo XML como todo documento XMLPrólogo XML como todo documento XML El elemento raíz El elemento raíz <taglib><taglib>, que tiene como , que tiene como

sub-elementos:sub-elementos: tlib-versiontlib-version versión de la librería de etiquetas versión de la librería de etiquetas jsp-versionjsp-version la versión de JSP, actualmente 2.0 la versión de JSP, actualmente 2.0 short-nameshort-name nombre corto para la librería nombre corto para la librería descriptiondescription información para documentación información para documentación uriuri enlace a más información sobre tag library enlace a más información sobre tag library tagtag elemento más importante, puede haber varios elemento más importante, puede haber varios

y tiene sub-elementos y tiene sub-elementos

Page 107: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

107

Elemento <tag> del descriptor de una librería Elemento <tag> del descriptor de una librería de etiquetasde etiquetas

Puede tener los siguientes sub-elementos (Puede tener los siguientes sub-elementos (namename and and tag-classtag-class son los únicos obligatorios): son los únicos obligatorios): namename identificador de la etiqueta identificador de la etiqueta tag-classtag-class nombre de la clase completo que realiza el nombre de la clase completo que realiza el

procesamiento de esta etiquetaprocesamiento de esta etiqueta tei-classtei-class clase de ayuda de esta etiqueta clase de ayuda de esta etiqueta body-contentbody-content el tipo de cuerpo de una etiqueta: el tipo de cuerpo de una etiqueta:

empty empty no hay cuerpo no hay cuerpo JSP JSP cuerpo es un conjunto de elementos cuerpo es un conjunto de elementos tagdependent tagdependent cuerpo debe ser interpretado por la etiqueta cuerpo debe ser interpretado por la etiqueta

descriptiondescription attributeattribute: cero o más atributos que puede tener tres : cero o más atributos que puede tener tres

subelementos:subelementos: namename (obligatorio) (obligatorio) requiredrequired: : truetrue o o falsefalse (valor por defecto false) (valor por defecto false) rtexprvaluertexprvalue: determina si el valor de este atributo se puede : determina si el valor de este atributo se puede

determinar en tiempo de ejecucióndeterminar en tiempo de ejecución ……

Page 108: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

108

En la definición de una etiqueta personalizada En la definición de una etiqueta personalizada debe aparecer al menos:debe aparecer al menos:

<tag><tag> Indica comienzo de definiciónIndica comienzo de definición

<name> Hola </name><name> Hola </name> Nombre de la etiquetaNombre de la etiqueta

<tagclass> tagPaquete.HolaTag </tagclass> <tagclass> tagPaquete.HolaTag </tagclass> Nombre de la clase que implementa la Nombre de la clase que implementa la

funcionalidadfuncionalidad</tag></tag>

Fin de la etiquetaFin de la etiqueta Además puede llevarAdemás puede llevar

Atributos, anidaciones y cuerpo Atributos, anidaciones y cuerpo

Definición de la estructura de Definición de la estructura de una etiquetauna etiqueta

Page 109: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

109

TLD TLD Tag Library DescriptorTag Library Descriptor (WEB-INF\tlds\etiquetas.tld) (WEB-INF\tlds\etiquetas.tld)Información acerca de la biblioteca (cabecera)Información acerca de la biblioteca (cabecera)

<?xml version=“1.0” encoding=“ISO-8859-1” ?><?xml version=“1.0” encoding=“ISO-8859-1” ?><!DOCTYPE taglib ><!DOCTYPE taglib ><taglib><taglib> <tlibversion>1.0</tlibversion><tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion><jspversion>1.1</jspversion> <shortname> ejemplos </shortname><shortname> ejemplos </shortname> <info> Biblioteca de ejemplos sencillos </info><info> Biblioteca de ejemplos sencillos </info>Información de cada etiquetaInformación de cada etiqueta

<tag><tag> <name> Hola </name><name> Hola </name> <tagclass> es.uniovi.di.servinfo.etiquetas.HolaTag <tagclass> es.uniovi.di.servinfo.etiquetas.HolaTag

</tagclass></tagclass> <info> Ejemplo simple </info><info> Ejemplo simple </info></tag></tag>

</taglib></taglib>

Ejemplo de definición de estructura de una Ejemplo de definición de estructura de una etiquetaetiqueta

Page 110: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

110

La API de Etiquetas La API de Etiquetas Personalizadas Personalizadas Paquete Paquete jjavax.servlet.jsp.tagextavax.servlet.jsp.tagext Un manejador de etiquetas (Tag Handler) es una Un manejador de etiquetas (Tag Handler) es una

clase que está ligada a una etiqueta clase que está ligada a una etiqueta personalizada y es invocada cada vez que el personalizada y es invocada cada vez que el contenedor de JSPs encuentra la etiqueta.contenedor de JSPs encuentra la etiqueta.

En JSP 1.2, la clase En JSP 1.2, la clase javax.servlet.jsp.tagextjavax.servlet.jsp.tagext tiene 4 interfaces y 12 clasestiene 4 interfaces y 12 clases Los dos interfaces más importantes son Los dos interfaces más importantes son TagTag y y BodyTagBodyTag Estos interfaces dictan el ciclo de vida de un manejador Estos interfaces dictan el ciclo de vida de un manejador

de etiquetasde etiquetas

Page 111: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

111

Manejadores de etiquetas (Tag Manejadores de etiquetas (Tag

Handlers)Handlers) Un manejador de etiquetas tiene acceso a un API a través Un manejador de etiquetas tiene acceso a un API a través

del cual se puede comunicar con una página JSP. El punto del cual se puede comunicar con una página JSP. El punto de entrada a la API es el objeto de entrada a la API es el objeto javax.servlet.jsp.PageContextjavax.servlet.jsp.PageContext, a través del cual el , a través del cual el TagHandlerTagHandler puede recuperar todos los otros objetos puede recuperar todos los otros objetos implícitos (request, session, and application) accesibles implícitos (request, session, and application) accesibles desde una página JSP. desde una página JSP.

Los objetos implícitos pueden tener atributos con nombre Los objetos implícitos pueden tener atributos con nombre asociados con ellos. Tales atributos son accesibles usando asociados con ellos. Tales atributos son accesibles usando métodos métodos [set|get]Attribute[set|get]Attribute. .

Si la etiqueta está anidada, un Tag Handler también tiene Si la etiqueta está anidada, un Tag Handler también tiene acceso al Tag Handler (llamado acceso al Tag Handler (llamado parentparent) de la etiqueta ) de la etiqueta padre. padre.

Un conjunto de clases Tag Handler relacionadas Un conjunto de clases Tag Handler relacionadas constituyen una tag library y son empaquetadas como un constituyen una tag library y son empaquetadas como un fichero JAR. fichero JAR.

Page 112: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

112

Ciclo de vida de las Ciclo de vida de las etiquetasetiquetasCuando el motor JSP encuentra la etiqueta durante Cuando el motor JSP encuentra la etiqueta durante

la traducción de la página JSP al servlet la traducción de la página JSP al servlet

1.1. Se Se crea un objetocrea un objeto de la clase etiqueta si no de la clase etiqueta si no existe existe

2.2. Se invocan sus Se invocan sus métodos métodos setset de cada uno de de cada uno de sus atributossus atributos

3.3. Se invoca el método Se invoca el método doStartTag().doStartTag(). Este Este método finaliza con una de estas opcionesmétodo finaliza con una de estas opciones

1.1. SKIP_BODY (si no hay cuerpo)SKIP_BODY (si no hay cuerpo)

2.2. EVAL_BODY_INCLUDEEVAL_BODY_INCLUDE

4.4. Si no hay cuerpo se invoca ya a Si no hay cuerpo se invoca ya a doEndTag()doEndTag() y y se acabase acaba

Page 113: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

113

Ciclo de vida de las Ciclo de vida de las etiquetasetiquetasSi hay cuerpo, Si hay cuerpo, 1.1. Se invoca el método Se invoca el método setBodyContent()setBodyContent()

Cualquier salida de la etiqueta se deriva al objeto Cualquier salida de la etiqueta se deriva al objeto BodyContentBodyContent

2.2. Se invoca el método doInitBody() permite realizar Se invoca el método doInitBody() permite realizar acciones antes de ser evaluado el cuerpo. La salida acciones antes de ser evaluado el cuerpo. La salida se guarda en el buffer BodyContentse guarda en el buffer BodyContent

3.3. Se procesa el cuerpo de la etiqueta (se pasa el Se procesa el cuerpo de la etiqueta (se pasa el contenido al buffer del BodyContentcontenido al buffer del BodyContent

4.4. Se invoca el método doAfterBody(). Al final del Se invoca el método doAfterBody(). Al final del método se puede determinar por dónde seguirá el método se puede determinar por dónde seguirá el ciclo de vida, devolviendo una de las siguientes ciclo de vida, devolviendo una de las siguientes constantes:constantes: EVAL_BODY_AGAINEVAL_BODY_AGAIN SKIP_BODYSKIP_BODY

5.5. Si EVAL_BODY_AGAIN se vuelve al paso 3 Si EVAL_BODY_AGAIN se vuelve al paso 3 6.6. Se invoca el método doEndTag() y se acabaSe invoca el método doEndTag() y se acaba

Page 114: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

114

El interfaz TagEl interfaz Tag

Este interfaz define los siguientes Este interfaz define los siguientes métodos:métodos: doStartTagdoStartTag doEndTagdoEndTag getParentgetParent setParentsetParent setPageContextsetPageContext releaserelease

Page 115: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

115

La funcionalidad de una etiqueta está definida en La funcionalidad de una etiqueta está definida en una una clase controladoraclase controladora (clase Java) (clase Java)

Permite instanciar un objeto que será invocado por Permite instanciar un objeto que será invocado por el servlet generado para la página JSP que usa la el servlet generado para la página JSP que usa la etiquetaetiqueta

JSP 1.2 proporciona 3 interfaces de manejadores JSP 1.2 proporciona 3 interfaces de manejadores de etiquetas:de etiquetas: TagTag IterationTagIterationTag BodyTagBodyTag

Para evitar que el programador tenga que codificar Para evitar que el programador tenga que codificar todos los métodos también proporciona varias todos los métodos también proporciona varias clases de ayuda:clases de ayuda: TagSupportTagSupport, implementa todos los métodos de la interfaz , implementa todos los métodos de la interfaz

TagTag..

Definición de la funcionalidad de una Definición de la funcionalidad de una etiquetaetiqueta

Page 116: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

116

La forma básica de definición de funcionalidad es La forma básica de definición de funcionalidad es construir una clase que herede de una clase de construir una clase que herede de una clase de ayuda, por ejemplo ayuda, por ejemplo TagSupportTagSupport,, y redefinir los y redefinir los métodos que queramos cambiar.métodos que queramos cambiar.

Dos métodos básicos: Dos métodos básicos: doStartTag()doStartTag() llamado cuando se abre la etiqueta llamado cuando se abre la etiqueta doEndTag() doEndTag() llamado cuando se cierrallamado cuando se cierra Si la etiqueta tiene atributos hay que definir los Si la etiqueta tiene atributos hay que definir los

métodos set y get para los mismosmétodos set y get para los mismos Otros métodos son doInitBody, doAfterBody(), si Otros métodos son doInitBody, doAfterBody(), si

tiene cuerpo, etc.tiene cuerpo, etc. Desde el servlet para la página se invoca a estos Desde el servlet para la página se invoca a estos

métodosmétodos

Definición de la funcionalidad de una Definición de la funcionalidad de una etiquetaetiqueta

Page 117: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

117

(WEB-INF\classes\es\uniovi\di\servinfo\etiquetas\(WEB-INF\classes\es\uniovi\di\servinfo\etiquetas\HolaTag.java)HolaTag.java)

package tagPaquete;package tagPaquete;

import java.io.IOException;import java.io.IOException;import java.util.Date;import java.util.Date;import javax.servlet.jsp.*;import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.tagext.*;

public class HolaTag extends TagSupport {public class HolaTag extends TagSupport {

public int doStartTag() throws JspTagException {public int doStartTag() throws JspTagException { // el motor JSP llama este método cuando encuentre el// el motor JSP llama este método cuando encuentre el // comienzo de una marca implementada por esta clase// comienzo de una marca implementada por esta clase return SKIP_BODY;return SKIP_BODY;}}

[…][…]

Ejemplo de definición de la clase Ejemplo de definición de la clase controladoracontroladora

Page 118: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

118

public int doEndTag() throws JspTagException {public int doEndTag() throws JspTagException { // el motor llama este método cuando encuentre el// el motor llama este método cuando encuentre el // final de una marca implementada por esta clase// final de una marca implementada por esta clase String dateString = new Date().toString();String dateString = new Date().toString(); try {try { pageContext.getOut().write(“Hola mundo.<br/>”);pageContext.getOut().write(“Hola mundo.<br/>”); pageContext.getOut().write(“Mi nombre es” +pageContext.getOut().write(“Mi nombre es” + getClass().getName() + “y son las “ + getClass().getName() + “y son las “ + dateString + “<p/>”);dateString + “<p/>”); } catch (IOException ex) {} catch (IOException ex) { throw new JspTagExceptionthrow new JspTagException (“Error: la etiqueta hola no puede escribir en la (“Error: la etiqueta hola no puede escribir en la

salida del JSP”);salida del JSP”); }} return EVAL_PAGE;return EVAL_PAGE; }}

} // clase HolaTag} // clase HolaTag

Ejemplo de definición de la clase Ejemplo de definición de la clase controladoracontroladora

Page 119: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

119

Usando atributos en una etiqueta Usando atributos en una etiqueta personalizada Ipersonalizada I

Objetivo: Etiqueta personalizada Objetivo: Etiqueta personalizada para imprimir un saludo que incluya para imprimir un saludo que incluya el nombre del usuarioel nombre del usuario

El manejador debe definir un El manejador debe definir un método método setNombresetNombre para asignar un para asignar un atributo al valor atributo al valor

Page 120: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

120

<taglib><taglib>[…][…]

<tag><tag><name>saludo</name><name>saludo</name>

<tagclass>es.uniovi.di.servinfo.etiquetas.HolaTagAtribu<tagclass>es.uniovi.di.servinfo.etiquetas.HolaTagAtributo</tagclass>to</tagclass><bodycontent> empty</bodycontent><bodycontent> empty</bodycontent><info>Esta es una etiqueta muy simple de saludo<info>Esta es una etiqueta muy simple de saludo</info></info><atribute><atribute>

<name>nombre</name><name>nombre</name><required>false</required><required>false</required><rtextvalue>false</rtexpvalue><rtextvalue>false</rtexpvalue>

</atribute></atribute></tag></tag>

</taglib></taglib>

Etiqueta con atributos:Etiqueta con atributos: definición en la tlddefinición en la tld

Page 121: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

121

package es.uniovi.di.servinfo.etiquetas;package es.uniovi.di.servinfo.etiquetas;

import javax.servlet.jsp.*;import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.tagext.*;

public class HolaTag extends TagSupport {public class HolaTag extends TagSupport {

// Atributo de la etiqueta definido en el // Atributo de la etiqueta definido en el fichero TLDfichero TLD

private String nombre = null; private String nombre = null;

public void HolaTag() {}public void HolaTag() {}

Etiqueta con atributos:Etiqueta con atributos: definición de la definición de la clase controladoraclase controladora

Page 122: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

122

// Métodos set y get del atributo "nombre" que// Métodos set y get del atributo "nombre" que

// se ha definido en el fichero TLD para esta etiqueta// se ha definido en el fichero TLD para esta etiqueta

public void setNombre( String _nombre ) {public void setNombre( String _nombre ) {

nombre = _nombre;nombre = _nombre;

}}

public String getNombre() {public String getNombre() {

return( nombre );return( nombre );

}}

Etiqueta con atributos: Etiqueta con atributos: definición de la definición de la clase controladoraclase controladora

Page 123: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

123

// Al inicio de la etiqueta// Al inicio de la etiquetapublic int doStartTag()public int doStartTag() throws JspTagException { throws JspTagException { try {try { JspWriter out = pageContext.getOut();JspWriter out = pageContext.getOut(); out.println( "<table border=1>" );out.println( "<table border=1>" ); if( nombre != null ) {if( nombre != null ) { out.println( "<tr><td> Hola " +nombre+ " out.println( "<tr><td> Hola " +nombre+ "

</td></tr>" );</td></tr>" ); }} else { out.println( "<tr><td>Hola Mundo else { out.println( "<tr><td>Hola Mundo

JSP</td></tr>" ); }JSP</td></tr>" ); } } catch( Exception e ) { throw new } catch( Exception e ) { throw new

JspTagException( e.getMessage() );JspTagException( e.getMessage() ); }} return( SKIP_BODY ); return( SKIP_BODY ); }}

Etiqueta con atributos: Etiqueta con atributos: definición de la definición de la clase controladoraclase controladora

Page 124: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

124

// Al cierre de la etiqueta// Al cierre de la etiqueta

public int doEndTag()public int doEndTag() throws JspTagException { throws JspTagException {

try {try {

/* Se utiliza el pageContext para obtener el /* Se utiliza el pageContext para obtener el objeto de salida, sobre el que colocar la etiqueta objeto de salida, sobre el que colocar la etiqueta HTML de cierre de la tabla */HTML de cierre de la tabla */

pageContext.getOut().print( "</table>" );pageContext.getOut().print( "</table>" );

} catch( Exception e ) {} catch( Exception e ) {

throw new JspTagException( e.getMessage() );throw new JspTagException( e.getMessage() );

}}

return( SKIP_BODY );return( SKIP_BODY );

}}

Etiqueta con atributos: Etiqueta con atributos: definición de la definición de la clase controladoraclase controladora

Page 125: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

125

public void release() {public void release() {

/* Llama al método release() del padre, para que se /* Llama al método release() del padre, para que se devuelvan todos los recursos utilizados al sistema. devuelvan todos los recursos utilizados al sistema. Esta es una buena práctica, sobre todo cuando se Esta es una buena práctica, sobre todo cuando se están utilizando jararquías de etiquetas */están utilizando jararquías de etiquetas */

super.release();super.release();

}}

} // de la clase} // de la clase

Etiqueta con atributos: Etiqueta con atributos: definición de la definición de la clase controladoraclase controladora

Page 126: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

126

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">Transitional//EN">

<%@ taglib uri="/WEB-INF/tlds/ejemplo2.tld" <%@ taglib uri="/WEB-INF/tlds/ejemplo2.tld" prefix=”etiq" %>prefix=”etiq" %>

<html><html>

<head><head>

<title>Ejemplo Etiquetas, Etiqueta Saludo</title><title>Ejemplo Etiquetas, Etiqueta Saludo</title>

<meta http-equiv="Content-Type" content="text/html; <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">charset=iso-8859-1">

</head></head>

Etiqueta con atributos: Etiqueta con atributos: uso de uso de la etiquetala etiqueta

Page 127: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

127

<body><body>

<h2>Ejemplo de biblioteca de etiquetas: <h2>Ejemplo de biblioteca de etiquetas: <i>HolaTagAtributo.java</i></h2><i>HolaTagAtributo.java</i></h2>

En esta página se muestra el uso de esta etiqueta, En esta página se muestra el uso de esta etiqueta, que se invoca en primer lugar especificando un valor que se invoca en primer lugar especificando un valor para el atributo <i>nombre</i> y luego sin ningún para el atributo <i>nombre</i> y luego sin ningún argumento.argumento.

<p><p>

<hr><center><hr><center>

<etiq:saludo nombre="Agustín"/><etiq:saludo nombre="Agustín"/>

</center><hr></center><hr>

<etiq:saludo /><etiq:saludo />

</body></body>

</html></html>

Etiqueta con atributos: Etiqueta con atributos: uso de uso de la etiquetala etiqueta

Page 128: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

128

El interfaz El interfaz IterationTagIterationTag

Extiende el interfaz Tag añadiendo un Extiende el interfaz Tag añadiendo un nuevo método nuevo método doAfterBodydoAfterBody, que , que puede devolver:puede devolver: Tag.SKIP_BODYTag.SKIP_BODY el cuerpo se ignora y el cuerpo se ignora y

el contenedor llama a el contenedor llama a doEndTagdoEndTag IterationTag.EVAL_BODY_AGAINIterationTag.EVAL_BODY_AGAIN doAfterBodydoAfterBody es llamado de nuevo es llamado de nuevo

Page 129: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

129

Ejemplo IterationTag I Ejemplo IterationTag I

Objetivo: calcular una potencia: 2^3=8Objetivo: calcular una potencia: 2^3=8

package es.deusto.customtags;package es.deusto.customtags;

import javax.servlet.jsp.*;import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.tagext.*;

public class PowerTagpublic class PowerTag //extends TagSupport {//extends TagSupport { implements IterationTag {implements IterationTag {

private PageContext pageContext;private PageContext pageContext; private int number;private int number; private int power;private int power; private int counter = 0;private int counter = 0; private int result = 1;private int result = 1;

// the setter for number// the setter for number public void setNumber(int number) {public void setNumber(int number) { System.out.println("number: " + number);System.out.println("number: " + number); this.number = number;this.number = number; }}

public int getNumber() {public int getNumber() { return this.number;return this.number; }}

……

Page 130: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

130

Ejemplo IterationTag IIEjemplo IterationTag II

// the setter for power// the setter for power public void setPower(int power) {public void setPower(int power) { System.out.println("power: " + power);System.out.println("power: " + power); this.power = power;this.power = power; }}

public int getPower() {public int getPower() { return this.power;return this.power; }} public void setParent(Tag t) {public void setParent(Tag t) { }}

public void setPageContext(PageContext p) {public void setPageContext(PageContext p) { System.out.println("setPageContext");System.out.println("setPageContext"); pageContext = p;pageContext = p; }}

public void release() {public void release() { System.out.println("doAfterBody");System.out.println("doAfterBody"); }}

public Tag getParent() {public Tag getParent() { return null;return null; }}

Page 131: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

131

Ejemplo IterationTag IIIEjemplo IterationTag III

public int doStartTag() {public int doStartTag() { System.out.println("doStartTag");System.out.println("doStartTag"); return EVAL_BODY_INCLUDE;return EVAL_BODY_INCLUDE; }}

public int doAfterBody() {public int doAfterBody() { System.out.println("doAfterBody");System.out.println("doAfterBody"); counter++;counter++; result *= number;result *= number; if (counter >= power)if (counter >= power) return SKIP_BODY;return SKIP_BODY; elseelse return EVAL_BODY_AGAIN;return EVAL_BODY_AGAIN; }}

public int doEndTag() throws JspException {public int doEndTag() throws JspException { System.out.println("doEndTag");System.out.println("doEndTag"); try {try { JspWriter out = pageContext.getOut();JspWriter out = pageContext.getOut(); out.println(number + "^" + power + "=" + result);out.println(number + "^" + power + "=" + result); this.counter = 0;this.counter = 0; this.result = 1;this.result = 1; }} catch (Exception e) {catch (Exception e) { }} return EVAL_PAGE;return EVAL_PAGE; }}}}

Page 132: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

132

Ejemplo IterationTag IIIEjemplo IterationTag III

JSP para evaluar el código:JSP para evaluar el código:

<%@ taglib uri="/myTLD" prefix="easy"%><%@ taglib uri="/myTLD" prefix="easy"%><easy:myTag number="2" power="3">.</easy:myTag><easy:myTag number="2" power="3">.</easy:myTag>

Fichero TLD:Fichero TLD:

<?xml version="1.0" encoding="ISO-8859-1"?><?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"><taglib><taglib>

<tlib-version>1.0</tlib-version><tlib-version>1.0</tlib-version><jsp-version>1.2</jsp-version><jsp-version>1.2</jsp-version><short-name>myTag</short-name><short-name>myTag</short-name><tag><tag>

<name>myTag</name><name>myTag</name><tag-class>es.deusto.customtags.PowerTag</tag-class><tag-class>es.deusto.customtags.PowerTag</tag-class><body-content>tagdependent</body-content><body-content>tagdependent</body-content><attribute><attribute>

<name>number</name><name>number</name><required>true</required><required>true</required>

<rtexprvalue>true</rtexprvalue><rtexprvalue>true</rtexprvalue></attribute></attribute><attribute><attribute>

<name>power</name><name>power</name><required>true</required><required>true</required>

<rtexprvalue>true</rtexprvalue><rtexprvalue>true</rtexprvalue></attribute></attribute>

</tag></tag></taglib></taglib>

Page 133: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

133

Manipulando el contenido de una etiqueta Manipulando el contenido de una etiqueta personalizadapersonalizada

Una etiqueta personalizada puede Una etiqueta personalizada puede tener un cuerpo:tener un cuerpo:

<%@ taglib uri=“/myTLD” <%@ taglib uri=“/myTLD” prefix=“x”%>prefix=“x”%>

<x:theTag>This is the body <x:theTag>This is the body content</x:theTag>content</x:theTag>

Para manipular el cuerpo de una Para manipular el cuerpo de una etiqueta es necesario utilizar etiqueta es necesario utilizar BodyTagBodyTag y y BodyContentBodyContent

Page 134: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

134

La interfaz La interfaz BodyTagBodyTag

Extiende la Extiende la IterationTagIterationTag con 2 métodos con 2 métodos Tiene un ciclo de vida similar a Tiene un ciclo de vida similar a IterationTagIterationTag, sin , sin

embargo:embargo: doStartTagdoStartTag puede devolver puede devolver SKIP_BODYSKIP_BODY, , EVAL_BODY_INCLUDEEVAL_BODY_INCLUDE

(el cuerpo se evalua como con (el cuerpo se evalua como con IterationTagIterationTag) o ) o EVAL_BODY_BUFFEREDEVAL_BODY_BUFFERED (un objeto de tipo (un objeto de tipo BodyContentBodyContent es es creado al cuerpo de la etiqueta personalizada)creado al cuerpo de la etiqueta personalizada)

public void setBodyContent(BodyContent public void setBodyContent(BodyContent bodyContent)bodyContent) Llamado después de Llamado después de doStartTagdoStartTag, seguido de , seguido de doInitBodydoInitBody, ,

pero no se invoca si:pero no se invoca si: La custom tag no tiene cuerpoLa custom tag no tiene cuerpo La custom tag tiene cuerpo pero La custom tag tiene cuerpo pero doStartTagdoStartTag devuelve devuelve SKIP_BOBYSKIP_BOBY

o o EVAL_BODY_INCLUDEEVAL_BODY_INCLUDE public void doInitBody() throws public void doInitBody() throws

java.servlet.jsp.JspExceptionjava.servlet.jsp.JspException No se invoca si se cumple alguna de las mismas condiciones No se invoca si se cumple alguna de las mismas condiciones

que para que para setBodyContentsetBodyContent

Page 135: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

135

La clase La clase BodyContentBodyContent

Representa el cuerpo de una Representa el cuerpo de una etiqueta personalizadaetiqueta personalizada

Ejemplo:Ejemplo:

““Codificar el contenido HTML de una Codificar el contenido HTML de una etiqueta personalizada y visualizar etiqueta personalizada y visualizar su contenido en el navegador”su contenido en el navegador”

Page 136: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

136

Ejemplo de manipulación del cuerpo de Ejemplo de manipulación del cuerpo de

custom tag Icustom tag I

package es.deusto.customtags;package es.deusto.customtags;import javax.servlet.jsp.*;import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.tagext.*;public class EncoderTagpublic class EncoderTag implements BodyTag {implements BodyTag { PageContext pageContext;PageContext pageContext; BodyContent bodyContent;BodyContent bodyContent; /* Encode an HTML tag so it will be displayed as it is on the browser. Particularly, this method searches the passed in String and replace every /* Encode an HTML tag so it will be displayed as it is on the browser. Particularly, this method searches the passed in String and replace every

occurrence of the following character:occurrence of the following character: * '<' with "&lt;"* '<' with "&lt;" * '>' with "&gt;"* '>' with "&gt;" * '&' with "&amp;"* '&' with "&amp;" * //'"' with "&quot;"* //'"' with "&quot;" * ' ' with "&nbsp;“ */* ' ' with "&nbsp;“ */ private String encodeHtmlTag(String tag) {private String encodeHtmlTag(String tag) { if (tag == null) return null;if (tag == null) return null; int length = tag.length();int length = tag.length(); StringBuffer encodedTag = new StringBuffer(2 * length);StringBuffer encodedTag = new StringBuffer(2 * length); for (int i = 0; i < length; i++) {for (int i = 0; i < length; i++) { char c = tag.charAt(i);char c = tag.charAt(i); if (c == '<')if (c == '<') encodedTag.append("&lt;");encodedTag.append("&lt;"); else if (c == '>')else if (c == '>') encodedTag.append("&gt;");encodedTag.append("&gt;"); else if (c == '&')else if (c == '&') encodedTag.append("&amp;");encodedTag.append("&amp;"); else if (c == '"')else if (c == '"') encodedTag.append("&quot;");encodedTag.append("&quot;"); //when trying to output text as tag's value as in//when trying to output text as tag's value as in // values="???".// values="???". else if (c == ' ')else if (c == ' ') encodedTag.append("&nbsp;");encodedTag.append("&nbsp;"); elseelse encodedTag.append(c);encodedTag.append(c);

}} return encodedTag.toString();return encodedTag.toString(); }}

Page 137: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

137

Ejemplo de manipulación del cuerpo de Ejemplo de manipulación del cuerpo de custom tag IIcustom tag II

public void setParent(Tag t) {public void setParent(Tag t) { }} public void setPageContext(PageContext p) {public void setPageContext(PageContext p) { pageContext = p;pageContext = p; }} public void release() {public void release() { }} public Tag getParent() {public Tag getParent() { return null;return null; }} public int doStartTag() {public int doStartTag() { return EVAL_BODY_BUFFERED;return EVAL_BODY_BUFFERED; }} public void setBodyContent(BodyContent bodyContent) {public void setBodyContent(BodyContent bodyContent) { this.bodyContent = bodyContent;this.bodyContent = bodyContent; }} public void doInitBody() {public void doInitBody() { }} public int doAfterBody() {public int doAfterBody() { String content = bodyContent.getString();String content = bodyContent.getString(); try {try { JspWriter out = bodyContent.getEnclosingWriter();JspWriter out = bodyContent.getEnclosingWriter(); out.print(encodeHtmlTag(content));out.print(encodeHtmlTag(content)); }} catch (Exception e) {}catch (Exception e) {}

return SKIP_BODY;return SKIP_BODY; }} public int doEndTag() throws JspException {public int doEndTag() throws JspException { return EVAL_PAGE;return EVAL_PAGE; }}}}

Page 138: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

138

Ejemplo de manipulación del cuerpo de Ejemplo de manipulación del cuerpo de custom tag IIIcustom tag III

Ejemplo JSP que usa EncoderTag:Ejemplo JSP que usa EncoderTag:<%@ taglib uri="/myTLD" prefix="easy"%><%@ taglib uri="/myTLD" prefix="easy"%><easy:myTag><BR> means change line</easy:myTag><easy:myTag><BR> means change line</easy:myTag>

TLD file:TLD file:<?xml version="1.0" encoding="ISO-8859-1"?><?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag

Library 1.2//EN"Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"><taglib><taglib>

<tlib-version>1.0</tlib-version><tlib-version>1.0</tlib-version><jsp-version>1.2</jsp-version><jsp-version>1.2</jsp-version><short-name/><short-name/><tag><tag>

<name>myTag</name><name>myTag</name><tag-class>es.deusto.customtags.EncoderTag</tag-class><tag-class>es.deusto.customtags.EncoderTag</tag-class><body-content>tagdependent</body-content><body-content>tagdependent</body-content>

</tag></tag></taglib></taglib>

Page 139: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

139

Clases de ayudaClases de ayuda

Clases que implementan interfaces Clases que implementan interfaces TagTag, , IterationTagIterationTag y y BodyTagBodyTag: : public class TagSupport implements public class TagSupport implements IterationTag, java.io.SerializableIterationTag, java.io.Serializable

public class BodyTagSupport extends public class BodyTagSupport extends TagSupport implements BodytagTagSupport implements Bodytag

Ahora sólo es necesario sobre-escribir los Ahora sólo es necesario sobre-escribir los métodos que quieran utilizarse en el métodos que quieran utilizarse en el procesamiento de custom tagsprocesamiento de custom tags

Page 140: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

140

Ejemplo con Ejemplo con BodyTagSupport IBodyTagSupport Ipackage es.deusto.customtags;package es.deusto.customtags;

import javax.servlet.jsp.*;import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.tagext.*;

public class CapitalizerTag extends BodyTagSupport {public class CapitalizerTag extends BodyTagSupport {

public int doAfterBody() {public int doAfterBody() { String content = bodyContent.getString();String content = bodyContent.getString(); try{try{ JspWriter out = bodyContent.getEnclosingWriter();JspWriter out = bodyContent.getEnclosingWriter(); out.print(content.toUpperCase());out.print(content.toUpperCase()); }} catch(Exception e) {}catch(Exception e) {} return SKIP_BODY;return SKIP_BODY; }}

}}

Page 141: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

141

Ejemplo con Ejemplo con BodyTagSupport IIBodyTagSupport II

JSP que utiliza CapitalizerTag:JSP que utiliza CapitalizerTag:<%@ taglib uri="/myTLD" prefix="easy"%><%@ taglib uri="/myTLD" prefix="easy"%><easy:myTag>See the big picture?</easy:myTag><easy:myTag>See the big picture?</easy:myTag>

Fichero TLD:Fichero TLD:<?xml version="1.0" encoding="ISO-8859-1"?><?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP

Tag Library 1.2//EN"Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"><taglib><taglib>

<tlib-version>1.0</tlib-version><tlib-version>1.0</tlib-version><jsp-version>1.2</jsp-version><jsp-version>1.2</jsp-version><short-name/><short-name/><tag><tag>

<name>myTag</name><name>myTag</name><tag-class>es.deusto.customtags.CapitalizerTag</<tag-class>es.deusto.customtags.CapitalizerTag</

tag-class>tag-class><body-content>tagdependent</body-content><body-content>tagdependent</body-content>

</tag></tag></taglib></taglib>

Page 142: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

142

Etiquetas anidadasEtiquetas anidadas

Cuando dos o más etiquetas Cuando dos o más etiquetas personalizadas están anidadas es posible personalizadas están anidadas es posible obtener una referencia a la clase padre a obtener una referencia a la clase padre a través de través de findAncestorWithClassfindAncestorWithClass

Ejemplo:Ejemplo:

OuterTag1 parent1 = OuterTag1 parent1 = (OuterTag1)findAncestorWithClass(thi(OuterTag1)findAncestorWithClass(this, OuterTag.class);s, OuterTag.class);

Page 143: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

143

Variables de scriptVariables de script

La clase Tag Extra Info (TEI) se usa para La clase Tag Extra Info (TEI) se usa para permitir la creación de variables de script.permitir la creación de variables de script. Hay que definir en la clase Hay que definir en la clase TagExtraInfoTagExtraInfo el método el método getVariableInfogetVariableInfo

Este método crea un array de objetos Este método crea un array de objetos VariableInfoVariableInfo Se creará uno de estos objetos por cada variable a definir, Se creará uno de estos objetos por cada variable a definir,

especificándose:especificándose: Nombre variableNombre variable Clase de la variableClase de la variable Boolean indicando si habrá que crear una nueva variableBoolean indicando si habrá que crear una nueva variable Scope de la variable:Scope de la variable:

AT_BEGINAT_BEGIN variable disponible en interior etiqueta y el variable disponible en interior etiqueta y el resto del JSPresto del JSP

NESTEDNESTED variable disponible en el interior de la etiqueta variable disponible en el interior de la etiqueta AT_ENDAT_END variable disponible en el resto del JSP variable disponible en el resto del JSP

Page 144: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

144

Ejemplo: definir un Ejemplo: definir un iterador Iiterador Ipackage es.deusto.customtags;package es.deusto.customtags;

import java.util.Collection;import java.util.Collection;import java.util.Iterator;import java.util.Iterator;

import javax.servlet.jsp.*;import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.BodyTagSupport;import javax.servlet.jsp.tagext.BodyTagSupport;

public class IteratorTagpublic class IteratorTag extends BodyTagSupport {extends BodyTagSupport {

private Collection collection;private Collection collection; private Iterator iterator;private Iterator iterator; private PageContext pageContext;private PageContext pageContext;

public void setPageContext(PageContext p) {public void setPageContext(PageContext p) { System.out.println("setPageContext");System.out.println("setPageContext"); pageContext = p;pageContext = p; }} … …

Page 145: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

145

Ejemplo: definir un Ejemplo: definir un iterador IIiterador II

// the setter for number// the setter for number public void setCollection(Collection collection) {public void setCollection(Collection collection) { this.collection = collection;this.collection = collection; }}

public int doStartTag() throws JspException {public int doStartTag() throws JspException { return collection.size() > 0 ? EVAL_BODY_BUFFERED : SKIP_BODY;return collection.size() > 0 ? EVAL_BODY_BUFFERED : SKIP_BODY; }}

public void doInitBody() throws JspException {public void doInitBody() throws JspException { iterator = collection.iterator();iterator = collection.iterator(); this.pageContext.setAttribute("item", iterator.next());this.pageContext.setAttribute("item", iterator.next()); }}

… …

Page 146: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

146

Ejemplo: definir un Ejemplo: definir un iterador IIIiterador III

public int doAfterBody() throws JspException {public int doAfterBody() throws JspException { if (iterator == null) {if (iterator == null) { iterator = collection.iterator();iterator = collection.iterator(); }} if (iterator.hasNext()) {if (iterator.hasNext()) { this.pageContext.setAttribute("item", iterator.next());this.pageContext.setAttribute("item", iterator.next()); return EVAL_BODY_AGAIN;return EVAL_BODY_AGAIN; }} else {else { try {try { getBodyContent().writeOut(getPreviousOut());getBodyContent().writeOut(getPreviousOut()); }} catch (java.io.IOException e) {catch (java.io.IOException e) { throw new JspException(e.getMessage());throw new JspException(e.getMessage()); }} return SKIP_BODY;return SKIP_BODY; }} }} public void release() {public void release() { collection = null;collection = null; iterator = null;iterator = null; }}}}

Page 147: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

147

Ejemplo: definir un Ejemplo: definir un iterador IViterador IV

Definir un objeto Definir un objeto TagExtraInfoTagExtraInfo

package es.deusto.customtags;package es.deusto.customtags;import java.util.Collection;import java.util.Collection;import java.util.Iterator;import java.util.Iterator;import javax.servlet.jsp.*;import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.tagext.*;

public class IteratorTagInfo extends TagExtraInfo {public class IteratorTagInfo extends TagExtraInfo { public VariableInfo[] getVariableInfo(TagData data) {public VariableInfo[] getVariableInfo(TagData data) { return new VariableInfo[]return new VariableInfo[] {{ new VariableInfo("item",new VariableInfo("item", "java.lang.Object","java.lang.Object", true,true, VariableInfo.AT_BEGIN)VariableInfo.AT_BEGIN) };}; }}}}

Page 148: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

148

Ejemplo: definir un Ejemplo: definir un iterador Viterador V

<?xml version="1.0" encoding="ISO-8859-1"?><?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"><taglib><taglib>

<tlib-version>1.0</tlib-version><tlib-version>1.0</tlib-version><jsp-version>1.2</jsp-version><jsp-version>1.2</jsp-version><short-name/><short-name/><tag><tag><name>iterate</name><name>iterate</name><tag-class>es.deusto.customtags.IteratorTag</tag-class><tag-class>es.deusto.customtags.IteratorTag</tag-class>

<tei-class>es.deusto.customtags.IteratorTagInfo</tei-class><tei-class>es.deusto.customtags.IteratorTagInfo</tei-class><body-content>JSP</body-content><body-content>JSP</body-content>

<!--<variable><!--<variable> <name-given>item</name-given><name-given>item</name-given> <name-from-attribute>item</name-from-attribute><name-from-attribute>item</name-from-attribute> <variable-class>java.lang.String</variable-class><variable-class>java.lang.String</variable-class> <declare>true</declare><declare>true</declare> <scope>AT_BEGIN</scope><scope>AT_BEGIN</scope> </variable></variable> <attribute><attribute>

<name>id</name><name>id</name><required>true</required><required>true</required><rtexprvalue>true</rtexprvalue><rtexprvalue>true</rtexprvalue></attribute>--></attribute>--><attribute><attribute><name>collection</name><name>collection</name><required>true</required><required>true</required><rtexprvalue>true</rtexprvalue><rtexprvalue>true</rtexprvalue></attribute></attribute></tag></tag>

</taglib></taglib>

Page 149: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

149

Ejemplo: definir un Ejemplo: definir un iterador VIiterador VI

<html><head><title>An Iterator</title></head><html><head><title>An Iterator</title></head>

<%@ taglib uri="/myTLD" prefix="it"%><%@ taglib uri="/myTLD" prefix="it"%><body><body><%<%java.util.Vector vector = new java.util.Vector();java.util.Vector vector = new java.util.Vector();vector.addElement("one");vector.addElement("one");vector.addElement("two");vector.addElement("two");vector.addElement("three");vector.addElement("three");vector.addElement("four");vector.addElement("four");%>%>

Iterating over <%= vector %> ...Iterating over <%= vector %> ...

<p><p><it:iterate collection="<%=vector%>"><it:iterate collection="<%=vector%>"> Item: <%= item %><br>Item: <%= item %><br></it:iterate></it:iterate></p></p></body></body></html></html>

Page 150: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

150

Custom Tags en JSP 2.0Custom Tags en JSP 2.0

JSP 2.0 permite la declaración en un JSP 2.0 permite la declaración en un fichero TLD de funciones invocables fichero TLD de funciones invocables desde cualquier JSPdesde cualquier JSP

JSP 2.0 define Simple Tag Handler API, JSP 2.0 define Simple Tag Handler API, apropiada para etiquetas personalizadas apropiada para etiquetas personalizadas donde el cuerpo sólo contenga:donde el cuerpo sólo contenga: Código de marcadoCódigo de marcado Expresiones ELExpresiones EL Elementos de acciónElementos de acción

Page 151: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

151

Invocando Funciones Invocando Funciones desde JSPsdesde JSPs La EL de JSP 2.0 permite invocar a un método público de La EL de JSP 2.0 permite invocar a un método público de

una clase usando la siguiente sintáxis:una clase usando la siguiente sintáxis:${prefix:methodName(param1, param2, ...)}${prefix:methodName(param1, param2, ...)}

La función JSP debe ser declarada en un tag library La función JSP debe ser declarada en un tag library descriptor (TLD): descriptor (TLD): <function><function>    <name>methodName</name>    <name>methodName</name>    <function-class>className</function-class>    <function-class>className</function-class>    <function-signature>    <function-signature>        returnType methodName(param1Type,         returnType methodName(param1Type, param2Type, ...)param2Type, ...)    </function-signature>    </function-signature></function></function>

La clase Java que lo implementa no tiene que utilizar La clase Java que lo implementa no tiene que utilizar ninguna interfaz especial, el método debe ser público y ninguna interfaz especial, el método debe ser público y estático. estático.

Page 152: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

152

Ejemplo Función JSPEjemplo Función JSP

Revisar ejemplo en: Revisar ejemplo en: examples\examples\customtag\customtag\ej7_static_function_jspej7_static_function_jsp

Copiar contenido a Copiar contenido a webapps\myappwebapps\myapp Ejecutar: Ejecutar:

http://localhost:8080/ej7_static_functhttp://localhost:8080/ej7_static_function_jsp/TestFunction.jspion_jsp/TestFunction.jsp

Page 153: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

153

Ejemplo Simple TagEjemplo Simple Tag

Una tag simple debe implementar la interfaz Una tag simple debe implementar la interfaz javax.servlet.jsp.tagext.SimpleTagjavax.servlet.jsp.tagext.SimpleTag La claseLa clase javax.servlet.jsp.tagext.SimpleTagSupport javax.servlet.jsp.tagext.SimpleTagSupport

implementa la interfaz implementa la interfaz Hay que añadir elementos setter por cada atributo e Hay que añadir elementos setter por cada atributo e

implementar implementar doTagdoTag Sólo se invoca un método no tres como antes: Sólo se invoca un método no tres como antes: doStartTag(), doStartTag(),

doAfterBody(), doEndTag()doAfterBody(), doEndTag() IMPORTANTE: los elementos de scripting no se IMPORTANTE: los elementos de scripting no se

permiten en el cuerpo del elemento siempre que la permiten en el cuerpo del elemento siempre que la custom tag utilice un simple tag handler custom tag utilice un simple tag handler

Revisar ejemploRevisar ejemplo customtag\ej8_simpletag\customtag\ej8_simpletag\ej8_simpletagej8_simpletag

Page 154: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

154

Ejemplo Simple TagEjemplo Simple Tag

package com.mycompany.mylib;package com.mycompany.mylib;import java.io.IOException;import java.io.IOException;import java.util.Iterator;import java.util.Iterator;import java.util.Map;import java.util.Map;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.JspFragment;import javax.servlet.jsp.tagext.JspFragment;import javax.servlet.jsp.tagext.SimpleTagSupport;import javax.servlet.jsp.tagext.SimpleTagSupport;

public class PollTag extends public class PollTag extends SimpleTagSupportSimpleTagSupport { { private String question;private String question; private Map answers;private Map answers; private String votesMapName;private String votesMapName; private String answersMapName;private String answersMapName; public void setQuestion(String question) {public void setQuestion(String question) { this.question = question;this.question = question; }} public void setAnswers(Map answers) {public void setAnswers(Map answers) { this.answers = answers;this.answers = answers; }} public void setVotesMapName(String votesMapName) {public void setVotesMapName(String votesMapName) { this.votesMapName = votesMapName;this.votesMapName = votesMapName; }} public void setAnswersMapName(String answersMapName) {public void setAnswersMapName(String answersMapName) { this.answersMapName = answersMapName;this.answersMapName = answersMapName; }}

Page 155: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

155

Ejemplo Simple TagEjemplo Simple Tag

public void doTag() throws JspException, IOException {public void doTag() throws JspException, IOException { JspWriter out = getJspContext().getOut();JspWriter out = getJspContext().getOut(); JspFragment body = JspFragment body = getJspBodygetJspBody();(); if (body != null) {if (body != null) { out.println("<p>");out.println("<p>"); body.invoke(null);body.invoke(null); out.println("</p>");out.println("</p>"); }} out.print("Question:"); out.print(question); out.println("<br>");out.print("Question:"); out.print(question); out.println("<br>"); out.println("<form action=\"result.jsp\" target=\"result\">");out.println("<form action=\"result.jsp\" target=\"result\">"); out.print("<input type=\"hidden\" name=\"question\" value=\"");out.print("<input type=\"hidden\" name=\"question\" value=\""); out.print(question); out.println("\">");out.print(question); out.println("\">"); out.print("<input type=\"hidden\" name=\"votesMapName\" value=\"");out.print("<input type=\"hidden\" name=\"votesMapName\" value=\""); out.print(votesMapName); out.println("\">");out.print(votesMapName); out.println("\">"); out.print("<input type=\"hidden\" name=\"answersMapName\" value=\"");out.print("<input type=\"hidden\" name=\"answersMapName\" value=\""); out.print(answersMapName); out.println("\">");out.print(answersMapName); out.println("\">"); Iterator i = answers.keySet().iterator();Iterator i = answers.keySet().iterator(); while (i.hasNext()) {while (i.hasNext()) { String key = (String) i.next();String key = (String) i.next(); String value = (String) answers.get(key);String value = (String) answers.get(key); out.print("<input type=\"radio\" name=\"vote\" value=\"");out.print("<input type=\"radio\" name=\"vote\" value=\""); out.print(key); out.print("\">"); out.print(value); out.println("<br>");out.print(key); out.print("\">"); out.print(value); out.println("<br>"); }} out.println("<input type=\"submit\" value=\"Vote\">");out.println("<input type=\"submit\" value=\"Vote\">"); out.println("</form>");out.println("</form>"); }}}}

Page 156: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

156

Ficheros Tag en JSP 2.0Ficheros Tag en JSP 2.0

JSP 2.0 permite desarrollar una acción JSP 2.0 permite desarrollar una acción propietaria como un fichero de tag (tag propietaria como un fichero de tag (tag file). file).

Un tag file es un fichero de texto donde se Un tag file es un fichero de texto donde se utilizan elementos JSP para todas las utilizan elementos JSP para todas las partes dinámicaspartes dinámicas Tiene la misma funcionalidad que un Tag Tiene la misma funcionalidad que un Tag

HandlerHandler Se diferencia de un JSP en que:Se diferencia de un JSP en que:

Tiene extensión Tiene extensión .tag.tag Usa una directiva Usa una directiva tagtag en vez de en vez de pagepage Permite especificar entrada y salida con Permite especificar entrada y salida con

directivas válidas sólo en tag files.directivas válidas sólo en tag files.

Page 157: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

157

Ejemplo de Fichero de Ejemplo de Fichero de TagTag<%@ tag body-content="empty" %><%@ tag body-content="empty" %><%@ attribute name="question" required="true" %><%@ attribute name="question" required="true" %><%@ attribute name="answers" required="true" <%@ attribute name="answers" required="true" type="java.util.Map" %>type="java.util.Map" %><%@ attribute name="votesMapName" required="true" %><%@ attribute name="votesMapName" required="true" %><%@ attribute name="answersMapName" required="true" %><%@ attribute name="answersMapName" required="true" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

Question: ${question}<br>Question: ${question}<br><form action="result.jsp" target="result"><form action="result.jsp" target="result"> <input type="hidden" name="question" value="${question}"><input type="hidden" name="question" value="${question}"> <input type="hidden" name="votesMapName" value="${votesMapName}"><input type="hidden" name="votesMapName" value="${votesMapName}"> <input type="hidden" name="answersMapName" value="${answersMapName}"><input type="hidden" name="answersMapName" value="${answersMapName}"> <c:forEach items="${answers}" var="a"><c:forEach items="${answers}" var="a"> <input type="radio" name="vote" value="${a.key}">${a.value}<br><input type="radio" name="vote" value="${a.key}">${a.value}<br> </c:forEach></c:forEach> <input type="submit" value="Vote"><input type="submit" value="Vote"></form></form>

Page 158: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

158

Explicación Fichero TagExplicación Fichero Tag

La directiva La directiva tagtag es similar a es similar a pagepage Declara características generales del fichero.Declara características generales del fichero. Su atributo Su atributo body-contentbody-content indica: indica:

emptyempty el elemento XML representando la acción no tiene el elemento XML representando la acción no tiene cuerpocuerpo

scriptlessscriptless el cuerpo no puede contener código Java el cuerpo no puede contener código Java tagdependenttagdependent el contenedor pasa el cuerpo al evaluador de la el contenedor pasa el cuerpo al evaluador de la

tagtag La directiva La directiva attributeattribute declara atributos válidos para la declara atributos válidos para la

acción definidaacción definida Su atributo Su atributo typetype indica el tipo de datos, por defecto indica el tipo de datos, por defecto StringString

Los Map de respuestas y votos y las preguntas son Los Map de respuestas y votos y las preguntas son codificados como campos hidden en el formulario, para así codificados como campos hidden en el formulario, para así poderse transferir a la página procesando los votospoderse transferir a la página procesando los votos

Page 159: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

159

Página Procesando VotosPágina Procesando Votos

<%@ page contentType="text/html" %><%@ page contentType="text/html" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html><html> <head><head> <title>Poll Results</title><title>Poll Results</title> </head></head> <body bgcolor="white"><body bgcolor="white"> <c:set target="${applicationScope[param.votesMapName]}" <c:set target="${applicationScope[param.votesMapName]}" property="${param.vote}" property="${param.vote}" value="${applicationScope[param.votesMapName][param.vote] + 1}" />value="${applicationScope[param.votesMapName][param.vote] + 1}" /> <p><p> Question: ${param.question}<br>Question: ${param.question}<br> <c:forEach items="${applicationScope[param.answersMapName]}"<c:forEach items="${applicationScope[param.answersMapName]}" var="a">var="a"> ${a.key}) ${a.value}: ${a.key}) ${a.value}: ${applicationScope[param.votesMapName][a.key]}<br>${applicationScope[param.votesMapName][a.key]}<br> </c:forEach></c:forEach> </p></p> </body></body></html></html>

Page 160: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

160

Utilizando el poll tagUtilizando el poll tag

<%@ page contentType="text/html" %><%@ page contentType="text/html" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="my" tagdir="/WEB-INF/tags/mytags" %><%@ taglib prefix="my" tagdir="/WEB-INF/tags/mytags" %>

<html><html> <head><head> <title>My Page</title><title>My Page</title> </head></head> <body bgcolor="white"><body bgcolor="white"> <jsp:useBean id="myAnswers" scope="application" <jsp:useBean id="myAnswers" scope="application" class="java.util.TreeMap">class="java.util.TreeMap"> <c:set target="${myAnswers}" property="1" value="Yes" /><c:set target="${myAnswers}" property="1" value="Yes" /> <c:set target="${myAnswers}" property="2" value="No" /><c:set target="${myAnswers}" property="2" value="No" /> <c:set target="${myAnswers}" property="3" value="Maybe" /><c:set target="${myAnswers}" property="3" value="Maybe" /> </jsp:useBean></jsp:useBean> <jsp:useBean id="myVotes" scope="application"<jsp:useBean id="myVotes" scope="application" class="java.util.HashMap" /> class="java.util.HashMap" /> ...... <p><p> <my:poll question="Will you start using tag files?" <my:poll question="Will you start using tag files?" answers="${myAnswers}"answers="${myAnswers}" answersMapName="myAnswers" votesMapName="myVotes" />answersMapName="myAnswers" votesMapName="myVotes" /> </p></p> ...... </body></body></html></html>

Page 161: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

161

EjerciciosEjercicios

1.1. Ejecutar los ficheros Ejecutar los ficheros ejtag1_hola.jsp (Etiqueta sin atributos ni cuerpo)ejtag1_hola.jsp (Etiqueta sin atributos ni cuerpo) ejtag2_hola.jsp (Etiqueta con atributos)ejtag2_hola.jsp (Etiqueta con atributos) ejtag3_hola.jsp (etiqueta con atributos y cuerpo)ejtag3_hola.jsp (etiqueta con atributos y cuerpo)

2.2. Comprobar el contenido del fichero web.xmlComprobar el contenido del fichero web.xml

3.3. Comprobar el contenido del fichero Comprobar el contenido del fichero etiquetas.tldetiquetas.tld

4.4. Hacer una etiqueta denominada suma, que Hacer una etiqueta denominada suma, que efectúe la suma de los dos números pasados efectúe la suma de los dos números pasados como parámetroscomo parámetros

Page 162: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

162

Inclusión de la funcionalidad en una Inclusión de la funcionalidad en una aplicación webaplicación web

Así pues, la funcionalidad de una aplicación puede ser Así pues, la funcionalidad de una aplicación puede ser integrada de tres modos:integrada de tres modos:

Como código Java dentro de las páginas JSPComo código Java dentro de las páginas JSP No separa la interfaz de la implementaciónNo separa la interfaz de la implementación

Con el uso de JavaBeans llamados desde las páginas Con el uso de JavaBeans llamados desde las páginas JSPJSP Separa la interfaz de la implementación en gran medidaSepara la interfaz de la implementación en gran medida

Con el uso de etiquetas personalizadas Con el uso de etiquetas personalizadas Evitan la necesidad de inclusión de cualquier código Java en Evitan la necesidad de inclusión de cualquier código Java en

la página JSPla página JSP

Un buen diseño pasa por evitar en la medida de lo Un buen diseño pasa por evitar en la medida de lo posible la primera de las tres opciones posible la primera de las tres opciones

Page 163: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

163

Mantenimiento de Mantenimiento de sesionessesiones Dado que el JSP se convierte en un servlet, todo lo Dado que el JSP se convierte en un servlet, todo lo

visto en servlets es válido con JSP.visto en servlets es válido con JSP. Uso de Interfaz HttpSession para la gestión de Uso de Interfaz HttpSession para la gestión de

sesionessesiones El objeto “session” se crea automáticamente en JSP El objeto “session” se crea automáticamente en JSP

(puede suprimirse con page)(puede suprimirse con page) El objeto “session” es un diccionario al que se El objeto “session” es un diccionario al que se

pueden asociar objetos (atributos) y darles un pueden asociar objetos (atributos) y darles un nombre (también eliminar)nombre (también eliminar) session.setAttribute(“mipaquete.sesion.nombre”, session.setAttribute(“mipaquete.sesion.nombre”, miObjeto);miObjeto);

Se puede recuperar la información desde otras Se puede recuperar la información desde otras peticiones posteriores de la misma sesiónpeticiones posteriores de la misma sesión Clase unObjeto = Clase unObjeto = session.getAttribute(“mipaquete.sesion.nombre);session.getAttribute(“mipaquete.sesion.nombre);

También se puede eliminar un objeto asociadoTambién se puede eliminar un objeto asociado session.removeAttribute(“mipaquete.sesion.nombre”);session.removeAttribute(“mipaquete.sesion.nombre”);

Page 164: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

164

Proceso de autentificación de Proceso de autentificación de usuariosusuarios Todo lo visto en servlets es aplicable en JSPTodo lo visto en servlets es aplicable en JSP MecanismosMecanismos

Declarativo. Usa un mecanismo Declarativo. Usa un mecanismo proporcionado por el motor de servletsproporcionado por el motor de servlets

Indicar restricciones de seguridadIndicar restricciones de seguridad Indicar el modo de realizar la autentificaciónIndicar el modo de realizar la autentificación Indicar los usuarios definidos en el sistemaIndicar los usuarios definidos en el sistema

Por programaPor programa Generar formulario html para nombre y claveGenerar formulario html para nombre y clave Generar página JSP que accede a Base de Datos, Generar página JSP que accede a Base de Datos,

comprueba clave y se fijan los parámetros de comprueba clave y se fijan los parámetros de seguridad en el JavaBean, cuyo ámbito se restringe seguridad en el JavaBean, cuyo ámbito se restringe a la sesión que acaba de establecer el usuarioa la sesión que acaba de establecer el usuario

Page 165: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

165

XML y JSP trabajando XML y JSP trabajando juntosjuntos Para utilizar un documento XML en una Para utilizar un documento XML en una

aplicación es preciso analizarloaplicación es preciso analizarlo Existen dos modelos de analizadores aceptados:Existen dos modelos de analizadores aceptados:

DOM (Modelo de objetos de documento)DOM (Modelo de objetos de documento) SAX (API simple para XML)SAX (API simple para XML)

Analizador de XML tipo DOMAnalizador de XML tipo DOM El analizador crea una estructura de datos en El analizador crea una estructura de datos en

memoria en forma de árbol, donde se coloca todos los memoria en forma de árbol, donde se coloca todos los elementos del documentoelementos del documento

Ofrece métodos para acceso a los nodos y a la Ofrece métodos para acceso a los nodos y a la información de los mismos a través de una APIinformación de los mismos a través de una API

Analizador SAXAnalizador SAX En lugar de crear un árbol, va leyendo el archivo XML En lugar de crear un árbol, va leyendo el archivo XML

y ejecuta acciones según las etiquetas encontradas.y ejecuta acciones según las etiquetas encontradas.

Page 166: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

166

XML y JSP trabajando XML y JSP trabajando juntosjuntos Si se desea usar un documento XML en una Si se desea usar un documento XML en una

aplicación JSP habrá queaplicación JSP habrá que Incluir el código Java para la manipulación del Incluir el código Java para la manipulación del

documento XMLdocumento XML o bien incluir un JavaBean que lo manipuleo bien incluir un JavaBean que lo manipule o bien definir una etiqueta personalizada que o bien definir una etiqueta personalizada que

envuelva la operación dentro de su claseenvuelva la operación dentro de su clase En cualquier caso se trata de manejar XML En cualquier caso se trata de manejar XML

con Javacon Java

Page 167: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

167

Ej. de análisis XML con DOM en una Ej. de análisis XML con DOM en una página JSPpágina JSP

Veamos cómo realizar la autenticación de Veamos cómo realizar la autenticación de usuarios en base a un fichero XML con los usuarios en base a un fichero XML con los datos de autenticacióndatos de autenticación

Entrada

login01.jsp

AutenticacionBean

Proceso

login02.jsp

NO

no.html

Usuarios.xml

OK

si.html

Page 168: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

168

Ej. de análisis XML con DOM en una Ej. de análisis XML con DOM en una

página JSPpágina JSP Supongamos el siguiente contenido de la página Supongamos el siguiente contenido de la página

xml de usuarios autorizadosxml de usuarios autorizados<?xml version=`1.0` encoding=`iso-8859`?><?xml version=`1.0` encoding=`iso-8859`?>

<usuariosAutorizados><usuariosAutorizados>

<usuario nombre=“Agustin” pwd=“agustin” <usuario nombre=“Agustin” pwd=“agustin” nivel=“administrador”>nivel=“administrador”>

</usuario></usuario>

<usuario nombre=“Invitado” pwd=“invitado” <usuario nombre=“Invitado” pwd=“invitado” nivel=“usuario”>nivel=“usuario”>

</usuario></usuario>

</usuariosAutorizados></usuariosAutorizados>

Page 169: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

169

Ej. de análisis XML con DOM en una Ej. de análisis XML con DOM en una

página JSPpágina JSP Formulario de entrada (login01.jsp)Formulario de entrada (login01.jsp)<form method=“POST” accion=“login02.jsp” <form method=“POST” accion=“login02.jsp”

name=“autenticacion”>name=“autenticacion”><table border=“0” cellpadding=“0” cellspacing=“0” <table border=“0” cellpadding=“0” cellspacing=“0” width=“200”>width=“200”><tr><tr><td width=“50%”>Nombre</td><td width=“50%”>Nombre</td><td width=“50”><input type=“text” name=“nombre” <td width=“50”><input type=“text” name=“nombre” size=“16”></td>size=“16”></td></tr></tr><tr><tr><td width=“50%”>Contraseña</td><td width=“50%”>Contraseña</td><td width=“50%”><input type=“password” name=“pwd” <td width=“50%”><input type=“password” name=“pwd” size=“16”></td>size=“16”></td></tr></tr><tr><tr><td width=“50%”> colspan=“2” align=“center”><td width=“50%”> colspan=“2” align=“center”> <input type=“submit” value=“Entrar” size=“16”></td><input type=“submit” value=“Entrar” size=“16”></td></tr> </table> </form></tr> </table> </form>

Page 170: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

170

Ej. de análisis XML con DOM en una Ej. de análisis XML con DOM en una

página JSPpágina JSP Autenticación (login02.jsp)Autenticación (login02.jsp) Importación de los paquetes para el control del Importación de los paquetes para el control del

fichero XMLfichero XML<%@ page import=“javax.xml.parsers.*” %><%@ page import=“javax.xml.parsers.*” %>

Definición de las varibles para información de Definición de las varibles para información de entornoentorno

<%! String usuario=“”; %><%! String usuario=“”; %>

<%! String pwd=“”; %><%! String pwd=“”; %>

<%! String redireccionURL =“”; %><%! String redireccionURL =“”; %>

Instanciación del JavaBean responsable de mantener Instanciación del JavaBean responsable de mantener información del usuario mientras dure la sesióninformación del usuario mientras dure la sesión

<jsp:useBean id=“login” scope=“session” <jsp:useBean id=“login” scope=“session” class=“login.Autenticacion”/>class=“login.Autenticacion”/>

Page 171: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

171

Ej. de análisis XML con DOM en una Ej. de análisis XML con DOM en una

página JSPpágina JSP Recuperación de los datos de identificación Recuperación de los datos de identificación

del usuario enviados desde el formulario del usuario enviados desde el formulario HTML de la página previaHTML de la página previa

if (request.getParameter(“nombre”)!= null)if (request.getParameter(“nombre”)!= null)

{usuario=request.getParameter(“nombre”); }{usuario=request.getParameter(“nombre”); }

if (request.getParameter(“pwd”)!=null)if (request.getParameter(“pwd”)!=null)

{ pwd= request.getParameter(“pwd”); }{ pwd= request.getParameter(“pwd”); }

Inicialización de variables para el Inicialización de variables para el procesamiento del documento XMLprocesamiento del documento XML

Document documento;Document documento;

DocumentBuilderFactory.newInstance();DocumentBuilderFactory.newInstance();

redireccionURL=“no.html”;redireccionURL=“no.html”;

Page 172: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

172

Ej. de análisis XML con DOM en una Ej. de análisis XML con DOM en una

página JSPpágina JSP Generación del conjunto de nodos siguiendo el Generación del conjunto de nodos siguiendo el

modelo DOMmodelo DOM// Apertura del archivo// Apertura del archivo

URL url=new URL(archivoXml);URL url=new URL(archivoXml);

InputStream datosXML=url.openStream();InputStream datosXML=url.openStream();

// Construcción del documento XML// Construcción del documento XML

DocumentBuilder DocumentBuilder builder=factory.newDocumentBuilder();builder=factory.newDocumentBuilder();

documento=builder.parse(datosXML);documento=builder.parse(datosXML);

//Generación de lista de nodos en base a la clave “usuario”//Generación de lista de nodos en base a la clave “usuario”

NodeList NodeList listaNodos=documento.getElementsByTagName(“usuariolistaNodos=documento.getElementsByTagName(“usuario”);”);

Page 173: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

173

Ej. de análisis XML con DOM en una Ej. de análisis XML con DOM en una

página JSPpágina JSP Comparación de los atributos introducidos con Comparación de los atributos introducidos con

los existentes en el árbollos existentes en el árbolfor (int i=0; i<listaNodos.getLength();i++) {for (int i=0; i<listaNodos.getLength();i++) {

Node actNodo=listaNodos.item(i);Node actNodo=listaNodos.item(i);

// para este nodo recogemos el valor del “nombre” y // para este nodo recogemos el valor del “nombre” y contraseñacontraseña

Element actElemento=(Element)listaNodos.item(i);Element actElemento=(Element)listaNodos.item(i);

String actUsuario=actElemento.getAtribute(“nombre”);String actUsuario=actElemento.getAtribute(“nombre”);

String actPwd=actElemento.getAtribute(“pwd”);String actPwd=actElemento.getAtribute(“pwd”);

// si el usuario es correcto le dejamos que siga// si el usuario es correcto le dejamos que sigaif (actUsuario.equals(usuario)&& actPwd.equals(pwd)){if (actUsuario.equals(usuario)&& actPwd.equals(pwd)){

redireccionURL=“si.html”;redireccionURL=“si.html”;

Page 174: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

174

Ej. de análisis XML con DOM en una Ej. de análisis XML con DOM en una

página JSPpágina JSP //Actualizamos el bean para indicar que el usuario ya está //Actualizamos el bean para indicar que el usuario ya está

autorizadoautorizadologon.setNombre(usuario);logon.setNombre(usuario);

logon.setAutorizado();logon.setAutorizado();

break bucle();break bucle();

}}

}}

Código JavaScript que permite el reenvío de una Código JavaScript que permite el reenvío de una página a otra, de forma que se pueda presentar página a otra, de forma que se pueda presentar al visitante la página adecuada dependiendo de al visitante la página adecuada dependiendo de que haya sido posible la autenticación o noque haya sido posible la autenticación o no

<script language=“javascript”><script language=“javascript”>

setTimeout(“document.location=`<%= redireccionURL setTimeout(“document.location=`<%= redireccionURL %>`”,100)%>`”,100)

</script></script>

Page 175: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

175

Ej. de análisis XML con DOM en una Ej. de análisis XML con DOM en una

página JSPpágina JSP Control de la sesiónControl de la sesión

El JavaBean Autenticacion.java lleva a cabo el El JavaBean Autenticacion.java lleva a cabo el controlcontrol

Es posible comprobar en cada página web si el Es posible comprobar en cada página web si el usuario está autorizado llamando al JavaBeanusuario está autorizado llamando al JavaBean

Los métodos set de las propiedades nombre y clave Los métodos set de las propiedades nombre y clave se invocan desde las páginas de control de la lógica se invocan desde las páginas de control de la lógica de aplicación (login02.jsp) una vez que el usuario ha de aplicación (login02.jsp) una vez que el usuario ha sido validadosido validado

Los métodos get devuelven objetos String con la Los métodos get devuelven objetos String con la identificación y la autorización del usuarioidentificación y la autorización del usuario

Page 176: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

176

Ej. de análisis XML con DOM en una Ej. de análisis XML con DOM en una

página JSPpágina JSP package login;package login;import java.io.*;import java.io.*;import javax.servlet.*;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.http.*;import java.util.*;import java.util.*;public class Autenticacion {public class Autenticacion { // Propiedad "nombre" del bean, que corresponde al // Propiedad "nombre" del bean, que corresponde al

nombrenombre // del usuario para el que se implementa el bean// del usuario para el que se implementa el bean String nombre = "";String nombre = ""; // Variable de clase que indica si el usuario para el// Variable de clase que indica si el usuario para el // que se crea el bean en la sesión que ha // que se crea el bean en la sesión que ha

establecidoestablecido // con el servidor está identificado ante el sistema // con el servidor está identificado ante el sistema

y sey se // le concede autorización// le concede autorización boolean autorizado = false;boolean autorizado = false;

Page 177: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

177

Ej. de análisis XML con DOM en una Ej. de análisis XML con DOM en una

página JSPpágina JSP // Métodos get() y set() de la propiedad "nombre"// Métodos get() y set() de la propiedad "nombre" public String getNombre() {public String getNombre() { return( nombre );return( nombre ); }} public void setNombre( String _nombre ) {public void setNombre( String _nombre ) { nombre = _nombre;nombre = _nombre; }} // Métodos get() y set() de la variable de clase que // Métodos get() y set() de la variable de clase que

controlacontrola // la autenticación del usuario ante el sistema// la autenticación del usuario ante el sistema public void setAutorizado() {public void setAutorizado() { autorizado = true;autorizado = true; }} public boolean getAutorizado() {public boolean getAutorizado() { return( autorizado ); } }return( autorizado ); } }

Page 178: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

178

Qué se ha visto en esta Qué se ha visto en esta sesión sesión 1.1. Primer vistazo a la tecnología JSPPrimer vistazo a la tecnología JSP

Qué es y para qué sirve JSPQué es y para qué sirve JSP Primer ejemplo Primer ejemplo Hola Mundo y la fechaHola Mundo y la fecha Uso de objetos implícitos y ejemploUso de objetos implícitos y ejemplo

2.2. Elementos básicos de una página JSPElementos básicos de una página JSP DirectivasDirectivas <%@ (page | include | taglib) <%@ (page | include | taglib) Código JavaCódigo Java <% (declaraciones | java | <% (declaraciones | java |

expresiones)expresiones) Acciones estándarAcciones estándar <jsp:acción (include | <jsp:acción (include |

forward | usebean| getproperty | setproperty) forward | usebean| getproperty | setproperty) 3.3. Elementos Avanzados de una página JSPElementos Avanzados de una página JSP

Acciones personalizadasAcciones personalizadas (etiquetas) (etiquetas) Definición de la estructura (biblioteca.tld y ésta en Definición de la estructura (biblioteca.tld y ésta en

web.xml)web.xml) Nombre, clase controladoraNombre, clase controladora, atributos, cuerpo, , atributos, cuerpo,

etc.etc. Definición de la funcionalidad (JavaBean que deriva de Definición de la funcionalidad (JavaBean que deriva de

taglib)taglib) Declaración en página con <%@taglib y uso posteriorDeclaración en página con <%@taglib y uso posterior

Page 179: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

179

Principales conclusiones de Principales conclusiones de

diseñodiseño 1.1. La tecnología JSP permite diseño de aplicaciones web con La tecnología JSP permite diseño de aplicaciones web con

generación dinámico de páginas web tras un generación dinámico de páginas web tras un procesamientoprocesamiento

2.2. La lógica de la aplicación (procesamiento) se invoca desde La lógica de la aplicación (procesamiento) se invoca desde una página html mediante tres posibles modosuna página html mediante tres posibles modos

1.1. Inclusión de código JavaInclusión de código Java2.2. Invocación de objetos (JavaBeans) que implementen la lógicaInvocación de objetos (JavaBeans) que implementen la lógica3.3. Invocación de etiquetas personalizadas que implementen la Invocación de etiquetas personalizadas que implementen la

lógicalógica3.3. Para realizar un Para realizar un buen diseñobuen diseño que separe interfaz de lógica que separe interfaz de lógica

no se debe incluir directamente el código Javano se debe incluir directamente el código Java. De este . De este modo están separadas las funciones:modo están separadas las funciones:

• Diseñador de interfaces (JSP sin código Java -> html y marcas) Diseñador de interfaces (JSP sin código Java -> html y marcas) • Programador de la lógica de la aplicación (JavaBeans que Programador de la lógica de la aplicación (JavaBeans que

implementan la funcionalidad)implementan la funcionalidad)4.4. Una página JSP se transforma automáticamente en un Una página JSP se transforma automáticamente en un

servlet. La ventaja es que el diseño de la interfaz no se servlet. La ventaja es que el diseño de la interfaz no se mezcla con la programación en Javamezcla con la programación en Java

Page 180: 1 Java Server Pages (JSP). 2 Contenido 1. Primer vistazo a la tecnología JSP Qué es y para qué sirve JSP Qué es y para qué sirve JSP Primer ejemplo Hola

180

Java Server Java Server Pages (JSP)Pages (JSP)

Fin de la Fin de la sesiónsesión