Los ejercicios de JSP trabajan sobre la aplicación Web conversor.
1. Conversor JSP. Esta aplicación pretende convertir una
cantidad en pesetas introducida en un formulario, a euros. Para ello, se pide crear una página JSP
conversor.jsp
a la que:
numero
, mostrará
el formulario para introducir la cantidad de pesetas. Dicho formulario deberá
tener un campo de texto llamado numero
con la cantidad a
convertir, y un botón submit que envíe a esta misma página.numero
tomará el valor del
parámetro, realizará la conversión a euros de dicho parámetro y mostrará el
resultado en pantalla.
request.getParameter(String)
si existe un parámetro numero
(si no existe el método
devolverá null
)Integer.parseInt(String)
<% if (request.getParameter("numero") != null) { int numero = Integer.parseInt(request.getParameter("numero")); double euros = ... convertir a euros ... %> ... Mostrar euros ...
java.text.NumberFormat
,
indicándole cuántos decimales queréis mostrar<% ... java.text.NumberFormat nf = java.text.NumberFormat.getInstance(); nf.setMinimumFractionDigits(2); nf.setMaximumFractionDigits(2); %> ... <%= nf.format(euros) %> ...
2. Conversor JSP. Sobre la aplicación anterior, una vez realizada la parte básica, añadirle tratamiento de errores, de manera
que si se produce una excepción en la página conversor.jsp
se salte a la
página de error, error.jsp
(que también debéis crear).
conversor.jsp
deberá tener una directiva page
que indique la página de error a la que se salta (con errorPage
):<%@ page errorPage="error.jsp" %>
error.jsp
deberá tener una directiva page
que indique que es una página de error (con isErrorPage
):<%@ page isErrorPage="true" %>
conversor.jsp,
si la cantidad que
representa el parámetro numero
es negativa, lanzar una excepción
con el mensaje de error deseado (throw new Exception("La cantidad no es correcta")
).<% ... int numero = Integer.parseInt(request.getParameter("numero")); if (numero < 0) throw new Exception ("...texto del error..."); %> ... <%= euros %> ...
exception
de JSP, y llamado a su método getMessage()
)3. (OPTATIVO) Contador de visitas. crear un fragmento de código JSP que sirva como contador de visitas. El objetivo es poder incluir este código en otras páginas JSP, por lo que no es necesario (ni conveniente) que sea una página web completa, sino solo el texto del contador. Este debe aparecer con texto HTML en negrita similar al siguiente
Esta página ha sido visitada X veces
Para el contador, empleamos una variable declarada en la forma <%!
variable %>.
Esto nos permitirá dejarla definida en el método init()
del servlet. Después, simplemente mostramos su valor en pantalla cada vez que
se llame a la página, e incrementamos el contador.
Valorar si sería más conveniente emplear la directiva include
o la acción del mismo nombre. El código debe poder incluirse en distintas páginas de
forma que cada una tenga un contador propio.
Como ejemplo, incluirlo en la aplicación conversor del ejercicio anterior.
Una vez se tenga funcionando el contador básico, mejorarlo haciendo que el número de visitas se conserve, aunque el servidor se apague o se descargue el JSP de la memoria. Para ello, tener en cuenta que el número de visitas se puede guardar en un fichero con el nombre de la página (y con extensión txt, por ejemplo). Para simplificar, se puede suponer que en la página principal se define una variable "nombrePag" de tipo String con el nombre del fichero. No obstante, este se podría obtener a partir del métodogetRequestURI()
del objeto implícito request
(este método devuelve
la URI completa de la página actual, de la que habrá que extraer
el nombre del fichero).Los ejercicios de beans trabajan sobre la aplicación appbeans.
1. Implementar la clase beans.CronoBean para que sirva como "cronómetro". Cuando el bean se inicialice, debe guardar internamente el momento de su creación. El bean tendrá una propiedad segundos, que devolverá el número de segundos transcurridos desde su creación. Para calcular tiempos, se puede usar el método System.currentTimeMillis(), que devuelve el número de milisegundos transcurridos entre el instante actual y el 1/1/1970.
Probar el bean en una página llamada cronoini.jsp que lo inicialice (mostrando un mensaje HTML que indique que se está inicializando) y muestre el número de segundos transcurridos. Acceder al bean desde otra página crono2.jsp que muestre el mismo temporizador. ¿Qué ámbito debe tener el bean para funcionar correctamente?
2. (OPTATIVO) Implementar la clase beans.FechasBean, con ámbito de sesión que almacene, por un lado, la fecha y hora actuales, y por otro, la fecha y hora en que se creó.
NOTA: considerad para almacenar la fecha y hora de creación y actuales 4 variables String: dos fechaCreacion y horaCreacion con la fecha y hora de creación del bean, y otras dos fechaActual y horaActual con la fecha y hora actuales. Para obtener la fecha y hora en un momento determinado (bien sea cuando se crea el bean o cuando se llame en un momento determinado), podemos utilizar la clase java.util.Calendar, y concatenar las partes que pueda ir devolviendo para formar la fecha y la hora:
Calendar c = Calendar.getInstance(); // Fecha actual return "" + c.get(Calendar.DAY_OF_MONTH) + "/" + (c.get(Calendar.MONTH) + 1) + "/" + c.get(Calendar.YEAR); // Hora actual return "" + c.get(Calendar.HOUR) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND);
Llamar al bean desde una página ahora.jsp, que se recargue automáticamente cada 10 segundos actualizando la fecha y hora, tanto actuales como de creación del bean. Probad a abrir dos navegadores diferentes (netscape y explorer, por ejemplo), y cargar la página desde los dos. ¿Os pone la misma fecha de creación en los dos navegadores? ¿Por qué?
Abridlo desde 2 ventanas diferentes de un mismo navegador (que no sea Explorer). ¿Qué ocurre ahora con la fecha de creación? ¿Por qué?
Cambiad el ámbito del bean a aplicación y probad qué ocurre con las fechas en los dos casos anteriores. ¿Por qué?
3. (OPTATIVO) Partiendo del ejercicio 3 de JSP del contador, sustituir la forma de implementarlo por otra que utilice un bean ContadorBean, que almacene el número de visitas. Deberemos decidir qué ámbito dar al bean, y gestionar desde el mismo el almacenamiento permanente de las visitas en un fichero, por si el servidor o las páginas se cierran.