tag lib fmt etiquetas jsp redirect servlets forward

lib - Diferencia entre JSP hacia adelante y redirigir



jsp tag libraries (7)

Esta pregunta ya tiene una respuesta aquí:

Por favor, explique la diferencia entre jsp:forward y redirect .
¿Qué está pasando en cada caso?


Cuando reenvía una solicitud,

-los objetos de solicitud y respuesta son transferidos. -url permanece igual.

Cuando redirige la solicitud a otro JSP / servlets,

-los objetos de solicitud y respuesta no se transfieren a un nuevo objeto. -Url cambia al directorio de la nueva página.


El redireccionamiento también es más lento en comparación con el reenvío porque debe pasar por el navegador y esperar a que el navegador realice una nueva solicitud y, por lo tanto, hace que los objetos del alcance de la solicitud no estén disponibles después de la redirección.


He escuchado una explicación interesante de redirigir y reenviar. Imagine que necesita algún servicio de su amigo. No importa qué servicio. Supongamos que su amigo no puede ayudarlo, pero sabe quién puede hacerlo.

Redirigiría su solicitud si le dice: "No puedo manejar esto, pero sé quién puede. Aquí tiene su número de teléfono. Llámalo"

ANTERIORMENTE ANTE SU SOLICITUD, le dirá: "No hay problema" y llamará a ese hombre solo, sin darse cuenta de que debe involucrar a otra persona para manejar su deseo. Entonces, tu amigo obtendrá el resultado de dar rienda suelta a tu deseo y transmitirte a ti


Redirigir:

  1. El usuario solicita un recurso.
  2. Respuesta enviada al usuario
  3. Este no es el recurso solicitado, esta es la respuesta con el código HTTP 302 y contiene la URL del recurso solicitado.
  4. La URL podría ser igual o diferente de la URL solicitada.
  5. El navegador del cliente vuelve a solicitar el recurso con la nueva URL, esta vez el recurso real se envía al usuario.

Adelante:

Es el proceso de simplemente mostrar el recurso solicitado al usuario. Sucede por completo en el lado del servidor.


Esta publicación ofrece una muy buena explicación sobre el redireccionamiento directo vs usando un buen ejemplo del mundo real.

El lechero viene y te pide un pago mensual en tu casa. Aquí la casa es el contenedor y usted es un recurso existente en el contenedor. Milk Man es el cliente o navegador.

Él le pide el pago mensual, esta es la solicitud hecha por el navegador al recurso A. Si ingresa a su casa y le pide a su madre (otro recurso B dentro del mismo contenedor) el dinero en efectivo y vuelve y lo entrega al lechero esto se llama adelante.

Si le preguntas al lechero que le hable a su madre dentro de tu casa o si le pides al lechero que hable con tu padre que está en su oficina (dominio diferente), esto se llama redirección.


+------------------------------------------------+-----------------------------------------------------------------------------+ | <jsp:forward> | sendRedirect() | +------------------------------------------------+-----------------------------------------------------------------------------+ | getRequestDispatcher().forward() | getRequestDispatcher().sendRedirect() | | Communication b/w pages directly | Communication b/w pages are indirectly by extra round trip from HTTP client | | Communication can happen within web-container | Communication can happen anywhere | | Use same Request and Response Object | Use different Request and Response Object | +------------------------------------------------+-----------------------------------------------------------------------------+


  • redirigir establece el estado de la respuesta a 302 [1], y la nueva url en un encabezado de Location , y envía la respuesta al navegador. Luego, el navegador, de acuerdo con la especificación http, realiza otra solicitud a la nueva url

  • reenviar pasa completamente en el servidor. El contenedor de servlets solo envía la misma solicitud a la URL de destino, sin que el navegador lo sepa. Por lo tanto, puede usar los mismos atributos de solicitud y los mismos parámetros de solicitud al manejar la nueva url. Y el navegador no sabrá que la URL ha cambiado (porque ha sucedido completamente en el servidor)

[1]: Este es un ejemplo de práctica industrial que contradice el estándar. La especificación HTTP / 1.0 (RFC 1945) requería que el cliente realizara una redirección temporal (la frase descriptiva original era "Movida temporalmente"), pero los navegadores populares implementaron 302 con la funcionalidad de un 303 Ver Otro. Por lo tanto, HTTP / 1.1 agregó códigos de estado 303 y 307 para distinguir entre los dos comportamientos. Sin embargo, algunas aplicaciones web y marcos usan el código de estado 302 como si fuera el 303. Source