servlet sendredirect httpservletresponse example java jsp request response forward

java - example - sendredirect httpservletresponse



¿Cuál es la diferencia entre response.sendRedirect() y request.getRequestDispatcher(). Forward(solicitud, respuesta) (6)

1.redirect devuelve la solicitud al navegador desde el servidor, luego reenvía la solicitud al servidor desde el navegador.

2. en adelante envíe la solicitud a otro servlet (servlet a servlet).

Esta pregunta ya tiene una respuesta aquí:

Tengo un problema con el salto de página cuando uso JAVA, si uso:

response.sendRedirect("login.jsp")

luego obtengo esta url: http://localhost:8080/login.jsp

Pero si uso

request.getRequestDispathcer("login.jsp").forward(request, response)

luego obtengo esta url: http://localhost:8080/Shopping/login.jsp (la "compra" es el nombre de mi módulo).

¿Cual es la diferencia?


El redireccionamiento y el despachador de solicitudes son dos métodos diferentes para pasar de una página a otra. si usamos el redireccionamiento a una nueva página, en realidad está ocurriendo una nueva solicitud desde el lado del cliente a la nueva página. para que podamos ver el cambio en la URL. Como la redirección es una nueva solicitud, los viejos valores de solicitud no están disponibles aquí.


Para simplemente explicar la diferencia,

response.sendRedirect("login.jsp");

no antepone el contextpath (se refiere a la aplicación / módulo en el que se incluye el servlet)

pero, mientras

request.getRequestDispathcer("login.jsp").forward(request, response);

precederá el contextpath de la aplicación respectiva

Además, la solicitud de redireccionamiento se utiliza para redirigir a recursos a diferentes servidores o dominios. Esta tarea de transferencia de control es delegada al navegador por el contenedor. Es decir, la redirección envía un encabezado al navegador / cliente. Este encabezado contiene la URL del recurso que el navegador debe redirigir. Luego, el navegador inicia una nueva solicitud a la url determinada.

La solicitud directa se utiliza para reenviar a los recursos disponibles dentro del servidor desde donde se realiza la llamada. Esta transferencia de control se realiza internamente por el contenedor y el navegador / cliente no está involucrado.


Simplemente la diferencia entre Forward (Solicitud ServletRequest, ServletResponse response) y sendRedirect (String url) es

adelante():

  1. El método forward() se ejecuta en el lado del servidor.
  2. La solicitud es transferencia a otro recurso dentro del mismo servidor.
  3. No depende del protocolo de solicitud del cliente, ya que el método forward () lo proporciona el contenedor de servlets.
  4. La solicitud es compartida por el recurso de destino.
  5. Solo se consume una llamada en este método.
  6. Se puede usar dentro del servidor.
  7. No podemos ver el mensaje reenviado, es transparente.
  8. El método forward () es más rápido que el método sendRedirect() .
  9. Se declara en la interfaz RequestDispatcher .

sendRedirect ():

  1. El método sendRedirect() se ejecuta en el lado del cliente.
  2. La solicitud se transfiere a otro recurso a un servidor diferente.
  3. El método sendRedirect() se proporciona en HTTP por lo que solo se puede usar con clientes HTTP .
  4. Se crea una nueva solicitud para el recurso de destino.
  5. Se consumen dos llamadas de solicitud y respuesta.
  6. Se puede usar dentro y fuera del servidor.
  7. Podemos ver la dirección redireccionada, no es transparente.
  8. El método sendRedirect() es más lento porque cuando se crea una nueva solicitud, se pierde el antiguo objeto de solicitud.
  9. Se declara en HttpServletResponse .

adelante

El control puede reenviarse a recursos disponibles dentro del servidor desde donde se realiza la llamada. Esta transferencia de control se realiza internamente por el contenedor y el navegador / cliente no está involucrado. Esta es la principal diferencia entre forward y sendRedirect. Cuando se completa el reenvío, los objetos originales de solicitud y respuesta se transfieren junto con parámetros adicionales si es necesario.

redirigir

El control se puede redirigir a recursos a diferentes servidores o dominios. Esta tarea de transferencia de control es delegada al navegador por el contenedor. Es decir, la redirección envía un encabezado al navegador / cliente. Este encabezado contiene la URL del recurso que el navegador debe redirigir. Luego, el navegador inicia una nueva solicitud a la url determinada. Como se trata de una nueva solicitud, se pierde el antiguo objeto de solicitud y respuesta.

Por ejemplo, sendRedirect puede transferir el control de http://google.com a http://anydomain.com pero reenviar no puede hacer esto.

''sesión'' no se pierde tanto en adelante como en redirección.

Para sentir la diferencia entre forward y sendRedirect visualmente vea la barra de dirección de su navegador, en forward, no verá la dirección reenviada (ya que el navegador no está involucrado) en la redirección, puede ver la dirección redirigida.


redirigir: devolver la solicitud al navegador / cliente desde el servidor, luego reenviar la solicitud al servidor desde el navegador / cliente.

Reenviar: envía la solicitud a otro servlet (servlet a servlet) y no envía la solicitud a otro navegador / cliente.