tema nº 3: elementos de jsp

16

Click here to load reader

Upload: anyeni-garay

Post on 04-Jul-2015

282 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: TEMA Nº 3: ELEMENTOS DE JSP

Desarrollo de Aplicaciones Web con J2EE

Ing. Pablo Cesar Ttito C. [email protected]

Jaaaaaaaaaaaa

Desarrollo de Aplicaciones Web con J2EE

Page 2: TEMA Nº 3: ELEMENTOS DE JSP

Desarrollo de Aplicaciones Web con J2EE

Ing. Pablo Cesar Ttito C. [email protected]

TEMA Nº 3: ELEMENTOS DE JSP

PROCESAMIENTO DE JSP

Con JSP podemos crear aplicaciones web que se ejecuten en variados servidores web, de múltiples plataformas, ya que Java es en esencia un lenguaje multiplataforma. Las páginas JSP están compuestas de código HTML/XML mezclado con etiquetas especiales para programar scripts de servidor en sintaxis Java. Por tanto, las JSP podremos escribirlas con nuestro editor HTML/XML habitual.

MOTORJSP El motor de las páginas JSP está basado en los servlets de Java -programas en Java destinados a ejecutarse en el servidor-, aunque el número de desarrolladores que pueden afrontar la programación de JSP es mucho mayor, dado que resulta mucho más sencillo aprender que los servlets. En JSP creamos páginas de manera parecida a como se crean en ASP o PHP -otras dos tecnologías de servidor-. Generamos archivos con extensión .jsp que incluyen, dentro de la estructura de etiquetas HTML, las sentencias Java a ejecutar en el servidor. Antes de que sean funcionales los archivos, el motor JSP lleva a cabo una fase de traducción de esa página en un servlet, implementado en un archivo class (Byte codes de Java). Esta fase de traducción se lleva a cabo habitualmente cuando se recibe la primera solicitud de la página .jsp, aunque existe la opción de precompilar en código para evitar ese tiempo de espera la primera vez que un cliente solicita la página. Ejemplo de página JSP En la imagen siguiente se puede ver un ejemplo extremadamente simple de una página JSP y el esquema de conversión de esa página en un servlet.

Page 3: TEMA Nº 3: ELEMENTOS DE JSP

Desarrollo de Aplicaciones Web con J2EE

Ing. Pablo Cesar Ttito C. [email protected]

REREQUISITOS Para aprender JSP, aparte de conocer HTML, será necesario comprender y tener algo de experiencia en la programación en Java, que es un lenguaje de programación Orientado a Objetos por completo. Una vez conocida la programación en Java se puede estudiar por encima el sistema de Servlets, lo que nos dará una mejor idea del funcionamiento interno del motor JSP. Para aprender Java podemos consultar algunos enlaces del correspondiente directorio de nuestro buscador de enlaces. Además, necesitaremos descargar e instalar Tomcat, el contenedor de servlets usado en la referencia oficial de implementación de JSP. Podemos acceder a un ejercicio para aprender a realizar esta instalación, disponible también en la referencia de aprendizaje de la página de Java. ReferenciasJSP Hemos creado una nueva sección en nuestro directorio dedicada por completo a las páginas JSP, que será muy interesante para todo aquel que desee profundizar en el tema.

DIRECTIVAS JSP Esta figura muestra lo que quizás sea la aplicación JSP más sencilla que uno podría escribir.

Duke Dice Hello

El Banner de Duke (dukebanner.html) <table border="0" width="400" cellspacing="0" cellpadding="0"> <tr> <td height="150" width="150">&nbsp; </td> <td width="250">&nbsp; </td> </tr>

Page 4: TEMA Nº 3: ELEMENTOS DE JSP

Desarrollo de Aplicaciones Web con J2EE

Ing. Pablo Cesar Ttito C. [email protected]

<tr> <td width="150">&nbsp; </td> <td align="right" width="250"><br> <imgsrc="duke.waving.gif"></td> </tr> </table> <br>

