Existem várias telas e servlets que juntos formam um aplicativo da Web baseado em Java. Uma JSP passa o controle de um servlet para outro servlet ou JSP usando dois métodos - Encaminhar e Redirecionar. O método Forward encaminha uma solicitação de um servlet para outro recurso em um aplicativo da web e esse recurso pode ser outro servlet, página JSP ou arquivo HTML.
O método Redirect, por outro lado, redireciona a solicitação para um aplicativo diferente. Você não pode fazer isso com um método de encaminhamento. Se um redirecionamento atingir um recurso diferente no mesmo aplicativo, ele estará usando um URL diferente do URL de solicitação original. Se você não quiser responder a uma solicitação, poderá redirecioná-la para um URL diferente e o navegador enviará a nova solicitação para o URL fornecido por você. Este post destaca algumas diferenças que explicam os dois métodos em detalhes.
Em sistemas ou aplicativos baseados na Web, geralmente é necessário transferir o controle entre diferentes recursos ou JSPs. Por exemplo, se você deseja fazer um pedido em um site de comércio eletrônico, é necessário se registrar primeiro antes de continuar. Se você ainda não está registrado no sistema, o carrinho de compras pode precisar transferir o controle para o formulário JSP responsável pelo processo de registro. A ação direta é usada especificamente para esse fim. É usado para encaminhar a solicitação de um JSP para outro ou outro recurso no mesmo contexto.
Esse método também é usado para encaminhar solicitações HTTP, mas, diferentemente de um encaminhamento, é um processo de duas etapas em que o redirecionamento acontece no lado do cliente para um aplicativo completamente diferente. O método de redirecionamento redireciona o usuário para um novo URL. O navegador do cliente faz automaticamente a nova solicitação no URL especificado no cabeçalho de redirecionamento que vem do servidor. Requer uma comunicação de ida e volta com o cliente, portanto é relativamente mais lento que um avanço.
O método forward () é usado para encaminhar a solicitação de um JSP para outro ou de um JSP para um servlet ou de um JSP para outro recurso em um aplicativo da web. O controle é passado internamente pelo contêiner e o navegador / cliente não está envolvido no processo. O método forward é declarado no RequestDispatcher. O método SendRedirect () é declarado em HttPServletResponse e é usado para redirecionar a solicitação do cliente para uma URL diferente, disponível em outro servidor ou contexto. Com um redirecionamento, você pode redirecionar o navegador para um aplicativo completamente diferente.
Uma das principais diferenças entre os dois métodos é que o contêiner da web lida com todos os processos internamente no caso de forward () e a URL não muda no navegador do cliente, portanto, o cliente / navegador não está envolvido, deixando-os completamente inconscientes de que o ação já ocorreu. No caso de SendRedirect (), o método define os cabeçalhos e o conteúdo do corpo apropriados para redirecionar a solicitação para um URL diferente e o navegador cuida de enviar a nova solicitação para o URL visível ao cliente à medida que o URL muda no navegador..
Quando o método forward () é executado no momento da solicitação, a solicitação atual é encaminhada para outra página JSP e o processamento da JSP atual é encerrado. A solicitação pode ser encaminhada para um servlet gravado na linguagem de programação Java ou para uma página HTML estática. Uma solicitação SendRedirect () simplesmente diz ao navegador para ir para um URL diferente, enviando o controle de execução para fora do aplicativo Web. Ele usa um processo de duas etapas para instruir a URL do navegador a fazer outra solicitação que transfere o controle para o cliente.
Um forward () opera dentro do servidor e é executado mais rapidamente que um SendRedirect (). Um redirecionamento precisa passar pelo navegador e aguardar que o navegador faça uma nova solicitação HTTP. Um redirecionamento faz o servidor enviar o código de status de resposta HTTP 302 com um cabeçalho de localização que contém uma nova URL para o navegador e, após o navegador receber o código de status 302, ele faz uma nova solicitação para a URL encontrada no cabeçalho de localização. Isso requer uma comunicação de ida e volta com o cliente, o que o torna relativamente mais lento que um encaminhamento ().
Aprender a diferença entre os métodos de encaminhamento e redirecionamento é uma das partes mais importantes para os desenvolvedores Java. Enquanto um controlador pode executar um método de encaminhamento ou redirecionamento ao final do processamento de uma solicitação, ele tem seu próprio conjunto de usos. Na maioria das vezes, você usaria um método forward (), pois é marginalmente mais rápido que um SendRedirect (), que de fato exige uma comunicação de ida e volta com o cliente, tornando-o mais lento que o forward. Bem, com um redirecionamento, você pode direcionar o navegador para um aplicativo diferente. Isso não pode ser feito com um encaminhamento. Em poucas palavras, um encaminhamento funciona melhor quando um componente deve executar a lógica de negócios e compartilhar resultados com outro componente, enquanto um redirecionamento funciona melhor quando o cliente deve ser redirecionado de uma página para outra.