Anda di halaman 1dari 42

Java Servlet Pages

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.

Tipo de clusulas de JSP


<%@ %>: Directivas (se ejecutan al compilar la pgina JSP) <%-- %>: Comentarios <%! %>: Declaraciones de atributos y mtodos Java. Se definen en la clase asociada.

Tipo de clusulas de JSP, II


<%= %>: Inclusin de datos generados dinmicamente (expresiones; equivale a <% out.println() %>) <% %>: Scriplets (cdigo a ejecutar) Etiquetas JSP (ejemplo: <c:import url=www.ii.uam.es/>) Expresiones UEL (ejemplo: ${x+y})

Tipos de directivas
<%@ page contentType="text/html" %> <%@ page pageEncoding="UTF-8" %> <%@ page import="java.util.*", ... %> <%@ page errorPage="file_name" %>

<%@ include file="hello.jsp" %> Mejor utilizar la etiqueta c:import

Objetos predefinidos en pginas JSP (variables Java)


request response pageContext (es un contexto especfico para pginas JSP) session application out config (contexto del servlet)

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 (UEL)


Es un lenguaje de script interpretado que integra el acceso a la informacin disponible en la pgina JSP Es una alternativa simplificada a la evaluacin de expresiones Java Las expresiones UEL pueden aparecer como atributos de expresiones JSP (HTML, etiquetas) o como texto esttico que forma parte del contenido de la pgina

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)

Lenguaje de expresiones, III


Se pueden definir variables UEL mediante la etiqueta c:set: Ejemplo: <c:set var=x scope=session value=2/> La evaluacin de expresiones incluye un proceso de resolucin (bsqueda) del tipo adecuado de objetos referidos. Para evaluar una expresin compuesta del tipo ${xx.yy} primero se evala la expresin simple asociada ${xx}.

UEL: Evaluacin de expresiones simples


Prioridades en la resolucin de expresiones simples:
Variables UEL Objetos implcitos (ver prxima transparencia) Atributos del mbito de la pgina Atributos del mbito de la peticin Atributos del mbito de la sesin Atributos del mbito de la aplicacin Null

UEL: Objetos implcitos


pageContext initParam[name] param[name] paramValues[name] header[name] headerValues[name] cookie[name] pageScope requestScope sessionScope applicationScope

UEL: Evaluacin de expresiones simples, II

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)

UEL: Evaluacin de expresiones compuestas


La expresin ${obj.atr} equivale a ${obj[atr]}. Resolucin de expresiones compuestas de la forma ${obj.atr}:
Si ${obj} es un contexto: obj.getAttribute(atr) Si ${obj} es un JavaBean: obj.getAtr()

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.

Expresiones UEL: Tipos de evaluacin


La evaluacin de expresiones UEL puede ser inmediata (${ }) o diferida (#{ }). La evaluacin diferida se aplica en casos especiales:
Asignacin de valores a variables: <c:set var=#{userId} value=cacatua> Asignacin de atributos a componentes grficas (JSF) Valores relacionados con bases de datos

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.

Biblioteca de etiquetas: JSTL


Sintaxis tipo XML Se traducen en invocaciones a cdigo Java Ejemplo:
<jsp:useBean id="help scope="request" class="ConverterBean" /> // scope: request | session | application // Proporciona acceso a variable en Java

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); %>

Etiquetas estndar JSP


Tipos: core (c), XML (x), bases de datos (sql), internacionalizacin (fmt), funciones (fn) Hay que incluir una directiva por cada tipo que se utilice. Informacin asociada: Variables UEL, guardadas en atributos (principal: var=)
Ejemplo: <c:forEach var="item items="${sessionScope.cart.items}"> </c:forEach>

Etiquetas estndar JSP: Core


Variables:
<c:set var="bookId" value="${book.id}"/> <c:remove var=bookId/> Atributo opcional en ambos casos: scope

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>

Etiquetas estndar JSP: Core, II


Control de flujo, II:
<c:if test=${price<=total}> <h1>Pedido:</h1> ${price} <c:set var=priceOK value=true/> </c:if> <c:forTokens var=token items=lunes, martes, miercoles> <tr><td>token</td></tr> </c:forTokens>

Etiquetas estndar JSP: Core, III


Control de flujo, III:
<c:choose> <c:when test=${valor1<valor2}> ${valor1} </c:when> <c:otherwise> ${valor2} </c:choose>

Etiquetas estndar JSP: Core, IV


URL:
<c:import url="/books.xml" var=bks" /> <c:redirect url=/books.xml/>

Otras etiquetas estndar JSP


XML:
Core Control de flujo Transformacin Ejemplo: x:parse

Internacionalizacin:
Locale Mensajes Formato de nmeros y fechas

Etiquetas estndar JSP: Bases de datos


<sql:setDataSource var="data driver=com.mysql.jdbc.Driver url="jdbc:mysql://localhost/db?user=root scope=application/> En la prctica el driver y la url deberan ser parmetros de la aplicacin, especificados en web.xml

Etiquetas estndar JSP: Bases de datos, II


<sql:query var="books dataSource="${data}"> SELECT * from public.books WHERE id = ? <sql:param value="${bookId}" /> </sql:query>

Etiquetas estndar JSP: Bases de datos, III


<table> <c:forEach var=book items="${books.rows}"> <tr> <td><c:out value="${book.author}" /></td> <td><c:out value="${book.title}" /></td> </tr> </c:forEach> </table>

Etiquetas estndar JSP: Bases de datos, IV


<sql:transaction dataSource="${dataSource}"> <sql:update> UPDATE account SET Balance = Balance - ? WHERE accountNo = ? <sql:param value="${transferAmount}"/> <sql:param value="${accountFrom}"/> </sql:update> </sql:transaction>

Etiquetas estndar JSP: Funciones


Pueden aparecer en expresiones EL Colecciones:
fn:length

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.

Arquitectura Modelo Vista Controlador (MVC)


Controlador (eventos) Servlets Interfaz capa web - cliente

Capa de negocios

Modelo (datos)
Beans

Vista
JSP

Recursos, servicios, etc

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.