Curso Jsp

23,110 views

Published on

Published in: Technology
4 Comments
7 Likes
Statistics
Notes
No Downloads
Views
Total views
23,110
On SlideShare
0
From Embeds
0
Number of Embeds
345
Actions
Shares
0
Downloads
1,222
Comments
4
Likes
7
Embeds 0
No embeds

No notes for slide

Curso Jsp

  1. 1. JAVASERVER PAGES Módulo: J2EE Tema: JavaServer Pages ( JSP )
  2. 2. Introducción Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>JavaServer Pages, JSP combina HTML con fragmentos de Java para producir páginas web dinámicas. </li></ul></ul><ul><ul><li>El fichero que contiene la página HTML tiene la extensión .jsp, y se almacena en el mismo sitio que una página web normal. </li></ul></ul><ul><ul><li>Cuando un cliente pide una página JSP del sitio web y no se ha ejecutado antes, la página es pasada al motos de JSP, el cual complila la página convirtiendola en un servlet, la ejecuta y devuelve el contenido de los resultados al cliente. </li></ul></ul><ul><ul><li>¿Cuál es el funcionamiento básico? Muy sencillo: </li></ul></ul><ul><li>1) El cliente solicita una página .jsp </li></ul><ul><li>2) La solicitud llega al servidor </li></ul><ul><li>3) El servidor «ejecuta» la página .jsp y obtiene un texto en formato html </li></ul><ul><li>4) El servidor envía el texto html al cliente </li></ul><ul><li>5) El navegador del cliente visualiza el texto html como si realmente hubiera estado almacenado en el servidor. </li></ul>
  3. 3. Funcionamiento Módulo: J2EE Tema: JavaServer Pages ( JSP )
  4. 4. Ventajas de JSP Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>JSP no nos da nada que no pudierámos en principio hacer con un servlet. Pero es mucho más conveniente escribir HTML normal que tener que hacer un billón de sentencias println que generen HTML. </li></ul></ul><ul><ul><li>Además, separando el formato del contenido podemos poner diferentes personas en diferentes tareas. </li></ul></ul>
  5. 5. Comentarios iniciales Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Un fichero JSP empieza con un comentario del lado del serviros: </li></ul></ul><ul><ul><ul><ul><li><%-- </li></ul></ul></ul></ul><ul><ul><ul><ul><li>- Author (s) : </li></ul></ul></ul></ul><ul><ul><ul><ul><li>- Date : </li></ul></ul></ul></ul><ul><ul><ul><ul><li>- Copyright Notice : </li></ul></ul></ul></ul><ul><ul><ul><ul><li>- @(#) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>- Description : </li></ul></ul></ul></ul><ul><ul><ul><ul><li>--%> </li></ul></ul></ul></ul><ul><li>Este comentario sólo es visible en el lado del servidor porque se elimina durante la traducción JSP. </li></ul><ul><li>Dentro de este comentario están los autores, la fecha, la nota de copyright de la revisión, un identificador y una descripción sobre el JSP para los desarrolladores web. </li></ul>
  6. 6. Directiva(s) JSP Page ( 1 ) Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Una directiva page, defina atributos asociados con la página JSP en tiempo de traducción. La especificación JSP no impone ninguna obligaciñon sobre cuántas directivas page se pueden definir en la misma página. Por eso los fragmentos de código que veremos a continuación son equivalentes: </li></ul></ul><ul><ul><li><%@ page session = ”true” %> </li></ul></ul><ul><ul><li><%@ page import = ”java.util.*” %> </li></ul></ul><ul><ul><li><%@ page errorPage = ”/pages/errorPage.jsp” %> </li></ul></ul><ul><ul><li>Si la longitod de cualquier directivam excede de la anchura normal de una página JSP ( 80 caracteres), se debe dividor en varias lineas: </li></ul></ul><ul><ul><li><%@ page session = ”true” </li></ul></ul><ul><ul><li> import = ”java.util.*” </li></ul></ul><ul><ul><li>errorPage = ”/pages/errorPage.jsp” %> </li></ul></ul>
  7. 7. Directiva(s) JSP Page ( 2 ) Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Tal y como podemos ver, la directiva page posee variso atributos: </li></ul></ul><ul><ul><ul><ul><li>languaje = ”java” </li></ul></ul></ul></ul><ul><ul><ul><ul><li>extends = ”package.class” </li></ul></ul></ul></ul><ul><ul><ul><ul><li>import = ”package.*”,”package.class” </li></ul></ul></ul></ul><ul><ul><ul><ul><li>session = “true false” </li></ul></ul></ul></ul><ul><ul><ul><ul><li>isThreadSafe = “true false” </li></ul></ul></ul></ul><ul><ul><ul><ul><li>info = “text” </li></ul></ul></ul></ul><ul><ul><ul><ul><li>errorPage = “pagina_error” </li></ul></ul></ul></ul><ul><ul><ul><ul><li>isErrorPage = “true false” </li></ul></ul></ul></ul>
  8. 8. Directiva(s) JSP Include Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Esta directiva nos permite incluir ficheros en el momento en que la página JSP es traducida a un servlet. La directiva se parece a esto: </li></ul></ul><ul><ul><li><%@ include file=&quot;url relativa&quot; %> </li></ul></ul>
  9. 9. Directiva(s) Tag Library Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Una directiva taglib declara las librerías de etiquetas usadas por el JSP. Una directiva corta se declara en una sola línea. Si tenemos varias directivas taglib se deben almacenar juntas en la misma localización dentro del cuerpo JSP: </li></ul></ul><ul><ul><li><%@ taglib uri=”URI1” prefix=”tagprefix1” %> </li></ul></ul><ul><ul><li><%@ taglib uri=”URI2” prefix=”tagprefix2” %> </li></ul></ul><ul><ul><li>Al igual que la directiva page, si la longitud de una directiva taglib excede la anchura de 80 caracteres, debemos dividirla en varias líneas: </li></ul></ul><ul><ul><li><%@ taglib </li></ul></ul><ul><ul><li>uri=”URI1” </li></ul></ul><ul><ul><li>prefix=”tagprefix1” %> </li></ul></ul><ul><ul><li>Solo deberíamos importar librerías de etiquetas que realmente se van a utilizar en la página JSP. </li></ul></ul>
  10. 10. <%! private int cont; %> <%! private Date today; %> <%! public int getCont() { return cont; } %> ... <%! private int cont; private Date today; public int getCont() { return cont; } %> Declaraciones JSP Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Las declaraciones JSP declaran métodos y variable pertenecientes a la JSP. </li></ul></ul><ul><ul><li>Estos métodos y variables no se diferencian de los declarados en el lenguaje Java, y por lo tanto se deberían seguir las convenciones de codificación más importantes. </li></ul></ul>
  11. 11. Script de JSP Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Los script son bloques de código Java residentes entre los tags <% %>. </li></ul></ul><ul><ul><li>Los elementos de script permiten insertar código Java dentro del método _jspService() del servlet que se generará desde la página JSP. Hay dos tipos: </li></ul></ul><ul><ul><ul><ul><li>Expresiones: <%= expresion %> </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Scriptles: <% código %> </li></ul></ul></ul></ul>
  12. 12. Variables predefinidas Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>JSP incorpora ocho variables ya definidas, llamadas también objetos implicitos. </li></ul></ul><ul><ul><ul><ul><li>request . </li></ul></ul></ul></ul><ul><ul><ul><ul><li>response </li></ul></ul></ul></ul><ul><ul><ul><ul><li>session </li></ul></ul></ul></ul><ul><ul><ul><ul><li>out </li></ul></ul></ul></ul><ul><ul><ul><ul><li>application </li></ul></ul></ul></ul><ul><ul><ul><ul><li>config </li></ul></ul></ul></ul><ul><ul><ul><ul><li>pageContext . </li></ul></ul></ul></ul><ul><ul><ul><ul><li>page </li></ul></ul></ul></ul><ul><ul><li>La mayoría de estas variables de referencia se han visto y utilizado con servlets y sus funciones y operativa son idénticas. </li></ul></ul>
  13. 13. Comentarios Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Los comentarios se utilizan para descubrir información adicional o los propósitos del código cercano. </li></ul></ul><ul><ul><li>Los comentarios JSP( tambien conocidos del lado del servidor) sólo son visibles en el lado del servidor (es decir, no se propagan al lado del cliente ). </li></ul></ul><ul><ul><li>Se prefieres los comentarios puros JSP sobre los comentarios JSP con comentarios de scripts, ya que los primeros son menos dependientes del lenguaje de script subyacente. </li></ul></ul><ul><ul><li><%-- Comentario de JSP --%> </li></ul></ul>
  14. 14. Ejemplo de JSP ( 1 ) Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><li><! DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; > </li></ul><ul><li><%@ page language = &quot;java&quot; </li></ul><ul><li> contentType = &quot;text/html; charset=ISO-8859-1&quot; </li></ul><ul><li> pageEncoding = &quot;ISO-8859-1&quot; %> </li></ul><ul><li><%@ page import = &quot;java.util.*&quot; %> </li></ul><ul><li><%! </li></ul><ul><li>String ip = null ; // IP del cliente </li></ul><ul><li>String host = null ; // Host del cliente </li></ul><ul><li>Enumeration e = null ; </li></ul><ul><li>String value = null ; </li></ul><ul><li>String name = null ; </li></ul><ul><li>%> </li></ul><ul><li>< html > </li></ul><ul><li>< head > </li></ul><ul><li>< meta http-equiv = &quot;Content-Type&quot; content = &quot;text/html; charset=ISO-8859-1&quot; > </li></ul><ul><li>< title > Ejemplo 1 </ title > </li></ul><ul><li></ head > </li></ul>
  15. 15. Ejemplo de JSP ( 2 ) Módulo: J2EE Tema: JavaServer Pages ( JSP ) < body > <% ip = request.getRemoteAddr(); host = request.getRemoteHost(); %> < div >< b > Informaci &oacute; n del cliente </ b ></ div > < div > ip del cliente : <%= ip %> < div > < div > host del cliente : <%= host %> < div > < hr /> < div >< b > Cabeceras </ b >< div > <% e = request.getHeaderNames(); while (e.hasMoreElements()) { name = (String)e.nextElement(); value = request.getHeader(name); out.println( &quot;<div>&quot; + name + &quot; = &quot; + value + &quot;</div>&quot; ); } %> </ body > </ html >
  16. 16. Ejercicios Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Ejercicio 1: </li></ul></ul><ul><ul><ul><ul><li>Realizar una gestión de usuarios, de tal forma que podamos listar, añadir usuarios, modificar usuarios y eliminar usuarios. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Dichos usuarios se almacenarán en una tabla de una base de datos que tendrá los siguientes campos: </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><li>pk_id - int </li></ul></ul></ul></ul></ul></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><li>nombre - varchar( 80 ) </li></ul></ul></ul></ul></ul></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><li>departamento – varchar( 80 ) </li></ul></ul></ul></ul></ul></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><li>email – varchar ( 80 ) </li></ul></ul></ul></ul></ul></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>Para acceder a la zona de administración debemos de validarnos en un formulario. Los datos de acceso los recibirá un servlet como parámetros iniciales por medio del fichero web.xml. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Tendremos que crear un usuarioVO, un usuarioDAO y los servlets que consideremos oportunos. </li></ul></ul></ul></ul>
  17. 17. Acciones Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Las acciones JSP usan construcciones de síntaxis XML para controlar el comportamiento del motor de Servlets. </li></ul></ul><ul><ul><li>Podemos insertar un fichero dinámicamente, reutilizar componentes JavaBeans, reenviar al usuario a otra página, etc.: </li></ul></ul><ul><ul><li>Recuerda que, como en XML, los nombre de elementos y atributos son sensibles a las mayúsculas. </li></ul></ul><ul><ul><li>A continuación veremos las siguientes acciones: </li></ul></ul><ul><ul><ul><ul><li>jsp:include </li></ul></ul></ul></ul><ul><ul><ul><ul><li>jsp:forward </li></ul></ul></ul></ul><ul><ul><ul><ul><li>jsp:useBean </li></ul></ul></ul></ul><ul><ul><ul><ul><li>jsp:getProperty </li></ul></ul></ul></ul><ul><ul><ul><ul><li>jsp:setProperty </li></ul></ul></ul></ul>
  18. 18. Acción jsp:include Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Esta acción nos permite insertar ficheros en una página que está siendo generada. La síntaxis se parece a esto: </li></ul></ul><ul><ul><li><jsp:include page=&quot;relative URL&quot; flush=&quot;true&quot; /> </li></ul></ul><ul><ul><li>Al contrario que la directiva include, que inserta el fichero en el momento de la conversión de la página JSP a un Servlet, esta acción inserta el fichero en el momento en que la página es solicitada. </li></ul></ul><ul><ul><li>Con el cuerpo opcional jsp:param es posible enviar campos al formulario destino. </li></ul></ul><ul><li><jsp:include page=&quot;pagina.jsp&quot; flush=&quot;true&quot;> </li></ul><ul><li><jsp:param name=&quot;id&quot; value=&quot;valor&quot;/> </li></ul><ul><li></jsp:include> </li></ul>
  19. 19. Acción jsp:forward Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Esta acción nos permite reenviar la petición a otra página. Tiene un sólo atributo, page, que debería consistir en una URL relativa. Este podría ser un valor estático, o podría ser calculado en el momento de la petición: </li></ul></ul><ul><ul><li><jsp:forward page=”pagina.jsp” /> </li></ul></ul><ul><ul><li><jsp:forward page=”<%= una expresión de java %>” /> </li></ul></ul><ul><ul><li>También permite incorporar parámetros en la petición de la nueva página: </li></ul></ul><ul><ul><li><jsp:forward page=”pagina.jsp” > </li></ul></ul><ul><ul><li><jsp:param name=”login” value=”alumno” /> </li></ul></ul><ul><ul><li></jsp:forward> </li></ul></ul><ul><ul><li>El significado de ejemplo anterior sería equivalente a : </li></ul></ul><ul><ul><li>pagina.jsp?login=alumno </li></ul></ul>
  20. 20. Beans ( 1 ) Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Un JavaBean no es más que una clase java que se adapta a los siguientes criterios: </li></ul></ul><ul><ul><ul><ul><li>Clase pública </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Una clase bean debe contar, al menos, con un constructor sin argumentos. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>No debe tener variables de instancia públicas. No debe permitir el acceso directo a las variables de instancia. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Se accede a los valores de las variable a través de métodos denominados getXXX y setXXX. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Un método que devuelve un tipo booleano debe denominarse is en lugar de get. </li></ul></ul></ul></ul>
  21. 21. Beans ( 2 ) Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Cuando se dice que un bean tiene una propiedad “nombre”, realmente se quiere decir que la clase tiene un método getNombre que devuelve un tipo X, y otro método llamado setNombre que toma X como argumentod e entrada. </li></ul></ul><ul><ul><li>Los beans se utilizan principalmente para intercambiar información entre las distintas páginas que componen la aplicación, pudiendo sustituir perfectamente a las variables de sesión. </li></ul></ul><ul><ul><li>Para no «ensuciar» el código HTML de la página JSP, se suministran varias etiquetas jsp: que permiten gestionar los JavaBeans de forma natural </li></ul></ul>
  22. 22. Beans ( 3 ) Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Las etiquetas jsp: para gestionar JavaBeans son: </li></ul></ul><ul><ul><ul><ul><li>jsp:useBean: Crea un objeto (si no existe ya) de una clase que cumple ser un JavaBean y le da un nombre. A partir de este momento ese objeto se utilizará por su nombre </li></ul></ul></ul></ul><ul><ul><ul><ul><li>jsp:setProperty: Invoca un método setXxx de un JavaBean previamente creado </li></ul></ul></ul></ul><ul><ul><ul><ul><li>jsp:getProperty: Visualiza el resultado devuelto por un método getXxx de un JavaBean previamente creado </li></ul></ul></ul></ul>
  23. 23. jsp:useBeans ( 1 ) Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Esta acción permite cargar y utilizar un JavaBean en la página JSP. La sintaxis más simple para especifica que se usa un Bean es: </li></ul></ul><ul><ul><li><jsp:useBean id=”name” class=&quot;package.class&quot; /> </li></ul></ul><ul><ul><li>Se puede interpretar como: generar una instancia de la clase especificada y asociarla a la variable definida en id. Es decir: </li></ul></ul><ul><ul><li><jsp:useBean id=”discos” class=&quot;DiscoTienda&quot; /> </li></ul></ul><ul><ul><li>Debe entenderse como: </li></ul></ul><ul><ul><li><% DiscoTienda discos = new DiscosTienda(); %> </li></ul></ul>
  24. 24. jsp:useBeans ( 2 ) Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Los atributos que admite jsp:useBean son: </li></ul></ul><ul><ul><ul><ul><li>id=”nombre” . Nombre que se le da a ese objeto </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Scope= Indica dónde se puede usar dicho objeto: </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><li>page : Valor por defecto. Sólo está disponible para la página actual. </li></ul></ul></ul></ul></ul></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>request : Indica que el bean sólo está disponible para la petición actual. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><li>s ession : Indica que está disponible para todas las páginas durante el tiempo de vida de la sesión actual. </li></ul></ul></ul></ul></ul></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>application : Existirá hasta que se cierre el servidor JSP. Disponible para todo el mundo siempre. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>class=”Clase.class” . Nombre completo del bean. </li></ul></ul></ul></ul><ul><ul><li>La importancia del ámbito radica en que sólo se generará una instancia si no existe un bean con el mismo id y scope.: </li></ul></ul>
  25. 25. jsp:setProperty( 1 ) Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Se usa jsp:setProperty para establecer los valores de la propiedad de los beans. Se puede utilizar en dos contextos diferentes. </li></ul></ul><ul><ul><li>jsp:useBeans debe escribirse en el código antes de utilizar jsp:setProperty. </li></ul></ul><ul><ul><li>Primero, se puede usar fuera de un elemento jsp:useBean: </li></ul></ul><ul><ul><li><jsp:useBeans id=”discos” class=”DiscosTienda” /> </li></ul></ul><ul><ul><li><jsp:setProperty name=”discos” Property=”titulo” value =”Disco 1” / > </li></ul></ul><ul><ul><li>Sería equivalente a: </li></ul></ul><ul><ul><ul><ul><li><% discos.setTitulo( “Disco 1” ) %> </li></ul></ul></ul></ul><ul><ul><li>La segunda forma de usar jsp:setProperty es dentro del cuerpo de un elemento jsp:useBean: </li></ul></ul><ul><ul><li><jsp:useBeans id=”discos” class=”DiscosTienda” > </li></ul></ul><ul><ul><li><jsp:setProperty name=”discos” Property=”titulo” value =”Disco 1” / > </li></ul></ul><ul><ul><li></jsp:useBeans> </li></ul></ul>
  26. 26. jsp:setProperty( 2 ) Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>jsp:setProperty tiene cuatro posibles atributos: </li></ul></ul><ul><ul><ul><ul><li>name : Atributo necesario. Designa el bean cuya propiedad va a ser seleccionada. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>property : Atributo necesario. Indica la propiedad a la que se accede. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>value : Atributo opcional. Especifica el valor para la propiedad. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>param : Atributo opcional. Indica el parámetro de la petición del que se debería derivar la propiedad, es decir, el nombre del campo del formulatio que llega al servidor. </li></ul></ul></ul></ul><ul><ul><li>En el caso de utilizar param se debe tener en cuenta que si con la petición no llega dicho parámetro, no se hará nada. </li></ul></ul><ul><ul><li>No se puede usar value y param juntos. </li></ul></ul><ul><ul><li>Si en la propiedad property se pone un “ * ” se quiere decir que automáticamente asigne el valor a las propiedades del bean a través de los datos aportados por los parámetros de la petición de página cuando el nombre corresponda con la propiedad. En este caso se omite tanto value como param. </li></ul></ul>
  27. 27. jsp:getProperty Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Recupera el valor de una propiedad del bean, lo convierte a un string, y escribe el valor en la salida out. Los atributos necesarios son: </li></ul></ul><ul><ul><ul><ul><li>name: Nombre del id del bean referenciado previamente con jsp:useBean. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>property: Nombre de la propiedad cuyo valor se desea recuperar. </li></ul></ul></ul></ul><ul><ul><li>Ejemplo: </li></ul></ul><ul><ul><li><html><head><title>Ejemplo de Bean</title></head> </li></ul></ul><ul><ul><li><body> </li></ul></ul><ul><ul><li><jsp:useBean id=”discos” class=”DiscosTienda” > </li></ul></ul><ul><ul><li><jspSetroperty name=”disco” property=”id” /> </li></ul></ul><ul><ul><li><ul> </li></ul></ul><ul><ul><li><li> </li></ul></ul><ul><ul><li>Titulo del disco: </li></ul></ul><ul><ul><li><jsp:getProperty name=”disco” property=”titulo” /> </li></ul></ul><ul><ul><li></li> </li></ul></ul><ul><ul><li></ul> </li></ul></ul><ul><ul><li></body></html> </li></ul></ul>
  28. 28. Ejemplo ( 1 ) Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Fichero StringBean.java </li></ul></ul><ul><li>/*Un JavaBean sencillito que sólo tiene un campo </li></ul><ul><li> llamado mensaje de tipo String */ </li></ul><ul><li>package business.vo; </li></ul><ul><li>public class StringBean { </li></ul><ul><li>private String mensaje = &quot;Ningún mensaje&quot;; </li></ul><ul><li>public String getMensaje() { </li></ul><ul><li>return(mensaje); </li></ul><ul><li>} </li></ul><ul><li>public void setMensaje(String mensaje) { </li></ul><ul><li>this.mensaje = mensaje; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  29. 29. Ejemplo ( 2 ) Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Fichero StringBean.jsp </li></ul></ul><ul><li><htmlL> </li></ul><ul><li><head><title>Uso de JavaBeans con JSP</title></head> </li></ul><ul><li><body> </li></ul><ul><li><div>Uso de JavaBeans con JSP</div> </li></ul><ul><li><jsp:useBean id=&quot;stringBean&quot; class=&quot;business.vo.StringBean&quot; /> </li></ul><ul><li><ul> </li></ul><ul><li><li>Valor inicial (getProperty): </li></ul><ul><li><jsp:getProperty name=&quot;stringBean&quot; property=&quot;mensaje&quot; /> </li></ul><ul><li></li> </li></ul><ul><li><li> </li></ul><ul><li><jsp:setProperty name=&quot;stringBean&quot; property=&quot;mensaje&quot; value=&quot;Texto&quot; /> </li></ul><ul><li>Valor después de haber cambiado el campo con setProperty: </li></ul><ul><li><jsp:getProperty name=&quot;stringBean&quot; property=&quot;mensaje&quot; /> </li></ul><ul><li></Ii> </li></ul><ul><li></ul> </li></ul><ul><li></body> </li></ul><ul><li></html> </li></ul>
  30. 30. Ejercicios Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Ejercicio 1: </li></ul></ul><ul><ul><ul><ul><li>Tendremos que realizar una página JSP que nos muestre un formulario con los datos personales de un usuario. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Una vez que rellenemos dicho formulario, mostraremos utilizando beans los datos de ese usuario por pantalla. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Primero cargaremos los datos del usuario los cargaremos poniendo en el property los nombres de las propiedades. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>< jsp:setProperty name = &quot;usuarioVO&quot; property = &quot;propiedad&quot; /> </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Una vez realizado ésto, probaremos a ver que pasa poniendo un *. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>< jsp:setProperty name = &quot;usuarioVO&quot; property = &quot;*&quot; /> </li></ul></ul></ul></ul>
  31. 31. Ejercicios Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Ejercicio 2: </li></ul></ul><ul><ul><ul><ul><li>Modificar la aplicación anterior, de tal forma que vamos a tener una página de inicio que lo único que hará será redirigirnos a otra págia principal utilizando la acción apropiada. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Esa página principal estaá formada por cuatro páginas incluidas mediante otra acción. </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><ul><li>cabecera.jsp: Tendrá la cabecera de nuesta página </li></ul></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><ul><li>cuerpo.jsp: Tendrá que realizar las tareas del ejercicio 1. </li></ul></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><ul><li>contador.jsp: Contador de visitas de nuestra página. Las visitas serán el número de accesos a la página de los usuarios que no la hyan visitado ya en su sesión actual. </li></ul></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><ul><li>pie.jsp: Mostraremos el pie de nuestra página. </li></ul></ul></ul></ul></ul></ul>
  32. 32. Ejercicios Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><ul><li>Ejercicio propuesto para casa: </li></ul></ul><ul><ul><ul><ul><li>Vamos a realizar un de periódico virtual donde almacenaremos distintas noticias. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Una noticias tendrán un solo autor y podrá pertenecer a varias secciones. Por lo que tendremos que crear cuatro tablas para almacenar la información. </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><li>noticia: pk_id, titulo, reseña, contenido, fecha de publicación, fk_autor </li></ul></ul></ul></ul></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><li>autor: pk_id, nombre, apellidos </li></ul></ul></ul></ul></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><li>Seccion: pk_id, nombre, descripción </li></ul></ul></ul></ul></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><li>noticia_seccion: fk_noticia, fk_seccion </li></ul></ul></ul></ul></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>En nuestra aplicación tendremos dos partes, una parte privada y una parte publica. </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><li>Parte privada: Administración de las noticias. Debemos estar validado para acceder a esta parte. Guardaremos los usuarios en otra tabla de la base de datos( pk_id, login, password ). </li></ul></ul></ul></ul></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><li>Parte pública: Los usuarios podrán consultar las noticias por autor o por secciones. Tambíén dispondrán de un buscador avanzado de noticias donde tendrán diversas opciones de busqueda, como por nombre, fecha de publicación, sección, autor, etc. </li></ul></ul></ul></ul></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><ul><ul><ul><ul><li>En la portada se mostrarán las cuatro últimas noticias insertadas. </li></ul></ul></ul></ul></ul></ul></ul></ul></ul>
  33. 33. <ul><ul><li>La librería JSTL ( biblioteca de etiquetas estándar de Java ) es un componente dentro de la especificación del Java 2 Enterprise Edition (J2EE) y es controlada por Sun MicroSystems. </li></ul></ul><ul><ul><li>El objetivo de JSTL es facilitar el trabajo a los desarrolladores de JSP. </li></ul></ul><ul><ul><li>Como se verá a lo largo de nuestro estudio, JSTL utiliza ciertas convenciones que hacen más fácil al desarrollador el recordar la estructura interna de las etiquetas. </li></ul></ul><ul><ul><li>JSTL proporciona unas bibliotecas de etiquetas JSP, como por ejemplo:: </li></ul></ul><ul><ul><ul><li>core: <%@ taglib prefix=&quot;c&quot; uri=&quot;http://java.sun.com/jstl/core&quot; %> </li></ul></ul></ul><ul><ul><ul><li>fmt: <%@ taglib prefix=&quot;fmt&quot; uri=&quot;http://java.sun.com/jstl/fmt&quot; %> </li></ul></ul></ul>JSTL Módulo: J2EE Tema: JavaServer Pages ( JSP )
  34. 34. <ul><ul><li>El lenguaje de expresiones (EL) sirve para facilitar la escritura de expresiones restringidas Java dentro de una página JSP </li></ul></ul><ul><ul><li>Antes de JSTL, JSP usaba Java para referenciar atributos dinámicos. Con JSTL ya no es necesario. Compara por ejemplo, la lectura de un parametro: </li></ul></ul><ul><ul><ul><ul><li>con JSP </li></ul></ul></ul></ul><ul><li><%= request.getParameter(&quot;login&quot;) %> </li></ul><ul><ul><ul><ul><li>con JSTL </li></ul></ul></ul></ul><ul><li>${param.login} . </li></ul><ul><ul><li>Una expresión EL se escribe de la forma ${expresion} y entre las llaves puede usarse cualquier operador binario o unario que se quiera, ya sea matemático, de cadena, relacional o lógico. Es muy útil el operador unario empty para saber si algo es null o no. </li></ul></ul><ul><ul><li>Ejemplo: ${empty param.login} </li></ul></ul>Lenguaje de Expresión JSTL (1) Módulo: J2EE Tema: JavaServer Pages ( JSP )
  35. 35. <ul><ul><li>Las expresiones se componen de: </li></ul></ul><ul><ul><ul><li>Identificadores. Hay once identificadores reservados que corresponden a once objetos implícitos. </li></ul></ul></ul><ul><ul><ul><li>Literales. Son números, cadenas delimitadas por comillas simples o dobles, y los valores true , false , y null . </li></ul></ul></ul><ul><ul><ul><li>Operadores. Permiten comparar y operar con identificadores y literales. </li></ul></ul></ul><ul><ul><ul><li>Operadores de acceso. Se usan para referenciar propiedades de los objetos. </li></ul></ul></ul><ul><ul><li>Podemos usar expresiones en cualquier parte del documento, o como valores de los atributos de etiquetas JSTL, exceptuando los atributos var y scope , que no aceptan expresiones. </li></ul></ul><ul><ul><li>En cualquier sitio donde sea valido colocar una expresión, también será válido colocar más de una. Por ejemplo: value=&quot;Hola ${nombre} ${apellidos}&quot; . </li></ul></ul>Lenguaje de Expresión JSTL (2) Módulo: J2EE Tema: JavaServer Pages ( JSP )
  36. 36. <ul><ul><li>Para acceder al campo de un bean java, o a un elemento de una colección (array, o Map ), se usa el operador punto, o el operador corchete: </li></ul></ul><ul><li>${bean.propiedad} </li></ul><ul><li>${map.elemento} </li></ul><ul><li>${header['User-Agent']} </li></ul><ul><ul><li>Si un campo de un bean es otro bean, podemos encadenar puntos para acceder a una propiedad del segundo bean: </li></ul></ul><ul><li>${bean1.bean2.propiedad} </li></ul><ul><ul><li>Las expresiones pueden aparecer como parte del valor de un atributo de una etiqueta: </li></ul></ul><ul><li><c:out value=&quot;${nombre}&quot;/> </li></ul><ul><li><c:if test=&quot;${tabla.indice % 2 == 0}&quot;>es par</c:if> </li></ul><ul><ul><li>O independientemente junto a texto estático como el HTML: </li></ul></ul><ul><li><input type=&quot;text&quot; name=&quot;usuario&quot; value=&quot;${requestScope.usuario.nombre}&quot;/> </li></ul>Lenguaje de Expresión JSTL (3) Módulo: J2EE Tema: JavaServer Pages ( JSP )
  37. 37. <ul><ul><li>Las siguientes variables pueden usarse directamente (todas son listas): </li></ul></ul><ul><ul><ul><li>param : Parámetros del request como cadenas. </li></ul></ul></ul><ul><ul><ul><li>paramValues : Parámetros del request como array de cadenas. </li></ul></ul></ul><ul><ul><ul><li>header : lista con los campos de la cabecera. </li></ul></ul></ul><ul><ul><ul><li>headerValues : lista con los valores de los campos de la cabecera. </li></ul></ul></ul><ul><ul><ul><li>cookie: lista con los nombres de las cookies. </li></ul></ul></ul><ul><ul><ul><li>initParam: Parametros de inicialización de la aplicación Web. </li></ul></ul></ul><ul><ul><ul><li>pageContext: El objeto PageContext de la página actual. </li></ul></ul></ul><ul><ul><ul><li>pageScope , requestScope , sessionScope y applicationScope : lista con las variables definidas en cada ámbito. </li></ul></ul></ul>Lenguaje de Expresión JSTL (4) Módulo: J2EE Tema: JavaServer Pages ( JSP )
  38. 38. <ul><ul><li>Etiquetas para iteración sobre datos, operaciones condicionales, e importación de datos de otras páginas </li></ul></ul><ul><ul><ul><li><c:out> utilizada con el mismo objetivo que el scriptlet <%= expresion %> tiene algunas funcionalidades adicionales </li></ul></ul></ul><ul><ul><ul><li><c:set> permite asignar valores a variables (p.ej., de sesión) o a propiedades de Java Beans </li></ul></ul></ul><ul><ul><ul><li><c:remove> es el complemento natural al anterior, y sirve para destruir variables con ámbito </li></ul></ul></ul><ul><ul><ul><li><c:if> emite por la salida el cuerpo que contiene sólo si la condición a que se refiere es cierta </li></ul></ul></ul><ul><ul><ul><li><c:choose>, <c:when> y <c:otherwise> permiten formar una estructura de ifs en cascada con parte else </li></ul></ul></ul><ul><ul><ul><li><c:forEach> permite recorrer una colección o un array , así como ejecutarse como un bucle FOR </li></ul></ul></ul>Core Tag Library Módulo: J2EE Tema: JavaServer Pages ( JSP )
  39. 39. <ul><ul><li>La sintaxis de esta etiqueta es: </li></ul></ul><ul><ul><li><c:out value =”valor” [escapeXml=”true|false”] [default=”valorSiEsNull”] /> </li></ul></ul><ul><ul><li>Emite por la salida el valor del atributo value. Si este es nulo, se saca por pantalla el valor del atributo default. </li></ul></ul><ul><ul><li>Por defecto escapeXml está puesto a true, lo que quiere decir que se traducen algunos caracteres para evitar errores: </li></ul></ul><ul><ul><ul><ul><li>El Caracter '<' se traduce autómaticamente a '&lt;' </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Puede probarse como ejemplo con la página completa: </li></ul></ul></ul></ul><ul><ul><ul><ul><li><c:out value=&quot;Mensaje escrito con c:out&quot; /> </li></ul></ul></ul></ul><ul><ul><li>El valor dado al atributo value se convierte en String y se emite, a no se que sea un objeto de tipo java.io.Reader, en cuyo caso lo que se emite es el resultado de leer por completo dicho canal de entrada. </li></ul></ul><c:out> Módulo: J2EE Tema: JavaServer Pages ( JSP )
  40. 40. <ul><ul><li>Tenemos el siguiente Bean: </li></ul></ul><ul><ul><li>package business.vo; </li></ul></ul><ul><ul><li>import java.io.*; </li></ul></ul><ul><ul><li>public class StringBean { </li></ul></ul><ul><ul><li>private String nombreFichero = &quot;Ningun nombreFichero&quot;; </li></ul></ul><ul><ul><li>public String getNombreFichero() { </li></ul></ul><ul><ul><li>return(nombreFichero); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>public void setNombreFichero(String nombreFichero) { </li></ul></ul><ul><ul><li>this.nombreFichero = nombreFichero; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>public Reader getLector() throws IOException { </li></ul></ul><ul><ul><li>return new FileReader( getNombreFichero() ); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>public void setLector(String lector) { </li></ul></ul><ul><ul><li>this.nombreFichero = lector; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul>Ejemplo: <c:out> y reader ( 1 ) Módulo: J2EE Tema: JavaServer Pages ( JSP )
  41. 41. <ul><ul><li>Y el JSP sería: </li></ul></ul><ul><ul><li><jsp:useBean id=&quot;stringBean&quot; class=&quot;business.vo.StringBean&quot; /> </li></ul></ul><ul><ul><li><jsp:setProperty name=&quot;stringBean&quot; property=&quot;lector&quot; value=&quot; e:/prueba.txt &quot; /> </li></ul></ul><ul><ul><li><c:out value=&quot;${stringBean.lector}&quot;/><br> </li></ul></ul><ul><ul><li><c:out value=&quot;Otra cosa&quot; /><br> </li></ul></ul><ul><ul><li>La salida de la línea marcada es el contenido del fichero e:prueba.txt. De una sola tacada se ha emitido el contenido de un fichero entero. </li></ul></ul>Ejemplo: <c:out> y reader ( 2 ) Módulo: J2EE Tema: JavaServer Pages ( JSP )
  42. 42. <ul><ul><li>La sintaxis de <c:set> es: </li></ul></ul><ul><ul><ul><li>Para asignar valor a una variable con ámbito </li></ul></ul></ul><ul><ul><li><c:set value=”valor” </li></ul></ul><ul><ul><li>var=”nombreVar” </li></ul></ul><ul><ul><li> [scope=”page|request|session|application”] /> </li></ul></ul><ul><ul><li><c:remove> sólo tiene sentido para variables con ámbito. La sintaxis de <c:remove> es: </li></ul></ul><ul><ul><ul><ul><li><c:remove var=”nombreVar” [scope=”page|request|session|application”] /> </li></ul></ul></ul></ul><ul><ul><li><c:set> hace asignaciones a variable con ámbito o a propiedades de Java Beans o a datos de Mapas. </li></ul></ul><ul><ul><li><c:remove> elimina variables con ámbito. </li></ul></ul><c:set> y <c:remove> Módulo: J2EE Tema: JavaServer Pages ( JSP )
  43. 43. <ul><ul><li>En este ejemplo se ve el uso de <c:set> (no olvidar la directiva taglib): </li></ul></ul><ul><ul><ul><li><c:set var=&quot;aux&quot; value=&quot;1&quot; /> </li></ul></ul></ul><ul><ul><ul><li>${aux}<br> </li></ul></ul></ul><ul><ul><ul><li><c:set var=&quot;aux&quot; value=&quot;${aux + 1}&quot; /> </li></ul></ul></ul><ul><ul><ul><li>${aux}<br> </li></ul></ul></ul><ul><ul><ul><li><c:set var=&quot;cadena&quot; value=&quot;mi nombre&quot; /> </li></ul></ul></ul><ul><ul><ul><li>${cadena}<br> </li></ul></ul></ul><ul><ul><ul><li><c:set var=&quot;cadena&quot; value=&quot;${cadena} es Jorge&quot; /> </li></ul></ul></ul><ul><ul><ul><li>${cadena}<br> </li></ul></ul></ul>Ejemplo: <c:set> Módulo: J2EE Tema: JavaServer Pages ( JSP )
  44. 44. <ul><ul><li>La sintaxis de <c:if> es: </li></ul></ul><ul><ul><li><c:if test =”condicion” </li></ul></ul><ul><ul><li>[var=”nombreVar” </li></ul></ul><ul><ul><li> [scope=”page|request|session|application”]] > </li></ul></ul><ul><ul><li> // Acciones que se ejecutan si la condicion se cumple </li></ul></ul><ul><ul><li></c:if> </li></ul></ul><ul><ul><li>Si la etiqueta <c:if> se autocierra y se indica un nombre de variable, entonces es como si se utilizara para cargar un valor booleano en dicha variable. </li></ul></ul><ul><ul><li>Como puede verse, esta etiqueta carece de cláusula else. El motivo es que la cláusula else, utilizada a discreción, se convierte en unos ifs en cascada mutuamente excluyentes; </li></ul></ul><c:if> Módulo: J2EE Tema: JavaServer Pages ( JSP )
  45. 45. <ul><ul><li>Ej. de control: </li></ul></ul><ul><ul><li><c:if test=&quot;${ empty param.nombre}&quot; > </li></ul></ul><ul><ul><li> Se le ha olvidado escribir un valor para el nombre.<br> </li></ul></ul><ul><ul><li></c:if> </li></ul></ul><ul><ul><li>Puede probarse a cargar una página que contenga esto pasando o no pasando en la dirección URL el parámetro nombre. </li></ul></ul><ul><ul><li>Ejemplo de carga de valor booleano: </li></ul></ul><ul><ul><li><c:if var=&quot;existeNombre&quot; test=&quot;${ empty param.nombre}&quot; /> </li></ul></ul><ul><ul><li>${existeNombre}<br> </li></ul></ul>Ejemplo: <c:if> Módulo: J2EE Tema: JavaServer Pages ( JSP )
  46. 46. <ul><ul><li>Estas tres etiquetas se emplean conjuntamente según la siguiente sintaxis </li></ul></ul><ul><ul><li><c:choose> </li></ul></ul><ul><ul><li><c:when test =”condicion1”> </li></ul></ul><ul><ul><li>// Cuerpo que se emite si condicion1 es cierta </li></ul></ul><ul><ul><li></c:when> </li></ul></ul><ul><ul><li> <c:when test =”condicion2”> </li></ul></ul><ul><ul><li> // Cuerpo que se emite si condicion2 es cierta </li></ul></ul><ul><ul><li> // y condicion1 es falsa </li></ul></ul><ul><ul><li></c:when> </li></ul></ul><ul><ul><li> .... </li></ul></ul><ul><ul><li> <c:otherwise> </li></ul></ul><ul><ul><li> // Cuerpo que se emite si ninguna de las </li></ul></ul><ul><ul><li> // condiciones anteriores es cierta </li></ul></ul><ul><ul><li> </c:otherwise> </li></ul></ul><ul><ul><li></c:choose> </li></ul></ul><ul><ul><li>La estructura de estas etiquetas es la intuitiva: una vez entrado en un <c:choose> se evalúan los <c:when> en secuencia; en el primero en que la condición sea cierta, se emite su cuerpo y se sale del <c:choose>. Si todas las condiciones son falsas se emite el cuerpo de <c:otherwise>. </li></ul></ul><c:choose>, <c:when> y <c:otherwise> Módulo: J2EE Tema: JavaServer Pages ( JSP )
  47. 47. <ul><ul><li>El siguiente ejemplo completo comprueba los parámetros de entrada a un formulario y emite diferentes salida en base a estos: </li></ul></ul><ul><ul><li><c:choose> </li></ul></ul><ul><ul><li> <c:when test=&quot;${empty param.nombre}&quot; > </li></ul></ul><ul><ul><li> Necesito un nombre.<br> </li></ul></ul><ul><ul><li> </c:when> </li></ul></ul><ul><ul><li> <c:when test=&quot;${empty param.tiempo}&quot; > </li></ul></ul><ul><ul><li>Necesito un tiempo.<br> </li></ul></ul><ul><ul><li></c:when> </li></ul></ul><ul><ul><li><c:otherwise> </li></ul></ul><ul><ul><li>¡Hombre ${param.nombre}!.<br> </li></ul></ul><ul><ul><li>¡Cuánto tiempo sin verte!<br> </li></ul></ul><ul><ul><li>Qué día más ${param.tiempo} hace.<br> </li></ul></ul><ul><ul><li></c:otherwise> </li></ul></ul><ul><ul><li></c:choose> </li></ul></ul>Ejemplo: <c:choose> Módulo: J2EE Tema: JavaServer Pages ( JSP )
  48. 48. <ul><ul><li>La sintaxis que recorre una estructura es: </li></ul></ul><ul><ul><li><c:forEach [var=”nombreVar”] </li></ul></ul><ul><ul><li>items =”coleccion” </li></ul></ul><ul><ul><li>[begin=”comienzo”] </li></ul></ul><ul><ul><li>[end=”final”] </li></ul></ul><ul><ul><li>[step=”paso”] > </li></ul></ul><ul><ul><li> // Cuerpo a repetir </li></ul></ul><ul><ul><li></c:forEach> </li></ul></ul><ul><ul><li>Si el recorrido de una colección hace uso de begin y demás, quiere decir que se comienza en el ítem de la colección situado en posición comienzo, </li></ul></ul><c:forEach> ( 1 ) Módulo: J2EE Tema: JavaServer Pages ( JSP )
  49. 49. <ul><ul><li>Para ejecutarse un determinado número de veces, la sintaxis es: </li></ul></ul><ul><ul><li><c:forEach [var=”nombreVar”] </li></ul></ul><ul><ul><li>begin =”comienzo” </li></ul></ul><ul><ul><li>end =”final” </li></ul></ul><ul><ul><li> [step=”paso”] > </li></ul></ul><ul><ul><li> // Cuerpo a repetir </li></ul></ul><ul><ul><li></c:forEach> </li></ul></ul><ul><ul><li>La variable nombreVar parte del valor comienzo hasta el valor final incrementándose en cada iteración por paso unidades. </li></ul></ul><c:forEach> ( 2 ) Módulo: J2EE Tema: JavaServer Pages ( JSP )
  50. 50. <ul><ul><li>El <c:forEach> se usa para recorrer una colección de forma que cada elemento visitado es apuntado por nombreVar </li></ul></ul><ul><ul><li>Como colección también puede indicarse un array tradicional e incluso un String. </li></ul></ul><ul><ul><li>Ejemplo de recorrido de los elementos de la cabecera (header): </li></ul></ul><ul><ul><li><c:forEach var=&quot;elemento&quot; items=&quot;${header}&quot;> </li></ul></ul><ul><ul><li> ${elemento}<br> </li></ul></ul><ul><ul><li> -> ${elemento.value}<br> </li></ul></ul><ul><ul><li></c:forEach> </li></ul></ul><c:forEach> ( 3 ) Módulo: J2EE Tema: JavaServer Pages ( JSP )
  51. 51. <ul><ul><li>La librería JSTL es distribuida como un conjunto de archivos JAR que simplemente tenemos que agregarlo en el classpath del contenedor de servlets. </li></ul></ul><ul><ul><li>1. Debemos usar un contenedor de servlets compatible con la versión JSP 2.0 para usar el JSTL 1.1. El Apache Tomcat 5.0 [http://jakarta.apache.org/tomcat/] por ejemplo. En caso contrario, es posible usar el JSTL 1.0 en un contenedor que soporte por lo menos el JSP 1.2 y servlets 2.3. </li></ul></ul><ul><ul><li>2. Descargar la implementación JSTL de la página de proyecto Jakarta TagLibs [http://mirrors.isc.org/pub/apache/jakarta/taglibs/standard/]. La distribución binaria viene empaquetada como .zip o tar.gz. Desempaquete estos archivos en un directorio temporal. </li></ul></ul><ul><ul><li>3. Del directorio temporal, copie todos los archivos s tandard.jar y jstl.jar que se encuentran en jakarta-taglibs-standard-1.1.2/lib al directorio /WEB-INF/lib de su aplicación Web.También copiaremos el contenido de la carpeta jakarta-taglibs-standard-1.1.2/conf a un /WEB-INF/conf. </li></ul></ul>Instalación y configuración ( 1 ) Módulo: J2EE Tema: JavaServer Pages ( JSP )
  52. 52. <ul><ul><li>4. A continuación debemos mapear en el web.xml las librerías que vayamoa a utilizar de la siguiente forma:. </li></ul></ul><ul><ul><li><taglib> </li></ul></ul><ul><ul><li> <taglib-uri>/WEB-INF/c</taglib-uri> </li></ul></ul><ul><ul><li> <taglib-location>/WEB-INF/conf/c.tld</taglib-location> </li></ul></ul><ul><ul><li></taglib> </li></ul></ul><ul><ul><li>5.Ahora, creamos una página JSP y probamos algunas etiquetas simples para asegurarnos que la configuración del JSTL está bien hecha. </li></ul></ul><ul><ul><li> <%@ taglib prefix=&quot;c&quot; uri=&quot;/WEB-INF/c&quot; %> </li></ul></ul><ul><ul><li> <c:set var=&quot;hello&quot; value=&quot;Hola mundo&quot;/> </li></ul></ul><ul><ul><li> <div> </li></ul></ul><ul><ul><li> <c:out value=&quot;${hello}&quot;/> </li></ul></ul><ul><ul><li></div> </li></ul></ul>Instalación y configuración ( 2 ) Módulo: J2EE Tema: JavaServer Pages ( JSP )
  53. 53. Ejemplo ( 1 ) Módulo: J2EE Tema: JavaServer Pages ( JSP ) <%@ taglib prefix=&quot;c&quot; uri=&quot;/WEB-INF/c&quot; %> <html> <head> <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=ISO-8859-1&quot;> <title>JSTL - Ejemplo 1</title> </head> <body> <c:set var=&quot;nombre&quot; value=&quot;Mi nombre es Jorge&quot; /> <div><c:out value=&quot;${nombre}&quot; default=&quot;Valor por defecto;&quot; /></div> <div><c:out value=&quot;${variableInexistente}&quot; default=”Valor por defecto&quot;/></div> <hr/>
  54. 54. Ejemplo ( 2 ) Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><li><div>Cabecera: </div> </li></ul><ul><li><ul> </li></ul><ul><li><c:forEach var=&quot;elemento&quot; items=&quot;${header}&quot;> </li></ul><ul><li> <li><strong>${elemento.key}:</strong> ${elemento.value}</li> </li></ul><ul><li></c:forEach> </li></ul><ul><li></ul> </li></ul><ul><li><hr/> </li></ul><ul><li><ul> </li></ul><ul><li><c:forEach var=&quot;unaCookie&quot; items=&quot;${cookie}&quot;> </li></ul><ul><li><li><strong>${unaCookie.key}:</strong> ${unaCookie.value}</li> </li></ul><ul><li></c:forEach> </li></ul><ul><li><ul/> </li></ul><ul><li></body></html> </li></ul>
  55. 55. Ejercicio Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><li>Ejercicio 1 </li></ul><ul><ul><ul><li>Tendremos una página de inicio con un formulario. Dicho formulario tendrá los siguientes datos personales de un usuario: </li></ul></ul></ul><ul><ul><ul><ul><ul><li>nombre, apellidos, nif, direccion, telefono y sexo( será un desplegable con las opciones 'Hombre' y 'Mujer'. Además tendremos una opción por defecto que será 'Seleccione'. </li></ul></ul></ul></ul></ul><ul><ul><ul><li>Tendremos un servlet que nos recogerá los datos del formulario, los cargará en un UsuarioVO, meterá dicho objeto en sesión y llamará a otra página JSP que nos mostrará los dados introducidos por el usuario. </li></ul></ul></ul><ul><ul><ul><li>Si la opción sexo no fue seleccionada correctamente, sino que se dejo la opción por defecto:, se mostrará 'No se ha seleccionado el sexo del usuario' </li></ul></ul></ul><ul><ul><ul><li>NO DEBEMOS INTRODUCIR NADA DE CÓDIGO JAVA DENTRO DE LA PÁGINA JSP. </li></ul></ul></ul>
  56. 56. Ejercicio Módulo: J2EE Tema: JavaServer Pages ( JSP ) <ul><li>Ejercicio 2 </li></ul><ul><ul><ul><li>Tendremos una página de inicio con un formulario. Dicho formulario tendrá los siguientes datos personales de un usuario: </li></ul></ul></ul><ul><ul><ul><ul><ul><li>nombre, apellidos, nif, direccion, telefono y sexo( será un desplegable con las opciones 'Hombre' y 'Mujer'. Además tendremos una opción por defecto que será 'Seleccione'. </li></ul></ul></ul></ul></ul><ul><ul><ul><li>Tendremos un servlet que nos recogerá los datos del formulario, los cargará en un UsuarioVO, añadirá el usuario a una lista de UsuarioVO, y meterá en sesión la lista de usuarios. </li></ul></ul></ul><ul><ul><ul><li>A continuación llamará a otra página JSP que nos mostrará la lista de usuarios. En dicha página tendremos un enlace para volver a la página del formulario y añadir mas usuarios a la lista. </li></ul></ul></ul><ul><ul><ul><li>NO DEBEMOS INTRODUCIR NADA DE CÓDIGO JAVA DENTRO DE LA PÁGINA JSP. </li></ul></ul></ul>

×