Diferença entre o encaminhamento de JSP e o redirecionado

Por favor, explique a diferença entre jsp:forward e redirect .
O que está acontecendo em cada caso?

   
  • O redirecionamento define o status de resposta para 302 [1] e o novo URL em um header de Location e envia a resposta para o navegador. Em seguida, o navegador, de acordo com a especificação http, faz outra solicitação para o novo URL

  • encaminhar acontece inteiramente no servidor. O contêiner de servlet apenas encaminha a mesma solicitação para o URL de destino, sem que o navegador saiba disso. Portanto, você pode usar os mesmos atributos de solicitação e os mesmos parâmetros de solicitação ao manipular o novo URL. E o navegador não saberá que o URL foi alterado (porque aconteceu inteiramente no servidor)


[1]: Este é um exemplo de prática da indústria que contradiz o padrão. A especificação HTTP / 1.0 (RFC 1945) exigia que o cliente executasse um redirecionamento temporário (a frase descritiva original era “Movido temporariamente”), mas navegadores populares implementaram 302 com a funcionalidade de um 303 Consulte Outros. Portanto, o HTTP / 1.1 adicionou códigos de status 303 e 307 para distinguir entre os dois comportamentos. No entanto, alguns aplicativos da Web e estruturas usam o código de status 302 como se fosse o 303.

Eu ouvi uma explicação interessante de redirecionamento e encaminhamento. Imagine que você precisa de algum serviço do seu amigo. Não importa qual serviço. Suponha que seu amigo não possa ajudá-lo, mas saiba quem pode.

Ele REDIRECTs seu pedido se ele lhe disser: “Eu não posso lidar com isso, mas sei quem pode. Aqui o seu número de telefone. Ligue para ele”

Ele AVANÇA o seu pedido se ele lhe disser: “Não tem problema” e chama aquele homem sozinho, sem notá-lo sobre envolver outra pessoa em lidar com o seu desejo. Então seu amigo terá o resultado de satisfazer seu desejo e transmitir a você

O redirecionamento também é mais lento em comparação ao encaminhamento porque ele precisa passar pelo navegador e aguardar o navegador fazer uma nova solicitação, e também, portanto, fazer com que os objects do escopo da solicitação fiquem indisponíveis após o redirecionamento.

Redirecionar:

  1. Usuário solicita um recurso.
  2. Resposta enviada ao usuário.
  3. Este não é o recurso solicitado, isso é resposta com o código HTTP 302 e contém a URL do recurso solicitado.
  4. O URL pode ser igual ou diferente do URL solicitado.
  5. O navegador do cliente solicita novamente o recurso com o novo URL, desta vez o recurso real é enviado ao usuário.

Frente:

É o processo de simplesmente exibir o recurso solicitado para o usuário. Isso acontece inteiramente no lado do servidor.

Este post dá uma boa explicação sobre o forward vs redirect usando um bom exemplo do mundo real.

O homem leite vem e pede o pagamento mensal para você em sua casa. Aqui house é o container e você é um recurso existente no container. O homem do leite é o cliente ou o navegador.

Ele pede o pagamento mensal para você, este é o pedido feito pelo navegador para o recurso A. Se você entrar em sua casa e perguntar a sua mãe (outro recurso B dentro do mesmo contêiner) pelo dinheiro e voltar e entregar ao leiteiro isso é chamado de encaminhamento.

Se você pedir ao leiteiro que fale com a sua mãe dentro da sua casa ou peça ao leiteiro para falar com o seu pai que está em seu escritório (domínio diferente), então isso é chamado de redirecionamento.

Quando você encaminha uma solicitação,

Os objects -request e response são transferidos. -url permanece o mesmo.

Quando você redireciona a solicitação para outro JSP / servlets,

Os objects -request e response não são transferidos para o novo object. -Url muda para o diretório da nova página.

 +------------------------------------------------+-----------------------------------------------------------------------------+ |  | 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 | +------------------------------------------------+-----------------------------------------------------------------------------+