Hola, tengo un proyecto en NetBeans, con una pagina "index.jsp" donde se realiza la peticion a un servidor Tomcat de que ejecute un Servlet AutentificationServlet que inicia sesión impidiendo el paso a usuarios no registrados. Eso está terminado y funciona. Voy a ponerlo por si alguien lo necesitara y para que se entienda lo que estoy haciendo.
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:
<%@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>
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:
Código:
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>
}
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.
--------------------------------------------------------------------------
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 %> >