Servlet de Java: reenvío/redireccionamiento desde la subpágina

Estoy trabajando en un proyecto en el que ejecuto servlets empaquetados en una guerra que escucha solicitudes y completa un div extranjero en una página separada. Se realiza una solicitud inicial al servlet (a) y, si hay datos para mostrar, representa ese HTML. Si NO hay datos, pasa una cadena de consulta a otro servlet para manejar la solicitud y luego presenta una página con opciones para elegir.

Estoy ejecutando Tomcat 6 con Windows Server 2008.

Pero me encuentro con dos problemas:

  1. Cuando uso la redirección, no obtengo respuesta del servlet al que se está redirigiendo. Tengo algunas alertas de JavaScript que nunca son llamadas por (b)
    servlet ESTOY usando rutas relativas y confirmo que el enlace es correcto en los registros.
  2. Cuando copio ese enlace en el paso 1 en una nueva ventana, veo los resultados. Pero no cuando está incrustado en otra página que realiza la solicitud. ¿Por qué sería eso? ¿Es posiblemente una limitación de la página de host y no poder generar la respuesta?
  3. Cuando uso un reenvío, veo la respuesta del servlet, pero luego se abre una nueva ventana. Alejando así a la persona de la página original. Esto sería genial si los resultados se muestran en la misma página.

¿Cuál es la mejor práctica para asegurar que puedo "redireccionar" desde una llamada de servlet inicial a otro servlet usando el objeto de respuesta de ese primer servlet?

preguntado el 22 de mayo de 12 a las 18:05

¿Puedes aclarar qué quieres decir con "un div extranjero"? Su respuesta tiene que ser al mismo cliente que hizo la solicitud. Además, los servlets (que se ejecutan en el servidor) no pueden llamar a Javascript (que se ejecuta en el navegador).

Básicamente, tenemos un sitio web, www.isendrequests.com, que hace una llamada en JS al cargar mi servlet y luego presenta un div en la página con el HTML que devuelvo en la solicitud. -

1 Respuestas

Una redirección devuelve una respuesta HTTP 302 con la nueva URL en Location cabecera con la que el cliente debe tratar. Básicamente, su código JS debe verificar el código de estado de respuesta si es 302 y luego extraer el Location encabezado y luego vuelva a enviar una nueva solicitud en él. Repita esto hasta que el código de estado de respuesta sea 200.

Que funcione al pegar la URL en la barra de direcciones del navegador se debe a que el navegador ya sabe cómo manejar las respuestas 3nn correctamente. Si abre el rastreador de tráfico de red en el conjunto de herramientas del desarrollador web del navegador, verá que se ha activado una segunda solicitud GET en la nueva URL.

Otra forma, si los servlets se ejecutan en el mismo contenedor, es simplemente usar RequestDispatcher#forward() en lugar de HttpServletResponse#sendRedirect().

contestado el 22 de mayo de 12 a las 18:05

Gracias BalusC. Puedo dejar que el servidor maneje el reenvío usando RequestDispatcher, pero muestra una página completamente diferente. ¿Alguna idea sobre cómo hacer que el reenvío represente la misma página que hizo la llamada? - user82302124

Aparentemente, el servlet de reenvío todavía está escribiendo en la respuesta cuando no debería hacerlo. ¿Está seguro de que está regresando correctamente después del reenvío o de que ha puesto el resto del código en un else? - BalusC

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.