JSP
JSP
JSP
JSP, I
Cdigo HTML con cdigo Java embebido y otras extensiones de HTML especficas de JSP. Ejemplo: <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@taglib prefix=c uri=http://java....%> <html> <head> <title> JSP </title> </head> <body> <h1> Hola, <%= request.getRemoteAddr() %> </h1> </body> </html>
JSP, II
Se guardan en el directorio raz (pblico) URL estndar: .jsp (web.xml) Se compilan la primera vez que se usan, generando cdigo de un servlet. Al acceder a su URL, un servlet genrico busca la subclase de HttpServlet correspondiente a la pgina y la carga, compilndola previamente si hace falta.
JSP, III
El cdigo Java embebido corresponde a un mtodo del servlet generado Los errores en el cdigo java de una pgina JSP se detectan al compilar el servlet (la primera vez que se accede a la URL). Salvo que se programe otra cosa, los mensajes de error aparecen en el navegador. Se pueden especificar en web.xml pginas de error a mostrar para errores especficos.
Tipos de directivas
<%@ page contentType="text/html" %> <%@ page pageEncoding="UTF-8" %> <%@ page import="java.util.*", ... %> <%@ page errorPage="file_name" %>
Importancia de la indentacin
<...> <% if (hello) { %> <P>Hello, world <% } else { %> <P>Goodbye, world <% } %> <...>
Ejercicios
[SFJ1]: Escribir aplicaciones web con pginas JSP que se comportan como las de los ejercicios [SERV1], [SERV2] y [SERVCONT1]. [OPJ] (opcional): Escribir una aplicacin web formada por una pgina JSP que defina una calculadora con dos memorias numricas.
Lenguaje de expresiones, II
Ejemplo: <img src=${aplUrl+img1}> ${title1} Las expresiones UEL se evalan por un contenedor web en una mquina virtual Java. Los valores de las expresiones UEL son referencias a objetos Java que pueden ser JavaBeans, colecciones, enumeraciones o determinados objetos especiales (objetos implcitos) u objetos simples (nmeros, Strings). Los resultados de la evaluacin de las expresiones UEL se traducen al tipo apropiado (String en los dos ejemplos anteriores)
Ejemplos: ${session} se refiere en general a pageContext.getAttribute(session) ${request} se refiere en general a pageContext.getAttribute(request) ${response} se refiere en general a pageContext.getAttribute(response) ${userId} puede referirse a session.getAttribute(userId)
Mecanismo de resolucin en la evaluacin de expresiones UEL: Resolvers y reflexin. La resolucin de expresiones se efecta solamente la primera vez que se evalan.
Ejercicio
[ACC1] Obligatorio: Aplicacin web con una pgina JSP que muestra una lista HTML con las horas de acceso dentro de la misma sesin, y un botn Acceder otra vez.
Depuracin
El carcter dinmico de las pginas JSP y el hecho de que generen un servlet que se compila tras el despliegue de la aplicacin dificultan su depuracin. Se puede compilar directamente una pgina JSP para generar el servlet correspondiente Se puede ver el cdigo Java del servlet (durante la ejecucin de la aplicacin).
Depuracin, II
Se pueden poner puntos de parada en la pgina JSP (no en el cdigo del servlet). Se puede hacer una llamada a una pgina JSP determinada o a un servlet con los parmetros deseados.
Depuracin, III
Se puede monitorizar la cadena de peticiones http realizadas dentro de una aplicacin mediante el Http Monitor, y explorar su estado en cada paso. Se puede revisar el log (registro de eventos) del servidor para ver detalles acerca de los errores y de la ejecucin de la aplicacin.
Se necesita una directiva para hacerlas accesibles: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
JSTL: Ejemplos
El ejemplo de la transparencia anterior, <jsp:useBean id="help scope="request" class="ConverterBean" /> se traduce a <% request.setAttribute(help, new ConverterBean() %> salvo optimizaciones.
JSTL: Ejemplos, II
<jsp:setProperty name="limite" property="valor" value="10" /> se traduce a <% limite.setValor(10); %> <c:import url="next.jsp" /> se traduce a <% response.sendRedirect(next.jsp); %>
Control de flujo:
<c:forEach var=book items=${booksList}> <tr><td>${book.title}</td></tr> <c:set var=total value=${total+book.price}/> </c:forEach>
Internacionalizacin:
Locale Mensajes Formato de nmeros y fechas
Cadenas de caracteres:
fn:toUpperCase fn:toLowerCase
Documentacin JSTL
Ejercicio obligatorio
[PyCE1]: Aplicacin web que permite acceder a cuatro pginas:
La primera muestra en una tabla de veinte en veinte los nombres de personas y sus correos electrnicos, contenidos en un fichero fijo. Tambin permite borrar los datos de personas seleccionadas de la tabla. El fichero contendr en cada lnea el nombre y la direccin de correo de una persona, separados por una coma.
Ejercicio obligatorio, II
La segunda pgina, a la que se accede tras seleccionar una fila de la tabla anterior y pulsar sobre el botn Modificar, permite modificar los datos de la persona previamente seleccionada. La tercera pgina, a la que se accede tras pulsar sobre el botn Nuevo, permite aadir una persona nueva al fichero. A la cuarta pgina se accede tras pulsar sobre el botn Buscar, y permite buscar el correo electrnico correspondiente a una persona y modificarlo.
Ejercicio optativo
[FAV] Optativo: Aplicacin web que permite mostrar pginas web arbitrarias y gestionar una lista de URLs correspondientes a las pginas que se desee entre las anteriores (favoritos). La lista de URLs favoritas se guardar en un fichero fijo.
Capa de negocios
Modelo (datos)
Beans
Vista
JSP
Ejercicios
[PyCE2] Obligatorio: Aplicacin web (servlets y pginas jsp) que utiliza la arquitectura MVC para resolver el ejercicio PyCE1 anterior. [UTIL] Voluntario: Extraer de los ejercicios anteriores clases y diseos tiles para otras aplicaciones.