Mostrando entradas con la etiqueta servlets. Mostrar todas las entradas
Mostrando entradas con la etiqueta servlets. Mostrar todas las entradas

miércoles, 12 de junio de 2013

Ejercicios de clase. Clase 10: aplicación web de noticias (EJB Message-Driven + EJB de sesión Singleton + JPA + Servlets)

 

Sigue los pasos del proyecto propuesto por la documentación de NetBeans Creating an Enterprise Application with EJB 3.1 consistente en una sencilla aplicación web que permite añadir noticias (título + contenido) a un listado que se almacena en una base de datos. Asimismo, dispone de un contador para saber en cada momento el número de sesiones abiertas. La aplicación dispone de los siguientes elementos:

 

  • Una clase de entidad NewsEntity para soportar la persistencia de las noticias.
  • Un EJB Message-Driven llamado NewMessage que se encarga de leer los mensajes que uno de los servlets (PostMessage) va depositando en una cola gestionada por JMS, para luego guardarlos en la base de datos.
  • Una clase abstracta AbstractFacade y una clase derivada de ella, NewsEntityFacade, que nos proporciona una instancia de EntityManager para permitir las operaciones habituales sobre la base de datos a nuestra clase entidad.
  • Un EJB de sesión singleton, SessionManagerBean, que actúa como escuchador de los eventos de creación y destrucción de sesiones para mantener actualizado un contador. (Los beans de sesión singleton son una novedad en EJB 3.1 así como que se permita que este EJB esté incluido en el módulo web en lugar de situarse en el módulo EJB)
  • Un servlet ListNews que genera la interfaz principal de la aplicación donde se muestra el listado de las noticias almacenadas actualmente, un enlace que nos lleva a comunicarnos con otro servlet (PostMessage) para añadir una noticia nueva y el número de sesiones abiertas actualmente.
  • Un servlet PostMessage que se encarga de mostrar el formulario para que el usuario pueda enviar una nueva noticia al servidor. El modo de envío es asíncrono, agregándolo a la cola de mensajes que el EJB Message-Driven luego irá procesando.
(Puedes descargar el proyecto empleando el enlace de la propia documentación)


domingo, 2 de junio de 2013

Ejercicios de clase. Clase 5: servlets asíncronos.

En el siguiente enlace podrás descargar un proyecto web que cuenta con una sencilla página de inicio con un enlace a un servlet. Dicho servlet simula una tarea de 10 segundos de duración antes de producir la salida ¡HOLA, MUNDO! Este hecho provoca que, de cara al usuario, parezca que el servlet no responde debido a algún posible fallo cuando, en realidad, está en pleno proceso. Para evitar esta situación, a partir de la versión 3.0 se pueden crear servlets asíncronos que generen nuevos hilos de ejecución para evitar que los accesos lentos a algún recurso interfieran en la interacción con el usuario.



Modifica el servlet para que se comporte de forma asíncrona, creando un hilo que atienda la tarea lenta mientras el hilo principal del servlet atiende de inmediato la interacción con el usuario, tal y como se muestra en el siguiente diagrama:



Modifica el servlet para que cuando termine la tarea asíncrona capture un evento que le permita comunicarle este hecho al usuario, tal y como se muestra en la siguiente figura (simbólicamente, sólo mostraremos un mensaje en la consola de salida cuando se complete la tarea)


Consola del servidor



Ejercicios de clase. Clase 5: filtros y wrappers.

Crea un proyecto web que contenga una página de inicio "index.jsp" que incluya dos hipervínculos a dos servlets, "Servlet1" y "Servlet2". Cada servlet se limitará a mostrar su nombre y contendrá un enlace para volver a la página de inicio. Una vez que la navegación entre la página de inicio y los servlets sea correcta:


La página de inicio index.jsp

a) Crea un filtro que incremente un contador único cada vez que se accede a uno de los servlets. El valor del contador será enviado al servlet al que inicialmente iba dirigida la solicitud interceptada por el filtro para que éste muestre dicho valor en la salida.


Salida de uno de los servlets cuando es invocado desde el hipervínculo de la página de inicio

b) Amplía el filtro del apartado anterior para que disponga de dos parámetros iniciales, "frecuenciaPublicidad" y "mensajePublicitario" de manera que cada cierto número de accesos a los servlets (indicado por "frecuenciaPublicidad") se muestre, a mayores, la cadena de texto almacenada en "mensajePublicitario".


