Se ha implementado como Modelo + vista + controlador
modelo -> clase Fachada + clases del modelo del problema.
vista -> paginas .jsp + javascript + html.
controlador -> Servlets Java.
Este es el codigo de "index.jsp"
Código:
Cuando se realiza la petición mediante la pulsación de alguno de los botones, y se hace el "submit" el servidor ejecuta action="AutentificationServlet", cuyo codigo es el siguiente:<%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> ... ... <body> ... <form method="post" action="AutentificationServlet"> <input type="text" name="dni" size="15" maxlength="8"></p> <button name="entrar" style="width: 180px; height: 31px" type="submit"> ... </body>
Código:
Ok, con esto, cuando el servidor ejecuta el HTTPServlet AutentificationServlet, devuelve en el responde el atributo "dni" y carga la pagina "interfaz.jsp" en la cual podrá recuperarse la información del response, es decir el "dni" para usarlo en otra operación del modelo.public class AutentificationServlet extends HttpServlet { private String dni; Gestor gestor; //Clase fachada del modelo. /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. * @param request servlet request * @param response servlet response */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { nombre = new String(); String url= "index.jsp"; HttpSession sesion = request.getSession(); sesion.setMaxInactiveInterval(-5); //variable que almacena los mensajes de error para devolverlos a la vista List errores=new ArrayList(); //obtener parametros del request this.dni=(String)request.getParameter("dni"); try{ if((this.dni == null) || (this.dni.equals(""))){//numero minimo digitos dni errores.add("Debe incluir su dni para entrar"); } else{ Map parametros= request.getParameterMap(); if(parametros.containsKey("entrar")){ url = "interfaz.jsp"; //url de la interfaz a la que se quiere acceder gestor.identificarProfesor(this.dni); //confirmacion de que el usuario esta registrado en el modelo } }//Fin else if(errores.isEmpty()){ //añadir datos necesarios para el resto de lasesion sesion.setAttribute("dni", dni); request.setAttribute("dni", dni); RequestDispatcher view = request.getRequestDispatcher(url); view.forward(request, response); } else{ //igual pero se le pasa el control a ErroresServlet con errores request.setAttribute("errores",errores); RequestDispatcher view = request.getRequestDispatcher("errores.jsp"); view.forward(request, response); } } catch(RuntimeException e){//captura cualquier excepcion no esperada /*igual que antes se le pasa el control a ErroresServlet con e.getMessage()*/ errores.add("Excepcion en tiempo de ejecucion (Autentication)\n" + e.getMessage()); errores.add(e.getLocalizedMessage()); request.setAttribute("errores", errores); RequestDispatcher view = request.getRequestDispatcher("errores.jsp"); view.forward(request, response); } } // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> /** Handles the HTTP <code>GET</code> method. * @param request servlet request * @param response servlet response */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** Handles the HTTP <code>POST</code> method. * @param request servlet request * @param response servlet response */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** Returns a short description of the servlet. */ public String getServletInfo() { return "Short description"; } // </editor-fold> }
--------------------------------------------------------------------------
Ahora mi pregunta es:
Cómo hago para que en "interfaz.jsp" haya una opción para cerrar la sesión y regrese a "index.jsp" impidiendo que una vez cerrada, usando los botones "Siguiente" y "Anterior" del navegador, teniendo en cuenta que los botones estan hechos con animación en javascript (con imágenes), y que el evento "onClick" ejecuta el servlet que se necesite. ¿Es necesario ejecutar un nuevo Servlet "Cerrar Sesión"?, ¿Y usando un enlace normal html?
NOTA: para el seguimiento de la sesion utilizo en las paginas jsp variables ocultas tipo:
Código:
<% String dniP=(String)request.getAttribute("dni"); %> <input type=hidden name=dniP value= <%= dniP %> >