Différence entre mécanisme d’inclusion et de transfert pour le concept de répartition des demandes?

Forward (): Cela peut être fait de deux manières par Request & ServeletContext. Transfert d’une requête d’un servlet vers une autre ressource (servlet, fichier JSP ou fichier HTML) sur le serveur. Le transfert se fait côté serveur, à l’insu du client.

Lorsque vous appelez une demande de transfert, la demande est envoyée à une autre ressource sur le serveur, sans que le client soit informé qu’une autre ressource va traiter la demande. Ce processus se produit complètement avec dans le conteneur Web.

Simplement

include: inclura un autre fichier dans notre fichier actuel

forward: transmettra la demande en cours à la page de renvoi

La principale différence est que lorsque vous utilisez la commande forward, le contrôle est transféré vers le prochain servlet / jsp que vous appelez, alors que include conserve le contrôle avec le servlet actuel, il inclut simplement le traitement effectué par le servlet appelant / jsp .println ou autre traitement).

La différence entre les deux balises est la façon dont elles fonctionnent. Eh bien, je vais vous donner un exemple pour que vous puissiez l’imaginer mieux.

Supposons que vous avez deux pages, pageA et pageB. Dans la page A, vous avez écrit la balise include. Dans ce cas, le contrôle était en page jusqu’à ce que vous appeliez la balise include. À ce stade, le contrôle total passe à la pageB. Lorsque c’est terminé, le contrôle est renvoyé à la pageA à partir du prochain sharepoint codage après la balise include et au rest de la pageA.

Eh bien, pour que les choses soient plus claires, supposons que nous ayons les mêmes pages, pageA et pageB, mais cette fois-ci, nous utiliserons la balise forward dans pageA, pas la balise include. Encore une fois, le contrôle commencera dans pageA jusqu’à ce que nous appelions la balise de transfert dans pageA, à ​​ce stade, le contrôle est transféré à la pageB, tout comme la balise include. Mais la différence est ce qui se passe lorsque la pageB complète. Dans le cas de la balise forward, le contrôle ne revient plus à la pageA.

inclure (demande, réponse);

Si la ressource est statique, la méthode include active les inclusions côté serveur. Si la ressource est un composant Web, la méthode a pour effet d’envoyer la demande au composant Web inclus, d’exécuter le composant Web, puis d’inclure le résultat de l’exécution dans la réponse du servlet contenant.

Un composant Web inclus a access à l’object de requête, mais est limité dans ce qu’il peut faire avec l’object de réponse.

  • Il peut écrire dans le corps de la réponse et commettre une réponse.
  • Il ne peut pas définir d’en-tête ni appeler une méthode, telle que setCookie, qui affecte les en-têtes de la réponse.

Il est souvent utile d’inclure une autre ressource Web, telle que du contenu de bannière ou des informations de copyright, dans la réponse renvoyée par un composant Web.

en avant (demande, réponse);

Dans certaines applications, vous pouvez souhaiter qu’un composant Web effectue un traitement préliminaire d’une requête et qu’un autre composant génère la réponse. Par exemple, vous pouvez traiter partiellement une demande puis la transférer vers un autre composant, selon la nature de la demande.

Pour transférer le contrôle à un autre composant Web, vous appelez la méthode forward d’un RequestDispatcher. Lorsqu’une demande est transférée, l’URL de la demande est définie sur le chemin de la page transférée. L’URI d’origine et ses composants sont enregistrés en tant qu’atsortingbuts de demande.

javax.servlet.forward.[request-uri|context-path|servlet-path|path-info|query-ssortingng] 

La méthode forward doit être utilisée pour donner à une autre ressource la responsabilité de répondre à l’utilisateur. Si vous avez déjà accédé à un object ServletOutputStream ou PrintWriter dans le servlet, vous ne pouvez pas utiliser cette méthode. Ce faisant, jette une exception IllegalStateException .

Liens connexes

  • RequestDispatcher # avant (javax.servlet.ServletRequest, javax.servlet.ServletResponse)
  • RequestDispatcher # include (javax.servlet.ServletRequest, javax.servlet.ServletResponse)
  • Tutoriel Java EE 6

La principale différence entre les deux est que la méthode forward () FERMET le stream de sortie après son appel, tandis que la méthode include laisse le stream de sortie ouvert.

répondant à un exemple: permet d’avoir une page de servlet nommée xxx.java et une page jsp nommée yy.jsp

Dans le yy.jsp

 WELCOME to yy.jsp 

Dans le xxx.java // en utilisant forward ()

RequestDispatcher rd = request.getRequestDispatcher("yy.jsp"); rd.forward(request,response); out.println("back to servlet"); //this wont b displayed

sortie

 WELCOME to yy.jsp 

Dans le xxx.java // en utilisant include ()

RequestDispatcher rd = request.getRequestDispatcher("yy.jsp"); rd.include(request,response); out.println("back to servlet");

sortie

 WELCOME to yy.jsp back to servlet 

MAIS LE PLUS IMPORTANT SON PAS AU SUJET DU CONTRÔLE, PARCE QUE SI NOUS METTONS UN

System.out.println("console output");

Après l’ .forward() ou .include() , la sortie de la console sera générée sur chaque cas. Son sur la réponse au client

Donc, la partie de base est que si nous traitons dans un composant côté serveur et ensuite nous transférons vers un JSP ou un Servlet afin de générer un balisage pour un client, une fois que le traitement de JSP ou Servlet est terminé, nous ne pouvons plus appeler d’autres composants pour générer un balisage pouvant être envoyé au client. Une fois que nous avons effectué un transfert, la génération du balisage pour la demande en cours et le cycle de réponse est terminée.

Alternativement, avec un include, le stream de sortie rest ouvert, nous pouvons donc appeler autant de fichiers différents pour générer le balisage côté client dont nous avons besoin. Nous pouvons donc inclure deux ou trois fichiers JSP et même une servlet dans la chaîne de composants générant le balisage client. Lorsque nous utilisons un include, le stream de sortie n’est pas fermé après l’invocation.