Práctica 10: Sesión en Servlets Ejercicio 10.1: Servlets con gestión de sesión Instalar, probar y entender el funcionamiento de los siguientes servlets contenidos en el fichero de fuentes del capitulo: http://www.tecnun.es/asignaturas/informat2/Material/Libro/sesiones.zip (Descomprimir dicho fichero en el directorio webapps para que se cree la estructura de directorios de la aplicación “sesiones”.) El servlet ShoppingCart.java guarda en campos ocultos (type = “hidden”) los valores introducidos por el usuario. El servlet ShowSession.java muestra como crear una sesión y guardar y recuperar datos en la misma. Ejercicio 10.2: Escritura de valores en una sesión Probar el funcionamiento de SessionServlet.java y realizar los siguientes cambios: En SessionServlet.java añadir a la salida de la página HTML un formulario que recoja el valor de dos variables, una conteniendo el nombre de un atributo de una sesión y la otra el valor de dicho atributo. Estas variables se deben enviar al mismo servlet. Para crear el formulario añadir después de: out.println("</table></center>"); las líneas: out.println("<H2>Envío de atributo al servlet</H2>"); out.println("<FORM action=\"SessionServlet\" method=\"GET\">"); out.println("<INPUT type=\"text\" size=\"20\" name=\"dataname\">"); out.println("<BR>"); out.println("<INPUT type=\"text\" size=\"20\" name=\"datavalue\">"); out.println("<BR>"); out.println("<INPUT type=\"submit\">"); out.println("</FORM>"); En el mismo servlet, una vez obtenida la sesión, se deben leer las dos variables anteriores y si las dos no son nulas añadir el nuevo atributo con su valor a la sesión. Para leer los parámetros y crear el atributo, añadir después de: HttpSession session = request.getSession(true); las líneas: String dataName = request.getParameter("dataname"); String dataValue = request.getParameter("datavalue"); if (dataName != null && dataValue != null) { session.setAttribute(dataName, dataValue); } Llamar al servlet desde el navegador: http://localhost:8080/sesiones/SessionServlet Comprobar que los nuevos atributos que se van añadiendo se muestran en la lista de atributos, así como que se puede cambiar el valor de un atributo existente. CAMPUS TECNOLÓGICO DE LA UNIVERSIDAD DE NAVARRA. NAFARROAKO UNIBERTSITATEKO CAMPUS TEKNOLOGIKOA Paseo de Manuel Lardizábal 13. 20018 Donostia-San Sebastián. Tel.: 943 219 877 Fax: 943 311 442 www.tecnun.es [email protected] 38 Informática II Ejercicio 10.3: Guardar distintas solicitudes de un mismo usuario Se trata de simular el funcionamiento de una aplicación, “reservaLibros”, que acepta reservas de libros (por ejemplo para su posterior compra o préstamo). La lista de libros que se pueden reservar se almacena en un fichero lista.txt que contiene la información del código, título y autor de cada libro. Cada libro se almacena en una fila del fichero, separados los campos por un tabulador. El objetivo es mostrar esta relación de libros e ir añadiéndolos a una lista de reservas del usuario. Este fichero y los servlets iniciales se encuentran en el fichero de la práctica. 10.3.1. Servlet que muestra la relación de libros Se dispone de un servlet, MostrarLibros.java, que muestra los libros contenidos en el fichero libros.txt. Se llama al servlet sin ningún parametro, con lo que se muestran todos los libros del fichero. http://localhost:8080/reservaLibros/MostrarLibros 10.3.2. Servlet que muestra la relación de libros con posibilidad de selección de libros A partir del servlet MostrarLibros.java anterior, realizar el servlet MostrarLibrosCheck.java con las siguientes modificaciones sobre el original: • La tabla debe estar incluida en un formulario html (<FORM …) que llame al servlet ya realizado RealizarReserva.java • Cada línea debe tener un checkbox que en el caso de marcarse envía el ISBN del libro • Añadir un botón dentro del formulario que realice la llamada al servlet (input de tipo submit). Probar el servlet realizado. La salida originada por el servlet MostrarLibrosCheck.java es la que se muestra en la Figura 10.1. Figura 10.1. Relación de libros para reservar 10.3.3. Servlet que realiza la reserva de un libro seleccionado Se dispone del servlet RealizarReserva.java que guarda en la sesión el código de los libros reservados. Comprobar que con 2 navegadores distintos, se guardan valores distintos en cada sesión, no así desde 2 pestañas o 2 ventanas abiertas desde el mismo navegador. Este servlet se llama cuando se pulsa “Submit Query” en el formulario que muestra el servlet MostrarLibrosCheck.java (ver Figura 10.1). 10.3.4. Registro de un usuario El Servlet RealizarReserva.java busca el valor del atributo “user” y si no es nulo, lo muestra en lugar del ID de la sesión. Realizar un servlet que ponga este atributo con el valor que el usuario defina en un formulario. Para ello hay que crear un serlet de nombre RegistroUsuario.java que responde a la llamada del formulario registroUsuario.html. A continuación se resumen los servlets que aparecen en la práctica con las características generales de cada uno de ellos: Aplicación sesiones sesiones sesiones reservaLibros reservaLibros reservaLibros reservaLibros Servlet ShoppingCart ShowSession SessionServlet MostrarLibros MostrarLibrosCheck RealizarReserva RegistroUsuario Formulario HttpSession Si No Si No Si No No No Si Si No No Si Si Requiere modificación No No Si No Si No Si