Foros del Web » Programación para mayores de 30 ;) » Java »

Problema hacer forward desde un servlet, no redirecciona a la pagina jsp

Estas en el tema de Problema hacer forward desde un servlet, no redirecciona a la pagina jsp en el foro de Java en Foros del Web. Hola, quiero que desde un servlet donde se comprueba si un usuario esta registrado una vez que se compruebe esto se redireccione desde el servlet ...
  #1 (permalink)  
Antiguo 19/09/2009, 14:09
 
Fecha de Ingreso: febrero-2009
Mensajes: 60
Antigüedad: 15 años, 2 meses
Puntos: 0
Problema hacer forward desde un servlet, no redirecciona a la pagina jsp

Hola, quiero que desde un servlet donde se comprueba si un usuario esta registrado una vez que se compruebe esto se redireccione desde el servlet a la pagina jsp correspondiente, esto no lo hace se queda en la direccion del servlet y no aparece nada,yo pensaba que estaba mal como lo hacia, que era de la siguiente forma:

en el metodo post del servlet hago esto:

HttpSession sesionOk= request.getSession();
String acceso="";
empresa e=new empresa();
e.setLogin(request.getParameter("login_emp"));
e.setPassword(request.getParameter("pass_emp"));

if(e.ExisteEmpresaRegistrada()){
sesionOk.setAttribute("acceso","ok");
request.getRequestDispatcher("/Entrar_Emp.jsp").forward(request, response);
}

pues bien al depurarlo despues de ejecutar la sentencia request.getRequestDispatcher("/Entrar_Emp.jsp").forward(request, response);

19-sep-2009 23:11:12 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() para servlet ServletLoginEmp lanz� excepci�n
java.lang.IllegalStateException: No puedo reenviar despu�s de que la respuesta se haya llevado a cabo.
at org.apache.catalina.core.ApplicationDispatcher.doF orward(ApplicationDispatcher.java:312)
at org.apache.catalina.core.ApplicationDispatcher.for ward(ApplicationDispatcher.java:302)
at Servlet.ServletLoginEmp.doPost(ServletLoginEmp.jav a:95)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:717)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFil ter.doFilter(MonitorFilter.java:390)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11Conn ectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run( JIoEndpoint.java:447)


porfavor ayudenme, gracias

Última edición por Soynueva; 19/09/2009 a las 15:22
  #2 (permalink)  
Antiguo 20/09/2009, 00:51
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Problema hacer forward desde un servlet, no redirecciona a la pagina jsp

Hola,

No puedo reenviar después de que la respuesta se haya llevado a cabo.

Posiblemente:

Normalmente significa que en algún lugar del código anterior al .forward ya se ha enviado parte del documento HTML. También en algunos casos se puede solucionar aumentando el tamaño del buffer de salida del JSP.

Saludos,

Última edición por HackmanC; 20/09/2009 a las 00:56
  #3 (permalink)  
Antiguo 05/10/2009, 17:52
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Problema hacer forward desde un servlet, no redirecciona a la pagina jsp

Hola,

Definitivamente es imposible saber con exactitud el motivo de la excepción, principalmente porque no sabemos cual es el código completo anterior a la excepción. Pero posiblemente te sea de alguna ayuda ...

Cuando el servidor ya ha enviado datos al cliente (browser), ya no puede 'cambiar la respuesta', porque ya envió 'parte de la respuesta'.

Por ejemplo:

Código Java:
Ver original
  1. protected void processRequest(HttpServletRequest request, HttpServletResponse response)
  2.     throws ServletException, IOException {
  3.         response.setBufferSize(0);
  4.         response.setContentType("text/html;charset=UTF-8");
  5.         request.getSession().setAttribute("Hello", "World!");
  6.         PrintWriter out = response.getWriter();
  7.         out.println("<html>");
  8.         out.println("<head>");
  9.         out.println("<title>Servlet redireccion</title>");
  10.         out.println("</head>");
  11.         out.println("<body>");
  12.         out.println("<h1>Servlet redireccion at " + request.getContextPath () + "</h1>");
  13.         for (int i = 0; i < 1000; i++) {
  14.             out.println("<p>&nbsp;</p>");
  15.         }
  16.         request.getRequestDispatcher("/hello.jsp").forward(request, response);
  17.         out.println("</body>");
  18.         out.println("</html>");
  19.         out.close();
  20.     }

En este ejemplo, genera la excepción:

Código:
GRAVE: StandardWrapperValve[redireccion]: PWC1406: Servlet.service() for servlet redireccion threw exception
java.lang.IllegalStateException: PWC1227: Cannot forward after response has been committed
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:395)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:377)
Porque se genera demasiada 'data' (en el ciclo for) y el servidor envía por pedacitos al cliente, cuando llega al forward, ya no puede cambiar la respuesta, porque el cliente ya recibió como 100 <p>.

Podrías revisar que no se genere nada en la respuesta ni en el encabezado (headers), antes de hacer el forward o include (en el caso del include creo que no existe este problema, que es global de cualquier lenguage de programación Web, sucede de forma parecida en PHP, ASP, etc).

Saludos,
  #4 (permalink)  
Antiguo 07/10/2009, 16:39
 
Fecha de Ingreso: febrero-2009
Mensajes: 60
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Problema hacer forward desde un servlet, no redirecciona a la pagina jsp

