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

¿servlet llama a otro servlet y éste le responde?

Estas en el tema de ¿servlet llama a otro servlet y éste le responde? en el foro de Java en Foros del Web. Hola a todos, estoy un poco atascado y os agradeceria muchisimo que me echarais una mano. Estoy trabajando en una aplicacion web con JSP y ...
  #1 (permalink)  
Antiguo 19/10/2009, 12:09
 
Fecha de Ingreso: octubre-2009
Mensajes: 1
Antigüedad: 14 años, 6 meses
Puntos: 0
¿servlet llama a otro servlet y éste le responde?

Hola a todos, estoy un poco atascado y os agradeceria muchisimo que me echarais una mano. Estoy trabajando en una aplicacion web con JSP y servlets y estoy un poco atascado. Os pongo un poco en situacion...

Tento dos servlets ejecutando en el tomcat. Uno es "GestorPeticiones" y otro es "ModuloConocimiento". "GestorPeticiones" se encarga de recibir las peticiones del cliente y enviarselas al otro servlet, "ModuloConocimiento", que despues de una serie de consultas, devuelve una respuesta al "GestorPeticiones". Mi problema es que el servlet "ModuloConocimiento" no puede contestar al Servlet que le ha llamado, que es "GestorPeticiones"(o al menos no me deja). Os pongo un poco de codigo de ambos servlets:

GESTORPETICIONES: (el servlet que llama)
Código:
....
int Peticion = Integer.parseInt(request.getParameter("Numero"));

switch (Peticion) {

   case 1:

   RequestDispatcher dispatcher= getServletContext().getRequestDispatcher("/ModuloConocimiento");
   
   if (dispatcher!=null){
      dispatcher.forward(request, response);
   }
   break;
....

MODULOCONOCIMIENTO: ( éste pretende contestar al primer servlet)

Código:
...
int Peticion = Integer.parseInt(request.getParameter("Numero"));

switch (Peticion) {

  case 1:

   request.removeAttribute("TipoPeticion");
   request.setAttribute("TipoPeticion", "Respuesta"); 
   RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/GestorPeticiones");

   if (dispatcher != null) {
      dispatcher.forward(request, response);
   }
....
El primer forward se ejecuta correctamente, pero es en el segundo forward ( cuando el segundo servlet intenta devolver el control al primero), cuando el servidor se queda tonto y no funciona. Es la primera vez que hago nada con servlets asi que es muy probable que esté cometiendo un error garrafal. Os estaría muy agradecido si pudierais darme una solución a mi problema.

Muchas gracias a todos!.
  #2 (permalink)  
Antiguo 19/10/2009, 13:14
Avatar de cptanalatriste  
Fecha de Ingreso: octubre-2008
Ubicación: Lima, Perú
Mensajes: 118
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: ¿servlet llama a otro servlet y éste le responde?

A ver:

Según veo, el procesamiento de la solicitud del usuario (el Request), empieza en GestorPeticiones. Este procesa el request hasta cierto punto donde delega el request a ModuloConocimiento para que continué el procesamiento. Esto lo hace mediante forward:

if (dispatcher!=null){
dispatcher.forward(request, response);
}

Hasta ahí, estamos bien. ModuloConocimiento toma control del request, lo manipula y devuelve el control a GestorPeticiones. GestorPeticiones recibe el request, y vuelve a cedérselo a ModuloConocimiento , y esto una y otra vez hasta que tu contenedor colapsa xD.

Para resolver esto, tienes que confirmar la respuesta al cliente (response) en alguno de los servlets. Lo ideal sería que lo hicieras en ModuloConocimiento, y ya no andes dándole tantas vueltas al request.

Espero sea de ayuda,
__________________
Carlos G. Gavidia
Sun Certified Professional
IBM Certified Solution Designer
http://certified-es.blogspot.com/
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 04:07.