Existen varias pantallas y servlets que, en conjunto, forman una aplicación web basada en Java. Un JSP pasa el control de un servlet a otro servlet o JSP usando dos métodos: Reenviar y Redirigir. El método Forward reenvía una solicitud de un servlet a otro recurso en una aplicación web y este recurso puede ser otro servlet, página JSP o archivo HTML.
El método Redirect, por otro lado, redirige la solicitud a una aplicación diferente. No puedes hacer esto con un método directo. Si una redirección llega a un recurso diferente en la misma aplicación, entonces está usando una URL diferente a la URL de la solicitud original. Si no desea responder a una solicitud, puede redirigir la solicitud a una URL diferente y el navegador enviará la nueva solicitud a la URL proporcionada por usted. Esta publicación destaca un par de diferencias que explican los dos métodos en detalle..
En sistemas o aplicaciones basados en web, a menudo es necesario transferir el control entre diferentes recursos o JSP. Por ejemplo, si desea realizar un pedido desde un sitio de comercio electrónico, primero debe registrarse antes de continuar. Si aún no está registrado con su sistema, es posible que el carro de la compra deba transferir el control al formulario JSP que es responsable del proceso de registro. La acción hacia adelante se utiliza específicamente para este propósito. Se utiliza para reenviar la solicitud de un JSP a otro u otro recurso dentro del mismo contexto.
Este método también se usa para reenviar solicitudes HTTP, pero a diferencia de un reenvío, es un proceso de dos pasos en el que la redirección ocurre en el lado del cliente a una aplicación diferente. El método de redirección redirige al usuario a una nueva URL. El navegador del cliente realiza automáticamente la nueva solicitud en la URL especificada en el encabezado de redireccionamiento que proviene del servidor. Requiere una comunicación de ida y vuelta con el cliente, por lo que es relativamente más lento que un reenvío..
El método forward () se usa para reenviar la solicitud de un JSP a otro o de un JSP a un servlet, o de un JSP a otro recurso en una aplicación web. El contenedor pasa el control internamente y el navegador / cliente no está involucrado en el proceso. El método de reenvío se declara en el RequestDispatcher. El método SendRedirect () se declara en HttPServletResponse y se usa para redirigir la solicitud del cliente a una URL diferente que está disponible en un servidor o contexto diferente. Con una redirección, puede redirigir el navegador a una aplicación diferente por completo.
Una de las diferencias clave entre los dos métodos es que el contenedor web maneja todos los procesos internamente en caso de reenviar () y la URL no cambia en el navegador del cliente, por lo que el cliente / navegador no está involucrado, dejándolos completamente inconscientes de que La acción ya ha tenido lugar. En el caso de SendRedirect (), el método establece los encabezados y el contenido del cuerpo apropiados para redirigir la solicitud a una URL diferente y el navegador se encarga de enviar la nueva solicitud a la URL que es visible para el cliente a medida que la URL cambia en el navegador..
Cuando el método forward () se ejecuta en el momento de la solicitud, la solicitud actual se reenvía a otra página JSP y el procesamiento de la JSP actual finaliza. La solicitud se puede reenviar a un servlet escrito en el lenguaje de programación Java, oa una página HTML estática. Una solicitud SendRedirect () simplemente le dice al navegador que vaya a una URL diferente, enviando el control de ejecución fuera de la aplicación web. Utiliza un proceso de dos pasos para indicar a la URL del navegador que realice otra solicitud que transfiera el control al cliente.
Un forward () opera dentro del servidor y se ejecuta más rápido que un SendRedirect (). Una redirección tiene que pasar por el navegador y luego esperar a que el navegador realice una nueva solicitud HTTP. Una redirección hace que el servidor envíe el código de estado de respuesta HTTP 302 con un encabezado de ubicación que contiene una nueva URL al navegador, y después de que el navegador recibió el código de estado 302, realiza una nueva solicitud a la URL que se encuentra en el encabezado de ubicación. Esto requiere una comunicación de ida y vuelta con el cliente que lo hace relativamente más lento que un forward ()..
Aprender la diferencia entre los métodos de reenvío y redireccionamiento es una de las partes más importantes para los desarrolladores de Java. Si bien un controlador puede realizar un método de reenvío o redireccionamiento al finalizar el procesamiento de una solicitud, tiene su propio conjunto de usos. La mayoría de las veces, usaría un método forward () ya que es ligeramente más rápido que SendRedirect (), que de hecho requiere una comunicación de ida y vuelta con el cliente, lo que lo hace más lento que un forward. Bueno, con una redirección, puede dirigir el navegador a una aplicación diferente. Esto no se puede hacer con un delantero. En pocas palabras, un reenvío funciona mejor cuando un componente debe realizar una lógica empresarial y compartir resultados con otro componente, mientras que un redireccionamiento funciona mejor cuando el cliente debe ser redirigido de una página a otra.