java - ¿Cuál es la diferencia entre RequestDispatcher.forward() y HttpServletResponse.sendRedirect()?
response.sendredirect jsp (4)
La redirección es un tipo de respuesta que se envía de vuelta al cliente, mientras que la delegación de reenvío se realiza completamente en el lado del servidor y el resultado de la acción de reenvío se devuelve al cliente como si proviniera solo de la URL original.
Otra diferencia es que la delegación de reenvío se puede usar solo para los recursos en aplicaciones, mientras que el comando de redirección puede redirigir el navegador del cliente fuera del dominio actual.
Ejemplos:
// Sends a temporary redirect to the HTTP client. Only absolute URLs are allowed.
ServletResponse.sendRedirect(String location);
// Delegates one HttpRequest to another dynamic or static resource
HttpRequest.getRequestDispatcher("example.jsp").forward(request, response);
// Includes/enriches current response with another dynamic or static resource
HttpRequest.getRequestDispatcher("example.html").include(request, response);
Otra buena explicación se puede encontrar aquí:
Diferencia entre sendRedirect () y forward ()
Esta pregunta ya tiene una respuesta aquí:
¿Cuál es la diferencia entre el método sendRedirect()
''s forward()
y HttpServletResponse
?
¿Alguien puede explicar con un ejemplo y el mejor uso de estos métodos con un ejemplo en tiempo real?
Podemos usar el despachador de solicitudes solo cuando el otro servlet al que se reenvía la solicitud se encuentra en la misma aplicación. Por otro lado, Send Redirect puede usarse en ambos casos si los dos servlets residen en una misma aplicación o en diferentes aplicaciones.
Una solicitud se reenvía solo reenvía la solicitud a los mismos componentes de la aplicación WEB, y la redirección también se puede redirigir al mismo sitio en diferentes recursos de la aplicación, e incluso se puede dirigir a una URL absoluta.
La redirección puede ver la URL de la página de destino, el reenvío de URL de la página solo puede ver la primera visita, después de todo, hay un servidor para hacer el trabajo.
La respuesta de solicitud entre los objetos de la persona que llama y el objeto de la llamada comparten los mismos objetos de solicitud y respuesta, la redirección de la persona que llama y el objeto de la llamada pertenecen a dos procesos de respuesta y solicitud de acceso por separado.
Debe agregarse después del retorno de redireccionamiento de salto, o bien saltar a través de la página, pero también realiza un salto detrás de la instrucción, se realiza el reenvío de la página de salto, el siguiente código no se ejecutará.
SendRedirect ():
Este método se declara en la interfaz HttpServletResponse
Firma: void sendRedirect (String url)
Este método se utiliza para redirigir la solicitud del cliente a otra ubicación para su procesamiento posterior, la nueva ubicación está disponible en un servidor diferente o en un contexto diferente. Nuestro contenedor web se encarga de esto y transfiere la solicitud utilizando el navegador, y esta solicitud es visible en el navegador como una nueva solicitud. En algún momento esto también se llama como redirección del lado del cliente.
Forward (): este método se declara en la interfaz de RequestDispatcher.
Firma: reenviar (solicitud ServletRequest, respuesta ServletResponse)
Este método se utiliza para pasar la solicitud a otro recurso para un procesamiento adicional dentro del mismo servidor, otro recurso podría ser cualquier servlet, jsp o cualquier tipo de archivo. Este proceso es atendido por el contenedor web cuando llamamos. otro recurso sin que el cliente esté informado, qué recurso manejará la solicitud que se ha mencionado en el objeto requestDispatcher, que podemos obtener de dos maneras, ya sea utilizando ServletContext o Request. Esto también se llama redirección del lado del servidor.
Un RequestDispatcher forward () se usa para reenviar la misma solicitud a otro recurso, mientras que ServletResponse sendRedirect () es un proceso de dos pasos. En sendRedirect (), la aplicación web devuelve la respuesta al cliente con el código de estado 302 (redirección) con la URL para enviar la solicitud. La solicitud enviada es una solicitud completamente nueva.
B forward () es manejado internamente por el contenedor mientras que sednRedirect () es manejado por el navegador.
C Deberíamos usar forward () cuando accedemos a recursos en la misma aplicación porque es más rápido que el método sendRedirect () que requirió una llamada de red adicional.
D In forward () el navegador desconoce el recurso de procesamiento real y la URL en la barra de direcciones permanece igual mientras que en la URL sendRedirect () en la barra de direcciones cambia al recurso reenviado.
E forward () no se puede usar para invocar un servlet en otro contexto, solo podemos usar sendRedirect () en este caso.