Visualización de "mensajePublicitario" cada 5 accesos ("frecuenciaPublicidad) a cualquiera de los servlets



jueves, 30 de mayo de 2013

Ejercicios de clase. Clase 4: ejemplo de uso de filtros para controlar el acceso a recursos

Emplea un filtro para controlar el acceso a un servlet. Para ello, establece un parámetro de inicio del filtro con el valor de la contraseña de acceso. El cliente envía la contraseña de acceso desde el cuadro de texto de un formulario al servlet y el filtro intercepta la comunicación comprobando si la contraseña es correcta. En caso de que no lo sea responderá con un código de error HTTP 401 (Unauthorized) que nos llevará a una página JSP de error donde se visualizará la razón del rechazo del acceso y nos mostrará de nuevo el cuadro de texto para reintentarlo.


El usuario ha de introducir la contraseña para acceder al Servlet

Si la contraseña es incorrecta se nos insta a reintentar el acceso.

Si la contraseña es la esperada ("123" en el ejemplo) accedemos al servlet, que nos muestra la salida.


Diapositivas. Clase 4. Servlets (apartado de filtros)

(A partir de la diapositiva 57)

miércoles, 29 de mayo de 2013

Ejercicio de clase. Clase 3: Sumador con reseteo.

Implementa una aplicación web que permita ir enviando al servidor un sumando cada vez, de manera que con cada solicitud devuelva la suma acumulada durante las sucesivas peticiones. Para poder cancelar la secuencia y volver a empezar debe disponer de un enlace para resetear.

 

Formulario de envío de los sucesivos valores
 

Página JSP mostrando el resultado de la suma acumulada


Descargar solución (proyecto NetBeans para GlassFish)

Ejercicios de clase. Clase 3: Piedra, papel, tijeras.


Siguiendo un esquema Modelo-Vista-Controlador como el visto en clase que emplee Java Beans,  páginas JSP y Servlets para cada rol, implementa una aplicación web que emule el clásico juego de "Piedra, papel, tijeras". Cuando el usuario accede al sitio por primera vez obtiene un formulario donde puede escoger entre una de esas tres opciones. Después de enviar el formulario, en el lado del servidor se generará un valor aleatorio que se corresponderá también con uno de esos tres conceptos. Tras comprobar quién ha ganado (el cliente o el servidor) se mostrará el resultado al cliente haciendo constar las partidas ganadas que cada uno acumula y las jugadas ganadas por ambos durante la partida actual.

El número máximo de jugadas por partida será de 5 pero presumiblemente este valor podrá ser modificado en un futuro por lo que no deberá ser una constante que forme parte del código sino que deberá ser un parámetro recogido del descriptor de despliegue. Sería conveniente también que el usuario de la aplicación dispusiese de un enlace que le permitiese cancelar el juego y empezar de nuevo si así lo desea.

TIP:

Para conseguir un número entero entre M y N con M menor que N, debemos usar esta fórmula


    int valorEntero = Math.floor(Math.random()*(N-M+1)+M);


 
 
 
 
 Descargar solución propuesta (proyecto NetBeans para GlassFish)
 

 
Alternativa para la inicialización del parámetro del número de jugadas por partida empleando anotaciones en lugar de hacerlo en el descriptor de despliegue:



 

martes, 28 de mayo de 2013

Ejercicios de clase. Clase 2: Mejora al ejercicio 1 mediante un servlet

a) Intenta mejorar la solución adoptada en el ejercicio 1 mediante la separación entre las partes de vista, control y lógica de operaciones. Para ello implementa un servlet que actúe como controlador recibiendo el valor numérico del cliente y que, apoyándose en un Java Bean, le pase el control a una página JSP que visualice el resultado de la raíz cuadrada del valor a partir de las propiedades del Java Bean, tal y como se muestra en la figura.


 

b) Empleando la clase Cookie y los métodos para leer y escribir cookies de los objetos request y response añade la funcionalidad al programa anterior de visualizar el número de veces que el cliente ha efectuado peticiones sobre el servidor durante su sesión. 

 
Con cada nuevo cálculo el servlet controlador actualiza el contador de peticiones

 

Descargar solución (proyecto NetBeans para GlassFish)


Diapositivas. Clases 2, 3 y 4: Servlets y JSP