Pular para o conteúdo principal

foward vs include - Uma questão que confunde no Java Web

As funcionalidades das ações forward e include são bem semelhantes e por isso as vezes confunde! Motivado por isso e pela recente necessidade de alguns alunos meus, resolvi postar aqui um breve artigo sobre as principais diferenças entre as duas ações.


O "forward" serve para transferir o controle para outro componente web (servlet/JSP). Você deve lembrar como ele funciona: redireciona seus objetos request e reponse para o recurso que você aponta no getRequestDispatcher.

//Redireciona para A.jsp
RequestDispatcher dispatcher = request.getRequestDispatcher("A.jsp");
dispatcher.forward(request, response);

Por isso ele só pode ser chamado uma vez pelo seu servlet, porque ele delega toda a responsabilidade da requisição para outro servlet ou JSP. Isto também significa que ele só pode ser redirecionado para um servlet/JSP por vez, nada mais!
Se você tentar executar qualquer método após o forward, terá uma exceção!

Já o "include" serve, como o próprio nome diz, para incluir recursos web na sua página atual (Objeto response). É no reponse que ele age principalmente, e também pode ser chamado quantas vezes você quiser.

Ex.:
RequestDispatcher dispatcher = request.getRequestDispatcher("A.jsp");
dispatcher.include(request, response);
dispatcher = request.getRequestDispatcher("B.jsp");
dispatcher.include(request, response);


Isso fará tanto a página A.jsp quanto a B.jsp serem incluídas na sua página de retorno para o usuário (response)!

Lembre-se: A ação include não redireciona, apenas inclui, por isso você pode chama-lá e continuar executando código logo após, porque ainda está no mesmo recurso web - no caso, no teu servlet!
-->

Comentários

Postagens mais visitadas deste blog

Como acessar um iframe e seus elementos via jQuery?

Recentemente tive  um problema no projeto pois sentiu a necessidade de acessar um valor de um input que estava dentro de um iframe. Esse tipo de situação não é tão comum, uma vez que geralmente acessamos os valores do iframe para fora. Para acessar, de dentro de um iframe, um valor externo, utilizamos o seguinte código: $('#idDoElementoExterno', parent.document).val(); Entretanto, nunca tínhamos passado pela situação contrária. Pesquisando um pouco descobrimos uma alternativa, porém em JavaScript. Para ficar melhor o entendimento, vamos simular uma situação aqui. Temos uma página html "A.html" e dentro da mesma existe um iframe que aponta (src) para uma página "B.html": <!-- A.html --> <html> <head> <title>Testando iframe - jQuery</title> <script language="JavaScript"> function exibeValor() { // alert aqui! } </script> </head> <body> <input typ

"Content is not allowed in prolog" - Entendendo exceção no Seam

Recentemente tive um problema de edição em um arquivo .xhtml utilizando JBoss Seam, Richfaces e afins. A princípio a mensagem de erro não dizia muito a respeito da causa do mesmo: com.sun.facelets.FaceletException: Error Parsing /consulta.xhtml: Error Traced[line: 1] Content is not allowed in prolog. "O conteúdo não é permitido no prólogo". Mas que conteúdo? Em qual prolog? Depois de dar uma pesquisada descobri que o erro acontece em vista de terem sido colocados alguns caraceteres inválidos antes da declaração de documento xml na página xhtml. Em outras palavras, a primeira coisa que deve constar em um documento xml (afins) deve ser: <?xml version="1.0" encoding="utf-8"?> Qualquer coisa antes disso, até mesmo um simples espaço em branco, pode gerar o erro em questão. Por fim, lembre-se de que a declaração de documento xml segue o padrão de encoding definido. Logo temos: <!-- Inc

Integrando Android e PayPal com Java e MySQL - Parte 2

Na primeira parte deste artigo, nós cobrimos toda a configuração inicial do ambiente, envolvendo principalmente o projeto Java Web com Restful, as bibliotecas e ferramentas envolvidas, bem como suas respectivas versões. Criamos também toda a comunicação com o banco de dados, o modelo Entidade-Relacionamento, o SQL gerado e as configurações da API do PayPal SDK para Java. Nessa parte, focaremos em finalizar a aplicação de modelo, principalmente no lado Android, testando tudo de forma local. Você poderá efetuar o download do código fonte diretamente do meu GitHub, no botão abaixo: DOWNLOAD CÓDIGO Na Figura 1 abaixo você pode visualizar como ficarão nossas telas ao final da implementação: Configurando o projeto Android Antes de criar o projeto, precisamos efetuar o download do PayPal Android SDK . Extraia os arquivos em uma pasta de preferência. Mais uma vez, você pode se sentir à vontade para usar o Eclipse Android Bundle ou o AndroidStudio para programar a parte Andr