JSP

1,534 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,534
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
86
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

JSP

  1. 1. Java Servlet Pages
  2. 2. JSP, I <ul><li>Código HTML con código Java embebido y otras extensiones de HTML específicas de JSP. </li></ul><ul><li>Ejemplo: </li></ul><ul><li><%@page contentType=&quot;text/html&quot;%> </li></ul><ul><li><%@page pageEncoding=&quot;UTF-8&quot;%> </li></ul><ul><li><%@taglib prefix=“c” uri=“http://java....”%> </li></ul><ul><li><html> <head> <title> JSP </title> </head> </li></ul><ul><li><body> </li></ul><ul><li><h1> Hola, <%= request.getRemoteAddr() %> </li></ul><ul><li></h1> </li></ul><ul><li></body> </html> </li></ul>
  3. 3. JSP, II <ul><li>Se guardan en el directorio raíz (público) </li></ul><ul><li>URL estándar: … .jsp (web.xml) </li></ul><ul><li>Se compilan la primera vez que se usan, generando código de un servlet. </li></ul><ul><li>Al acceder a su URL, un servlet genérico busca la subclase de HttpServlet correspondiente a la página y la carga, compilándola previamente si hace falta. </li></ul>
  4. 4. JSP, III <ul><li>El código Java embebido corresponde a un método del servlet generado </li></ul><ul><li>Los errores en el código java de una pági-na JSP se detectan al compilar el servlet (la primera vez que se accede a la URL). </li></ul><ul><li>Salvo que se programe otra cosa, los men-sajes de error aparecen en el navegador. </li></ul><ul><li>Se pueden especificar en web.xml páginas de error a mostrar para errores específicos. </li></ul>
  5. 5. Tipo de cláusulas de JSP <ul><li><%@ … %>: Directivas (se ejecutan al compilar la página JSP) </li></ul><ul><li><%-- … %>: Comentarios </li></ul><ul><li><%! … %>: Declaraciones de atributos y métodos Java. Se definen en la clase asociada. </li></ul>
  6. 6. Tipo de cláusulas de JSP, II <ul><li><%= … %>: Inclusión de datos generados dinámicamente (expresiones; equivale a <% out.println(…) %>) </li></ul><ul><li><% … %>: Scriplets (código a ejecutar) </li></ul><ul><li>Etiquetas JSP (ejemplo: <c:import url=www.ii.uam.es/>) </li></ul><ul><li>Expresiones UEL (ejemplo: ${x+y}) </li></ul>
  7. 7. Tipos de directivas <ul><li><%@ page contentType=&quot; text/html &quot; %> </li></ul><ul><li><%@ page pageEncoding=&quot; UTF-8 &quot; %> </li></ul><ul><li><%@ page import=&quot; java.util.* &quot;, ... %> </li></ul><ul><li><%@ page errorPage=&quot; file_name &quot; %> </li></ul><ul><li><%@ include file=&quot; hello.jsp &quot; %> </li></ul><ul><li>Mejor utilizar la etiqueta c:import </li></ul>
  8. 8. Objetos predefinidos en páginas JSP (variables Java) <ul><li>request </li></ul><ul><li>response </li></ul><ul><li>pageContext </li></ul><ul><li>(es un contexto específico para páginas JSP) </li></ul><ul><li>session </li></ul><ul><li>application </li></ul><ul><li>out </li></ul><ul><li>config </li></ul><ul><li>(contexto del servlet) </li></ul>
  9. 9. Importancia de la indentación <ul><li><...> </li></ul><ul><li><% if (hello) { %> </li></ul><ul><li><P>Hello, world </li></ul><ul><li><% } else { %> </li></ul><ul><li><P>Goodbye, world </li></ul><ul><li><% } %> </li></ul><ul><li><...> </li></ul>
  10. 10. Ejercicios <ul><li>[SFJ1] : Escribir aplicaciones web con páginas JSP que se comportan como las de los ejercicios [SERV1] , [SERV2] y [SERVCONT1] . </li></ul><ul><li>[OPJ] (opcional): Escribir una aplicación web formada por una página JSP que defina una calculadora con dos memorias numéricas. </li></ul>
  11. 11. Lenguaje de expresiones (UEL) <ul><li>Es un lenguaje de script interpretado que integra el acceso a la información disponible en la página JSP </li></ul><ul><li>Es una alternativa simplificada a la evaluación de expresiones Java </li></ul><ul><li>Las expresiones UEL pueden aparecer como atributos de expresiones JSP (HTML, etiquetas) o como texto estático que forma parte del contenido de la página </li></ul>
  12. 12. Lenguaje de expresiones, II <ul><li>Ejemplo: </li></ul><ul><li><img src=“${aplUrl+img1}”> ${title1} </li></ul><ul><li>Las expresiones UEL se evalúan por un contenedor web en una máquina virtual Java. </li></ul><ul><li>Los valores de las expresiones UEL son referencias a objetos Java que pueden ser JavaBeans, colecciones, enumeraciones o determinados objetos especiales (objetos implícitos) u objetos simples (números, Strings). </li></ul><ul><li>Los resultados de la evaluación de las expresiones UEL se traducen al tipo apropiado (String en los dos ejemplos anteriores) </li></ul>
  13. 13. Lenguaje de expresiones, III <ul><li>Se pueden definir variables UEL mediante la etiqueta c:set: </li></ul><ul><li>Ejemplo: </li></ul><ul><li><c:set var=“x” scope=“session” value=“2”/> </li></ul><ul><li>La evaluación de expresiones incluye un proceso de resolución (búsqueda) del tipo adecuado de objetos referidos. </li></ul><ul><li>Para evaluar una expresión compuesta del tipo ${xx.yy} primero se evalúa la expresión simple asociada ${xx}. </li></ul>
  14. 14. UEL: Evaluación de expresiones simples <ul><li>Prioridades en la resolución de expresiones simples: </li></ul><ul><ul><li>Variables UEL </li></ul></ul><ul><ul><li>Objetos implícitos (ver próxima transparencia) </li></ul></ul><ul><ul><li>Atributos del ámbito de la página </li></ul></ul><ul><ul><li>Atributos del ámbito de la petición </li></ul></ul><ul><ul><li>Atributos del ámbito de la sesión </li></ul></ul><ul><ul><li>Atributos del ámbito de la aplicación </li></ul></ul><ul><ul><li>Null </li></ul></ul>
  15. 15. UEL: Objetos implícitos <ul><li>pageContext </li></ul><ul><li>initParam[“name”] </li></ul><ul><li>param[“name”] </li></ul><ul><li>paramValues[“name”] </li></ul><ul><li>header[“name”] </li></ul><ul><li>headerValues[“name”] </li></ul><ul><li>cookie[“name”] </li></ul><ul><li>pageScope </li></ul><ul><li>requestScope </li></ul><ul><li>sessionScope </li></ul><ul><li>applicationScope </li></ul>
  16. 16. UEL: Evaluación de expresiones simples, II <ul><li>Ejemplos: </li></ul><ul><li>${session} se refiere en general a </li></ul><ul><li>pageContext.getAttribute(“session”) </li></ul><ul><li>${request} se refiere en general a </li></ul><ul><li>pageContext.getAttribute(“request”) </li></ul><ul><li>${response} se refiere en general a </li></ul><ul><li>pageContext.getAttribute(“response”) </li></ul><ul><li>${userId} puede referirse a session.getAttribute(“userId”) </li></ul>
  17. 17. UEL: Evaluación de expresiones compuestas <ul><li>La expresión ${obj.atr} equivale a ${obj[“atr”]}. </li></ul><ul><li>Resolución de expresiones compuestas de la forma ${obj.atr}: </li></ul><ul><ul><li>Si ${obj} es un contexto: obj.getAttribute(“atr”) </li></ul></ul><ul><ul><li>Si ${obj} es un JavaBean: obj.getAtr() </li></ul></ul><ul><li>Mecanismo de resolución en la evaluación de expresiones UEL: Resolvers y reflexión. </li></ul><ul><li>La resolución de expresiones se efectúa solamente la primera vez que se evalúan. </li></ul>
  18. 18. Expresiones UEL: Tipos de evaluación <ul><li>La evaluación de expresiones UEL puede ser inmediata (${ … }) o diferida (#{ … }). </li></ul><ul><li>La evaluación diferida se aplica en casos especiales: </li></ul><ul><ul><li>Asignación de valores a variables: </li></ul></ul><ul><ul><li><c:set var=“#{userId}” value=“cacatua”> </li></ul></ul><ul><ul><li>Asignación de atributos a componentes gráficas (JSF) </li></ul></ul><ul><ul><li>Valores relacionados con bases de datos </li></ul></ul>
  19. 19. Ejercicio <ul><li>[ACC1] Obligatorio: Aplicación web con una página JSP que muestra una lista HTML con las horas de acceso dentro de la misma sesión, y un botón “Acceder otra vez”. </li></ul>
  20. 20. Depuración <ul><li>El carácter dinámico de las páginas JSP y el hecho de que generen un servlet que se compila tras el despliegue de la aplicación dificultan su depuración. </li></ul><ul><li>Se puede compilar directamente una página JSP para generar el servlet correspondiente </li></ul><ul><li>Se puede ver el código Java del servlet (durante la ejecución de la aplicación). </li></ul>
  21. 21. Depuración, II <ul><li>Se pueden poner puntos de parada en la página JSP (no en el código del servlet). </li></ul><ul><li>Se puede hacer una llamada a una página JSP determinada o a un servlet con los parámetros deseados. </li></ul>
  22. 22. Depuración, III <ul><li>Se puede monitorizar la cadena de peticiones http realizadas dentro de una aplicación mediante el Http Monitor, y explorar su estado en cada paso. </li></ul><ul><li>Se puede revisar el log (registro de eventos) del servidor para ver detalles acerca de los errores y de la ejecución de la aplicación. </li></ul>
  23. 23. Biblioteca de etiquetas: JSTL <ul><li>Sintaxis tipo XML </li></ul><ul><li>Se traducen en invocaciones a código Java </li></ul><ul><li>Ejemplo: </li></ul><ul><ul><li>< jsp:useBean id=&quot;help“ scope=&quot;request&quot; </li></ul></ul><ul><ul><li>class=&quot;ConverterBean&quot; /> </li></ul></ul><ul><ul><li>// scope: request | session | application </li></ul></ul><ul><ul><li>// Proporciona acceso a variable en Java </li></ul></ul><ul><li>Se necesita una directiva para hacerlas accesibles: </li></ul><ul><li><%@ taglib uri=&quot;http://java.sun.com/jsp/jstl/core&quot; </li></ul><ul><li>prefix=&quot;c&quot; %> </li></ul>
  24. 24. JSTL: Ejemplos <ul><li>El ejemplo de la transparencia anterior, </li></ul><ul><li>< jsp:useBean id=&quot;help“ scope=&quot;request&quot; </li></ul><ul><li>class=&quot;ConverterBean&quot; /> </li></ul><ul><li>se traduce a </li></ul><ul><li><% request.setAttribute(“help”, </li></ul><ul><li>new ConverterBean() %> </li></ul><ul><li>salvo optimizaciones. </li></ul>
  25. 25. JSTL: Ejemplos, II <ul><li>< jsp:setProperty name=&quot;limite&quot; property=&quot;valor&quot; value=&quot;10&quot; /> </li></ul><ul><li>se traduce a </li></ul><ul><li><% limite.setValor(10); %> </li></ul><ul><li><c:import url=&quot;next.jsp&quot; /> </li></ul><ul><li>se traduce a </li></ul><ul><li><% response.sendRedirect(“next.jsp”); %> </li></ul>
  26. 26. Etiquetas estándar JSP <ul><li>Tipos: core (c), XML (x), bases de datos (sql), internacionalización (fmt), funciones (fn) </li></ul><ul><li>Hay que incluir una directiva por cada tipo que se utilice. </li></ul><ul><li>Información asociada: Variables UEL, guardadas en atributos (principal: var=”…”) </li></ul><ul><ul><li>Ejemplo: </li></ul></ul><ul><ul><li>< c:forEach var= &quot;item“ </li></ul></ul><ul><ul><li>items= &quot;${sessionScope.cart.items}&quot;> </li></ul></ul><ul><ul><li>… </li></ul></ul><ul><ul><li></c:forEach> </li></ul></ul>
  27. 27. Etiquetas estándar JSP: Core <ul><li>Variables: </li></ul><ul><ul><li>< c:set var=&quot;bookId&quot; value=&quot;${book.id}&quot;/> </li></ul></ul><ul><ul><li>< c:remove var=“bookId”/> </li></ul></ul><ul><ul><li>Atributo opcional en ambos casos: scope </li></ul></ul><ul><li>Control de flujo: </li></ul><ul><ul><li>< c:forEach var=“ book ” items=“${booksList}”> </li></ul></ul><ul><ul><li><tr><td>${ book .title}</td></tr> </li></ul></ul><ul><ul><li><c:set var=“total” value=“${total+ book .price}”/> </li></ul></ul><ul><ul><li></c:forEach> </li></ul></ul>
  28. 28. Etiquetas estándar JSP: Core, II <ul><li>Control de flujo, II: </li></ul><ul><ul><li>< c:if test=“${price<=total}”> </li></ul></ul><ul><ul><li><h1>Pedido:</h1> ${price} </li></ul></ul><ul><ul><li><c:set var=“priceOK” value=“true”/> </li></ul></ul><ul><ul><li></c:if> </li></ul></ul><ul><ul><li>< c:forTokens var=“token” </li></ul></ul><ul><ul><li>items=“lunes, martes, miercoles”> </li></ul></ul><ul><ul><li> <tr><td>token</td></tr> </li></ul></ul><ul><ul><li></c:forTokens> </li></ul></ul>
  29. 29. Etiquetas estándar JSP: Core, III <ul><li>Control de flujo, III: </li></ul><ul><ul><li>< c:choose > </li></ul></ul><ul><ul><li>< c:when test=“${valor1<valor2}”> </li></ul></ul><ul><ul><li>${valor1} </li></ul></ul><ul><ul><li></c:when> </li></ul></ul><ul><ul><li>< c:otherwise > </li></ul></ul><ul><ul><li>${valor2} </li></ul></ul><ul><ul><li></c:choose> </li></ul></ul>
  30. 30. Etiquetas estándar JSP: Core, IV <ul><li>URL: </li></ul><ul><ul><li>< c:import url=&quot;/books.xml&quot; var=“bks&quot; /> </li></ul></ul><ul><ul><li>< c:redirect url=“/books.xml”/> </li></ul></ul>
  31. 31. Otras etiquetas estándar JSP <ul><li>XML: </li></ul><ul><ul><li>Core </li></ul></ul><ul><ul><li>Control de flujo </li></ul></ul><ul><ul><li>Transformación </li></ul></ul><ul><ul><li>Ejemplo: x:parse </li></ul></ul><ul><li>Internacionalización: </li></ul><ul><ul><li>Locale </li></ul></ul><ul><ul><li>Mensajes </li></ul></ul><ul><ul><li>Formato de números y fechas </li></ul></ul>
  32. 32. Etiquetas estándar JSP: Bases de datos <ul><li>< sql:setDataSource var=&quot;data“ </li></ul><ul><li>driver=“com.mysql.jdbc.Driver“ </li></ul><ul><li>url=&quot;jdbc:mysql://localhost/ db ?user=root“ </li></ul><ul><li>scope=“application”/> </li></ul><ul><li>En la práctica el driver y la url deberían ser parámetros de la aplicación, especificados en web.xml </li></ul>
  33. 33. Etiquetas estándar JSP: Bases de datos, II <ul><li>< sql:query var=&quot;books“ </li></ul><ul><li>dataSource=&quot;${data}&quot;> </li></ul><ul><li>SELECT * </li></ul><ul><li>from public.books </li></ul><ul><li>WHERE id = ? </li></ul><ul><li>< sql:param value=&quot;${bookId}&quot; /> </li></ul><ul><li></sql:query> </li></ul>
  34. 34. Etiquetas estándar JSP: Bases de datos, III <ul><li><table> </li></ul><ul><li><c:forEach var=“book“ items=&quot;${books.rows}&quot;> </li></ul><ul><li><tr> </li></ul><ul><li><td>< c:out value=&quot;${book.author}&quot; /></td> </li></ul><ul><li><td><c:out value=&quot;${book.title}&quot; /></td> </li></ul><ul><li></tr> </li></ul><ul><li></c:forEach> </li></ul><ul><li></table> </li></ul>
  35. 35. Etiquetas estándar JSP: Bases de datos, IV <ul><li>< sql:transaction dataSource=&quot;${dataSource}&quot;> </li></ul><ul><li>< sql:update > </li></ul><ul><li>UPDATE account </li></ul><ul><li>SET Balance = Balance - ? </li></ul><ul><li>WHERE accountNo = ? </li></ul><ul><li><sql:param value=&quot;${transferAmount}&quot;/> </li></ul><ul><li><sql:param value=&quot;${accountFrom}&quot;/> </li></ul><ul><li></sql:update> </li></ul><ul><li></sql:transaction> </li></ul>
  36. 36. Etiquetas estándar JSP: Funciones <ul><li>Pueden aparecer en expresiones EL </li></ul><ul><li>Colecciones: </li></ul><ul><ul><li>fn:length </li></ul></ul><ul><li>Cadenas de caracteres: </li></ul><ul><ul><li>fn:toUpperCase </li></ul></ul><ul><ul><li>fn:toLowerCase </li></ul></ul><ul><ul><li>… </li></ul></ul>
  37. 37. Documentación JSTL
  38. 38. Ejercicio obligatorio <ul><li>[PyCE1] : Aplicación web que permite acceder a cuatro páginas: </li></ul><ul><ul><li>La primera muestra en una tabla de veinte en veinte los nombres de personas y sus correos electrónicos, contenidos en un fichero fijo. También permite borrar los datos de personas seleccionadas de la tabla. </li></ul></ul><ul><ul><li>El fichero contendrá en cada línea el nombre y la dirección de correo de una persona, separados por una coma. </li></ul></ul>
  39. 39. Ejercicio obligatorio, II <ul><ul><li>La segunda página, a la que se accede tras seleccionar una fila de la tabla anterior y pulsar sobre el botón “Modificar”, permite modificar los datos de la persona previamente seleccionada. </li></ul></ul><ul><ul><li>La tercera página, a la que se accede tras pulsar sobre el botón “Nuevo”, permite añadir una persona nueva al fichero. </li></ul></ul><ul><ul><li>A la cuarta página se accede tras pulsar sobre el botón “Buscar”, y permite buscar el correo electrónico correspondiente a una persona y modificarlo. </li></ul></ul>
  40. 40. Ejercicio optativo <ul><li>[FAV] Optativo: Aplicación web que permite mostrar páginas web arbitrarias y gestionar una lista de URLs correspondientes a las páginas que se desee entre las anteriores (favoritos). La lista de URLs favoritas se guardará en un fichero fijo. </li></ul>
  41. 41. Arquitectura Modelo Vista Controlador (MVC) Interfaz capa web - cliente Capa de negocios Recursos, servicios, etc Controlador (eventos) Servlets Vista JSP Modelo (datos) Beans
  42. 42. Ejercicios <ul><li>[PyCE2] Obligatorio: Aplicación web (servlets y páginas jsp) que utiliza la arquitectura MVC para resolver el ejercicio PyCE1 anterior. </li></ul><ul><li>[UTIL] Voluntario: Extraer de los ejercicios anteriores clases y diseños útiles para otras aplicaciones. </li></ul>

×