• Jueves 28 de Marzo de 2024, 20:14

Autor Tema:  Problema Con Requestdispatcher.forward()  (Leído 4994 veces)

frantic

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Problema Con Requestdispatcher.forward()
« en: Jueves 31 de Marzo de 2005, 13:04 »
0
Saludos a todos,

Tengo un inconveniente con un servlet, cuando hago un forward para ir a otra página me lanza una NullPointerException y la verdad le he dado vueltas y nada de nada no ubico el problema.
Este servlet lo que hace es utilizar un bean para verificar si un usuario existe y dar error si no existe o por el contrario crearle una sesión en caso de existir, el problema es que al realizar el forward a un jsp ubicado en un directorio llamado jso dentro de la aplicación me lanza una excepcion, les dejo el código del servlet e indico con comentarios donde se produce el error para que lo vean con mayor facilidad:

package registro.servlets;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpSession;
import registro.beans.ConnectionHelper;
import registro.beans.UsuariosHelper;
import registro.clases.Usuarios;

public class VerificacionUsuario extends HttpServlet {

public void doPost(
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
throws javax.servlet.ServletException, java.io.IOException {

Usuarios user = new Usuarios();

user.setIdUsuario(request.getParameter("idUsuario"));
user.setPassword(request.getParameter("password"));

try{
UsuariosHelper userHelp = new UsuariosHelper();
userHelp.setUser(user); //Seteamos el objeto usuario de la clase Helper

user = userHelp.buscarUsuario(); //Buscamos el usuario en la base de datos
if(user != null){
//El usuario existe ahora debemos comprobar si tiene o no acceso a la aplicación
/* Esto esta comentado ya que aun no conozco el parametro a comprobar
habria que verificar si el usuario está activo y ademas si tiene acceso a la
aplicacion Registro de Ordenes*/

//Si al final de las comprobaciones el usuario es correcto le creamos una sesión
HttpSession session = request.getSession(true); //Creamos la nueva session
/*Le colocamos el objeto user a la session asi nos aseguramos de que tendremos disponible
los datos que necesitemos de el mismo en cualquier momento*/
session.setAttribute("user", user);




//realizamos un forward a la pagina de seleccion de centro directivo



ServletContext context = getServletContext();
RequestDispatcher rd = context.getRequestDispatcher("/jsp/selecCentro.jsp");

System.out.println(context.getRealPath("/jsp/selecCentro.jsp"));
System.out.println(context.toString());

//rd.include(request, response);



rd.forward(request, response);

}
else{
//en el caso de que el usuario o el password sean incorrectos
throw new Exception("El usuario y/o el password son incorrectos");
}
}catch(Exception ex){
//Si ocurre alguna excepcion debemos enviar el mensaje a una pagina de error adecuada

RequestDispatcher rd = request.getRequestDispatcher("/jsp/error.jsp");


//Seteamos el mensaje de error
String title = "Error de búsqueda de usuario";
String msg = "Imposible encontrar el usuario";

//Agregamos el mensaje que proviene de la Exception que se disparo
String exMsg = ex.getMessage();

//Establecemos una url de vuelta a la página anterior para el usuario
String backUrl = "login.jsp";
String urlName = "Login";

this.log(ex.toString()); //Generamos log en el servidor

ex.printStackTrace(); //para visualizar la traza de la excepción en consola

//Seteamos los atributos
request.setAttribute("title", title);
request.setAttribute("msg", msg);
request.setAttribute("exMsg", exMsg);
request.setAttribute("backUrl", backUrl);
request.setAttribute("urlName", urlName);
rd.forward(request, response); //Justo en esta linea es disparado el error

}
}

public void doGet(
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
throws javax.servlet.ServletException, java.io.IOException {
}

}



Hice pruebas de imprimir la ruta a ver si era eso pero al parecer esta perfecta la ruta que me arroja por consola es...
C:\Archivos de programa\Apache Tomcat 4.0\webapps\RegistroOrdenes\jsp\selecCentro.jsp

Si alguien me puede dar una luz con esto le estare muy agradecido....
Saludos.-

frantic

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Problema Con Requestdispatcher.forward()
« Respuesta #1 en: Jueves 31 de Marzo de 2005, 13:17 »
0
Si sirve de algo aquí les dejo el StackTrace....
Saludos
*****************
java.lang.NullPointerException
   at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:752)
   at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:431)
   at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:355)
   at registro.servlets.VerificacionUsuario.doPost(VerificacionUsuario.java:83)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
   at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
   at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
   at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
   at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
   at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
   at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
   at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
   at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
   at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
   at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
   at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
   at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
   at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
   at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
   at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
   at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
   at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
   at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
   at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
   at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
   at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
   at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
   at java.lang.Thread.run(Thread.java:498)

Malber

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Problema Con Requestdispatcher.forward()
« Respuesta #2 en: Martes 5 de Abril de 2005, 08:31 »
0
Yo veo que tienes dos  RequestDispatcher y que uno lo has obtenido a partir del context y otro a partir del request... seguramente uno de ellos te está devolviendo un objeto nulo y cuando intentas llamar al método forward, pues te da ese error.
De todas maneras puedes probar algo así para que te quede claro:

 (justo debajo de cada RequestDispatcher rd = .... .getRequestDispatcher())

if (rd == null){
   System.out.println (" Me devolvio nulo a partir del.. request / context ");
}

y luego mirasla consola o el log de salida y ves en cual de los RequestDispatcher te está devolviendo nulo. Justo encima de la stackTrace debe salir.

Espero que te sirva.