La página JSP (helloworld.jsp)

<%@ page info="a hello world example" %> <html> <head><title>Hello, World</title></head> <body bgcolor="#ffffff" background="background.gif"> <%@ include file="dukebanner.html" %> <table> <tr> <td width=150>&nbsp; </td> <td width=250 align=right><h1>Hello, World!</h1></td> </tr> </table> </body>

Page 5: TEMA Nº 3: ELEMENTOS DE JSP

Desarrollo de Aplicaciones Web con J2EE

Ing. Pablo Cesar Ttito C. [email protected]

</html>

La Directiva Page La directiva Page es una etiqueta JSP que usaremos encaso todos los ficheros fuente JSP que escribamos. En helloworld.jsp, es la línea que se parece a esto: <%@ page info="a hello world example" %> Esta directiva da instrucciones al motor JSO que aplica a todo el fichero fuente JSP. En este ejemplo, está directiva especifica un comentario informativo que formará parte del fichero JSP compilado. En otros casos, podría específicar el lenguaje de script usado en el fichero fuente JSP, los paquetes de ficheros fuentes que serán importados, o la página de error que se llamará si ocurren errores o excepciones. Podemos usar la directiva page en cualquier lugar del fichero JSP, pero es un buen estilo de codificación situarlo en la parte superior del fichero. como es una etiqueta JSP, podemos situarla antes de la etiqueta de apertura <html>tag.

La Directiva Include La directiva include inserta el contenido de otro fichero en el fichero principal JSP, donde está situada la directiva. Es útil para incluir informacióndecopuright, ficheros de lenguaje de script, p cualquier cosa que podríamos querer reutilizar en otras aplicaciones. En este ejemplo, el fichero incluido es una tabla que crea un banner gráfico. Podemos ver el contenido del fichero incluido viendo la página fuente del fichero principal JSP mientras estamos ejecutando Hello, World. El fichero incluido no contiene etiquetas <html> o <body>, porque podrían generar conflictos con las mismas etiquetas del fichero JSP llamante.

Una Nota sobre las Etiquetas JSP Cuando uses los ejemplos de este capítulo, recuerda que las etiquetas JSP son sensibles a las mayúscula. Si, por ejemplo, tecleamos <jsp:usebean> en lugar de <jsp: useBean>, nuestra etiqueta no será reconocida, y la implementación de referencia JSP 1.0 lanzará una excepción. Algunos de los atributos de las etiquetas toman nombres de clases, nombres de paquetes, pathnameso otros valores también sensibles a las mayúsculas.

¿Cómo ejecutar la aplicación de ejemplo Las instrucciones dadas aquí usan una pathname del estilo UNIX. Si estamos trabajando en Windows, usamo el mismo pathname pero con el separador de directorios apropiado Creamos el directorio (o carpeta) ../jswdk-.0/examples/jsp/tutorial/helloworld.

Page 6: TEMA Nº 3: ELEMENTOS DE JSP

Desarrollo de Aplicaciones Web con J2EE

Ing. Pablo Cesar Ttito C. [email protected]

Situamos los siguientes ficheros en el directorio ../tutorial/hello: background.gif, duke.waving.gif, dukebanner.html, y helloworld.jsp. Desde la línea de comandos, arrancamos la implementación de referencia JSP de Sun:cd../jswdk-1.0 startserver Abrimos un navegador Web y vamos a http://yourMachineName:8080/examples/jsp/ tutorial/helloworld/helloworld.jsp

ACCIONES reación de acciones JSP personalizadas

Para todo aquel que haya utilizado alguna vez JSP, sabe que con la librería core de JSLT tendremos en la mayoría de las ocasiones las herramientas necesarias para nuestras aplicaciones, pero puede haber casos que no sean suficientes o que nos interese crear nuestras propias etiquetas para nuestras aplicaciones. Veremos ahora paso a paso como crearlas. Esta acción requiere de dos pasos fundamentales: Implementación de la clase manejadora. Por cada tag que queramos crear, deberemos de definir su clase manejadora que implemente las operaciones a realizar por la aplicación. Creación del archivo de libería, que contiene la información necesaria para que el contenedor web pueda interpretar esa información.