No creo que sea problema del buffer puesto que la pagina a la que hago el forward es una pagina sin nada, quiero decir que es una pagina de las que te crea inicialmente netbeans de tipo JSP solo tiene muestra un mensaje de "HELLO WORLD"
  #5 (permalink)  
Antiguo 07/10/2009, 20:11
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Problema hacer forward desde un servlet, no redirecciona a la pagina jsp

Hola,

Cita:
Iniciado por Soynueva Ver Mensaje
... la pagina a la que hago el forward es una pagina sin nada, ...
No me refería a la página hacia donde te diriges, sino a la página que inicia el forward. Como se puede observar en el ejemplo anterior, yo también usé una página 'Hello Word' para demostrarlo.

Ahora bien ... normalmente me equivoco un 99.99% de la veces y lo siguiente está fuera de los límites de lo que puedo explicar, pero posiblemente puedas llegar a alguna conclusión.

El mensaje de error:

applicationDispatcher.forward.ise = No puedo reenviar despu\u00E9s de que la respuesta se haya llevado a cabo.

En inglés:

applicationDispatcher.forward.ise=Cannot forward after response has been committed

El error se genera en:

org.apache.catalina.core.ApplicationDispatcher.doF orward(ApplicationDispatcher.java:312)
(En mi caso se genera en otra línea porque uso otra versión)

La línea 312 de ApplicationDispatcher.java:

Código Java:
Ver original
  1. ....
  2. 310        // Reset any output that has been buffered, but keep headers/cookies
  3. 311        if (response.isCommitted()) {
  4. 312            throw new IllegalStateException
  5. 313                (sm.getString("applicationDispatcher.forward.ise"));
  6. 314        }
  7. 315        try {
  8. 316            response.resetBuffer();
  9. ....

Cuando la respuesta ya ha sido enviada (isCommitted()) entonces genera esa excepción.

Saludos,
  #6 (permalink)  
Antiguo 07/10/2009, 20:52
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Problema hacer forward desde un servlet, no redirecciona a la pagina jsp

Hola,

Me hizo falta mencionar que al modificar el buffer ...

Código Java:
Ver original
  1. protected void processRequest(HttpServletRequest request, HttpServletResponse response)
  2.     throws ServletException, IOException {
  3.         response.setBufferSize(8192 * 16); // <--  **** BUFFER ****
  4.         response.setContentType("text/html;charset=UTF-8");

... el anterior servlet funciona correctamente, consume mucha memoria, pero no genera el error en mención.

Saludos,
  #7 (permalink)  
Antiguo 08/10/2009, 04:12
 
Fecha de Ingreso: febrero-2009
Mensajes: 60
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Problema hacer forward desde un servlet, no redirecciona a la pagina jsp

Hola, intente aumentar el tamaño del buffer como me dijiste pero el error sigue estando. He intentado cargar el codigo directamente desde tomcat sin la aplicacion de netbeans, para ver si el problema viene de hay, y ahora me aparecen los siguientes errores cuando llama al servlet ServletLoginUsr.

descripci�n El servidor encontr� un error interno () que hizo que no pudiera rellenar este requerimiento.

excepci�n

javax.servlet.ServletException: El Arropador (Wrapper) no puede hallar clase de servlet Servlet.ServletLoginUsr o una clase de la que depende
org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:286)
org.apache.coyote.http11.Http11AprProcessor.proces s(Http11AprProcessor.java:857)
org.apache.coyote.http11.Http11AprProtocol$Http11C onnectionHandler.process(Http11AprProtocol.java:56 5)
org.apache.tomcat.util.net.AprEndpoint$Worker.run( AprEndpoint.java:1509)
java.lang.Thread.run(Unknown Source)

causa ra�z

java.lang.ClassNotFoundException: Servlet.ServletLoginUsr
org.apache.catalina.loader.WebappClassLoader.loadC lass(WebappClassLoader.java:1387)
org.apache.catalina.loader.WebappClassLoader.loadC lass(WebappClassLoader.java:1233)
org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:286)
org.apache.coyote.http11.Http11AprProcessor.proces s(Http11AprProcessor.java:857)
org.apache.coyote.http11.Http11AprProtocol$Http11C onnectionHandler.process(Http11AprProtocol.java:56 5)
org.apache.tomcat.util.net.AprEndpoint$Worker.run( AprEndpoint.java:1509)
java.lang.Thread.run(Unknown Source)
  #8 (permalink)  
Antiguo 08/10/2009, 13:09
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Problema hacer forward desde un servlet, no redirecciona a la pagina jsp

Hola,

Cita:
Iniciado por Soynueva Ver Mensaje
... He intentado cargar el codigo directamente desde tomcat sin la aplicacion de netbeans,
Eso generó este error ...

Cita:
Iniciado por Soynueva Ver Mensaje
... El Arropador (Wrapper) no puede hallar clase de servlet Servlet.ServletLoginUsr o una clase de la que depende ...
... no puede hallar la clase por algún motivo (posiblemente el deploy del war no lo hiciste correctamente o tu instalación de tomcat tiene algún problema).


Creo que este es uno de los 99.99% casos en los que me equivoco Posiblemente alguien con mayor experiencia pueda ayudarte a resolver ese problema,

Saludos,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:41.