IMPLEMENTACIÓN DE LA CLASE MANEJADORA La interfaz javax.servlet.jsp.tagext.Tag es la que nos proporciona el soporte para poder crear esta clase manejadora con los elementos mínimos necesarios. También podríamos heredar de la clase javax.servlet.jsp.tagext.TagSupport que ya nos proporciona una implementación de Tag por defecto. Los métodos que se ejecutan en una durante la ejecución de la acción son: voidsetPageContext(PageContext pc): Es el primer método invocado por el contenedor y permite establecer el contexto de la página actual. voidsetParent (Tagparent): Es el segundo método que se ejecuta en al acción y al que se le pasa el objeto Tag o en su defecto Null.

Page 7: TEMA Nº 3: ELEMENTOS DE JSP

Desarrollo de Aplicaciones Web con J2EE

Ing. Pablo Cesar Ttito C. [email protected]

intdoStartTag(): Se ejecuta una vez que el contenedor detecta la etiqueta de comienzo de la acción. Nos devolverá un número que indicará al contenedor como tratar con el cuerpo de la acción. Los posibles valores son: Tag.EVAL_BODY_INCLUDE, si queremos que se evalue el body de la acción o Tag.SKIP_BODY, si no queremos que evalue el cuerpo. intdoEndTag(): Se invoca cuando detecta la etiqueta de cierre de la acción. Devolverá un valor que indica al contenedor como tiene que actuar. Los posibles valores son:Tag.EVAL_PAGE, que indica que tienen que evaluar el resto de la página o el valorTag.SKIP_PAGE, con la que no se evaluará el resto de la página. Para poder mostrar los resultados de la etiqueta en la página, tenemos que hacer uso de la clase JspWriter, y en concreto haciendo uso de su método getOut(). Por mediopageContext podremos tener acceso al objeto JspWriter. package ejemplo; importjavax.servlet.jsp.*; importjavax.servlet.jsp.tagext.*; public class Saludo extends TagSupport{ publicintdoStartTag() throws JspException{ try{ JspWriter out=pageContext.getOut(); out.println("HolaMundo"); } catch(Exception e){ e.printStackTrace(); } return SKIP_BODY; } publicintdoEndTag(){ return EVAL_PAGE; } }

Page 8: TEMA Nº 3: ELEMENTOS DE JSP

Desarrollo de Aplicaciones Web con J2EE

Ing. Pablo Cesar Ttito C. [email protected]

ARCHIVO LIBRERÍA Este archivo consiste en un archivo XML con extensión .tld, donde indicaremos el conjunto de acciones que queremos que pertenezcan a la libería. Lo primero que deberemos de indicar es el standar que se utilizará en el documento. En nuestro caso: <!DOCTYPEtaglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> Luego indicaremos el elemento raiz taglig, y dentro indicaremos todas las etiquetas del documento. Las mas importantes son: tlib-version: Número de la versión de la librería. jsp-version: Versión de la especificación JSP utilizada por la librería, en nuestro caso 2.0. short-name: posible valor elegido para ser utilizado como prefijo. uri: es la url asociada a la librería. description: Texto descriptivo de la libería. tag: definición de una librería. Contendrá los siguientes subelementos: name: Nombre de la acción. tag-class: Nombre de la clase que define la acción. body-content: Información utilizada para determinar como se va a evaluar el cuerpo de la acción. description: Descripcion de la acción. attribute: define los atributos de la acción. Los posibles elementos serán: name. Nombre del atributo required. Indica si el atributo es o no obligatorio rtexprvalue. Indica si el atributo puede o no ser calculado dinámicamente utilizando una expresión. type. Tipo de dato del atributo (nombre cualificado de la clase). Para literales es siempre String. <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPEtaglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/webjsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version>

Page 9: TEMA Nº 3: ELEMENTOS DE JSP

Desarrollo de Aplicaciones Web con J2EE

Ing. Pablo Cesar Ttito C. [email protected]

<short-name>ejemplo</short-name><uri>http://www.milibreria.tld</uri><description>Ejemplo de librería</description> <tag> <name>saludo</name> <tag-class>ejemplo.Saludo</tag-class><body-content>empty</body-content><description>tag de ejemplo</description></tag> </taglib>

UTLIZACION EN LA APLICACION A la hora de distribuir las clases manejadoras podemos optar por tratar con los .class o, preferiblemente, generar un archivo .jar en el que se incluyan todas estas clases. Tanto en un caso como en otro, las clases tendrán que ser accesibles desde la aplicación Web para lo cual debemos proceder de la siguiente manera según la forma en que se distribuyan las clases: Si las clases se distribuyen como .class, todos estos archivos deberán ser incluidos en algún paquete dentro del directorio WEB-INF\classes de la aplicación. Si se distribuyen como un archivo .jar, este deberá ser incluido en el directorio WEBINF\lib de la aplicación En cuanto al archivo de librería .tld, lo más práctico es incluirlo en el .jar junto con las clases manejadoras, aunque podemos situarlo en cualquier subdirectorio de la aplicación (normalmente, dentro de WEB-INF). Una vez realizadas las operaciones anteriores, para poder usar las acciones de la librería en cualquier página JSP de la aplicación simplemente tendremos que incluir una referencia a la librería a través de la directiva taglib. Por ejemplo para utilizar una libería ya creada, al principio del archivo JSP deberíamos de poner la siguiente línea, sustituyendo el uri, por el que nosotros hayamos indicado. <%@ tagliburi=“http://www.ejemplolibreria.tld” prefix= “ejemplo”%> Si el .tld estuviera en el archivo .jar no habría que hacer ninguna otra operación, pero si estuviera situado, por ejemplo, en la ubicación WEB-

Page 10: TEMA Nº 3: ELEMENTOS DE JSP

Desarrollo de Aplicaciones Web con J2EE

Ing. Pablo Cesar Ttito C. [email protected]

INF\librerias\ejemplolibreria.tld, sería necesario incluir la siguiente entrada en el archivo web.xml <web-app> <!--otros elementos--> <taglib> <taglib-uri> http://www.milibreria.tld </taglib-uri> <taglib-location> /WEB-INF/librerias/ejemplolibreria.tld </taglib-location> </taglib> Su uso en un archivo jsp quedaría de la siguiente forma que os indicamos: <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@ tagliburi=“http://www.milibreria.tld” prefix=“ejemplo”%>

EXPRESIONES En JSP se utilizan las expresiones para insertar valores, obtenidos con Java, directamente a la salida que se envía al cliente o solicitante. Tiene dos sintaxis: <%= expresión Java %> (Note el signo igual (=) que acompaña justo detrás del inicio de código JSP y asegúrese que dicho signo acompaña al de porcentaje (%)). Existe otra sintaxis que es la siguiente

Cualquiera de las dos sintaxis se corresponde con una expresión en JSP. ¿Cómo funcionan las expresiones?. Pues muy sencillo, la expresión es evaluada en el Motor de JSP, se obtiene un valor de la expresión y éste se sustituye justo donde se utiliza. Veamos un ejemplo sencillo, abrimos una nueva sesión de NetBeans 6.9, hacemos Nuevo Proyecto, Java Web, Web Application y le damos nombre expresiones1,

Page 11: TEMA Nº 3: ELEMENTOS DE JSP

Desarrollo de Aplicaciones Web con J2EE

Ing. Pablo Cesar Ttito C. [email protected]

cuando NetBeans 6.9 nos muestre la plantilla del archivo index.jsp lo cambiamos por este otro código. En el código anterior, en la línea 19 tenemos una expresión. Esta expresión básicamente consiste en crear una nueva instancia de la clase Date, con lo cual la expresión new java.util.Date() producirá una llamada a la fecha del sistema por parte del Motor JSP desde el servidor, y esa fecha obtenida se sustituirá por todo lo que hay entre las etiquetas de comienzo y fin del lenguaje JSP.

DECLARACIONES Las declaraciones de variables o métodos se hacen en JSP en la forma <%! declaración de variable o método; %> Note el signo (!) de admiración que acompaña justo detrás del signo porcentaje (%), allí donde comienza del código JSP. Estas variables o métodos así definidos serán globales y por tanto accesibles desde cualquier lugar de la página JSP. Hay que tener en cuenta que el servidor a través del motor JSP transforma la página JSP en un servlet, y éste es usado por múltiples peticiones, lo que provoca que este tipo de variables conserven su valor entre sucesivas llamadas o ejecuciones. Las declaraciones se ejecutan una única vez, en la primera llamada al servlet equivalente. En el caso de una declación múltiple, <%! variable1; [variable2;] … %> También puede inicializarse las variables en el momento de la declaración, como por ejemplo: <%!int contador = 0; %> Los ocho tipos de datos primitivos incluidos en el lenguaje de programación Java que pueden declararse para una variable son: byte, short, int, long, float, double, boolean y char. (Ver http://www.codexion.com/tutorialesjava/java/nutsandbolts/datatypes.html ). También puede usarse esta otra sintaxis

Ejemplo1: Queremos declarar y asignar valores a tres variables numéricas a través de declaraciones JSP para calcular finalmente el valor medio.

Page 12: TEMA Nº 3: ELEMENTOS DE JSP

Desarrollo de Aplicaciones Web con J2EE

Ing. Pablo Cesar Ttito C. [email protected]

Iniciamos una nueva sesión con Netbeans IDE, abrimos un proyecto nuevo del tipo “Java Web” – “Web Application”, le damos por nombre declaraciones1 y sustituimos el archivo index.jsp por el siguiente código: En el ejemplo anterior, puede verse la declaración de las variables en la línea 17, la declaración del método media en la línea 21, la utilización de las variables en la línea

20 y finalmente la utilización de la media en la línea 22. En los dos últimos casos y para mostrar los valores tanto de las variables como de la media se han utilizado expresiones JSP. Ver Tutorial JSP(3) – Expresiones. Si ahora ejecuta el programa (Ejecutar en el menú principal o F6) aparecerá en el navegador:

<%-- Document : index Created on : 09-dic-2007, 20:16:33 Author : jtagua --%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Ejemplo Declaraciones1</title> </head> <body> <%! double num1=2.2, num2=4.4, num3=6.0;%> <h2> <center> Los números a promediar son: <%=num1%>, <%=num2%> y <%=num3%><br><hr> <%! public double media(double n1,double n2,double n3){ return (n1+n2+n3)/3; } %> Media = <%=media(num1,num2,num3)%> </center> </h2> </body> </html>

Page 13: TEMA Nº 3: ELEMENTOS DE JSP

Desarrollo de Aplicaciones Web con J2EE

Ing. Pablo Cesar Ttito C. [email protected]

OPERADORES LOGICOS Operadores lógicos se utilizan para realizar comparaciones entre valores, numéricos o no, dando como resultado un valor booleanos (true, false). La operación lógica negación invierte el operando, si es true lo hace false y viceversa. Si se comparan números con cadenas, JavaScript intenta convertir internamente los datos. En los operadores relacionales (>, <, >=, <=) intenta convertir los datos en tipo número. Para los operadores de igualdad (== !=) intenta convertir los tipos de datos a cadena, número y booleano. Los operadores de identidad (===, !==) no realizan conversión de tipo. Mayor que > Compara dos valores y devuelve true si el primero es mayor que el segundo. Compara tanto números como cadenas. var hoy = 4; ayer = 10, comp;

comp = hoy > ayer /* comp adquiere el valor false*/

Menor qué < Compara dos valores y devuelve true si el primero es mayor que el segundo. Compara tanto números como cadenas. var hoy = 4; ayer = 10, comp;

comp = hoy < ayer /* comp adquiere el valor false*/

Mayor o igual >= Compara dos valores y devuelve true si el primero es mayor o es igual que el segundo. Compara tanto números como cadenas.

Page 14: TEMA Nº 3: ELEMENTOS DE JSP

Desarrollo de Aplicaciones Web con J2EE

Ing. Pablo Cesar Ttito C. [email protected]

var hoy = 4; ayer = 4, comp;

comp = hoy >= ayer /* comp adquiere el valor true*/ Menor o igual <= Compara dos valores y devuelve true si el primero es menor o es igual que el segundo. Compara tanto números como cadenas. var hoy = 4; ayer = 4, comp;

comp = hoy <= ayer /* comp adquiere el valor true*/ Iguales == Compara dos valores y devuelve true si ambos son iguales. Compara tanto números como cadenas. var hoy = 4; ayer = 4, comp;

comp = hoy == ayer /* comp adquiere el valor true*/ Idénticos === Similar a == pero también compara el tipo de datos de los opeandos. Compara dos valores y devuelve true si el primero es mayor o es igual que el segundo. Compara tanto números como cadenas. var hoy = 4; ayer = '4', comp;

comp = hoy == ayer; /* comp adquiere el valor true*/ comp = hoy === ayer /* comp adquiere el valor false*/ No iguales!= No idénticos !== Invierten el sentido de las comparaciones iguales == e idénticos === respectivamente. AND lógico && Este operador se utiliza para concatenar comparaciones, es decir, para comprobar varias condiciones. El resultado sólo será true si todas las comparaciones lo son. var op1 = 2, op2 = 50, op3 = 25, comp;

comp = (op1 > op2) && (op1 < op3); /*comp

Page 15: TEMA Nº 3: ELEMENTOS DE JSP

Desarrollo de Aplicaciones Web con J2EE

Ing. Pablo Cesar Ttito C. [email protected]

Adquiere el valor false */ comp es false por que op1 no es mayor que op2 aunque sea mayor que op3

OR lógico || Como el anterior, sirve apra realizar comparaciones compuestas y sólo devolverá false cuando todas las comparaciones los sean. Es decir basta que una comparación sea true para que devuelva el valor true. var op1 = 2, op2 = 50, op3 = 25, comp;

comp = (op1 > op2) && (op1 < op3); /*comp toma el valor true */ comp es true por que op1 es menor que op3, (op1 < op3 es por tanto true)

COMENTARIOS JSP Cuando hablamos de comentarios en JSP tenemos que considerar básicamente dos circunstancias, a saber: 1) Comentarios que aparecen como etiquetas HTML en un archivo jsp y que SÍ recibe el cliente o peticionario de la página, esto es: <!– Comentario HTML (Este comentario sí se pasa al cliente) –> esta instrucción al ser una etiqueta/marca HTML se transmitirá directamente a la página HTML de salida generada por el servlet asociado al JSP para enviarla al cliente solicitante. Esta instrucción es transparente para el Motor JSP. 2) Comentarios escritos en Java entre los identificadores <% y %> que NO se enviarán al cliente solicitante de la página, sólo aparecen en la propia página JSP y en su servlet asociado. <% // Comentario en Java de una sola línea %> o este otro <% /* Comentario en Java de una línea y otra línea, y otra línea, o muchas líneas */%>

Page 16: TEMA Nº 3: ELEMENTOS DE JSP

Desarrollo de Aplicaciones Web con J2EE

Ing. Pablo Cesar Ttito C. [email protected]

OBJETOS IMPLÍCITOS JSP Son una serie de objetos internos asociados a las APIs de servlets y jsps suministrados por el contenedor jsp, que pueden ser usados en cualquier scriptlet y expresión, para aumentar su funcionalidad. Muchos de ellos, apenas serán utilizados por el