# Java > Dveloppement Web en Java > Servlets/JSP >  Questions sur forward(), sendRedirect() et HttpServletResponse

## Gugelhupf

Bonjour,


Je suis dbutant en JEE et je me pose plusieurs questions sur les mthodes forward() et sendRedirect().


*1.* Je me sers de la ligne de code suivante pour me rediriger vers mes fichier JSP :


```
request.getRequestDispatcher("page.jsp").forward(request, response);
```

Dans mon fichier JSP je peux me servir de l'objet *request*, mais comment est-ce possible ? 
Comment l'objet *request* peut-t-elle tre reconnu hors de la Servlet, dans mon fichier JSP, alors qu'elle n'est dclare que dans la Servlet ?


*2.* Dans mes fichiers JSP, je me suis essentiellement servit de l'objet *request* mais jamais de l'objet *response*, dans quel cas se sers-t-on de *response* ? Quel est son rle ?


*3.* Malgr le fait que j'ai cherch  faire la diffrence entre forward() et sendRedirect(), je n'ai pas compris l'intrt de sendRedirect().
J'ai juste lu que forward() tait plus performant que sendRedirect().
*Dans quels circonstances doit-t-on imprativement utiliser sendRedirect() ?* 


*4.* Si on pouvait faire une comparaison entre les mthodes JEE forward() / sendRedirect() et la fonction de redirection header() en PHP, quel mthode JEE serait la plus proche de la fonction PHP, pourquoi ?



Je vous remercie pour vos rponses.  ::):

----------


## jchevalay54

Bonjour, 

Je suis pas expert java mais bon je vais essayer de te dire ce que je crois avoir compris de cela. 

Tout d'abord parlons un peut de httpRequest et httpResponse : 

HttpRequest porte bien son nom il permet de rediriger et recuperer des variables que tu envoi par exemple a ta page jsp. donc en clair la plupart des action redirection, recupration se font grce a httpRequest. 

Au contraire HttpResponse concerne par exemple avec la fonction getWriter() l'affichage dans ta page de varaible ou de texte. 

Ensuite httpRequest.getRequestDispatcher("/monchemin").forward(HttpRequest, httpResponse) 

permet de te rediriger vers une autre page. mais chose qu'il faut bien comprendre avec le forward c'est que la page sur laquelle tu travail sera plus "active". en clair imaginons que tu veuille faire un traitement particulier et que cela est fait dans une autre page n'utilise pas foward mais plus include() par exemple. Mais retiens surtout que le forward c'est quand tu veux rediriger vers une autre page. 

pour ton dernier point la je suis moins sure mais a mon avis foward = sendredirect(). 

J'spre avoir rpondu un peu a ta question.

----------


## lunatix

non forward n'est pas la meme chose que sendredirect

forward : tout se passe cot server, tu indiques que tu veux continuer le traitement ailleurs (eventuellement un autre controller ou une autre jsp). Le navigateur de voit rien. Si l'url demande etait /plop.do  tu auras a la fin /plop.do meme si tu as pass plein de forward.

SendRedirect renvoi un Code HTTP 302 au navigateur avec une location qui lui indique d'aller vers une autre url.
donc a la fin, tu as dans le navigateur une autre url que celle de depart.

----------


## jchevalay54

ok j'avais un doute la-dessus

----------


## OButterlin

Globalement, lorsque tu soumets une requte  un serveur via http, 2 objets sont crs, request + response.
Le premier sert  transporter les informations de la requte, le second  rpondre (comme quoi, les noms sont bien trouvs)
Jusqu' la fin de la rponse, le request est actif.

Pour simplifier la diffrence entre un forward et un sendRedirect, je dirais que le sendRedirect permet de demander au client (browser) d'aller chercher son rsultat  une url donne, donc, on a un double aller/retour entre le client et le serveur. Dans ce cas, on a galement un nouveau Request (pour le 2me) et tout ce qui tait pass par le premier est perdu.

----------


## Gugelhupf

Bonjour,

Je vous remercie pour vos rponses. 

En effet, il y a une diffrence entre forward et sendRedirect. Pour clore ce sujet je vais rpondre  mes propres questions :
*1.* Une JSP est _intimement_ lie  une servlet. En fait, une fois la compilation effectue, la JSP devient une servlet.
Donc l'objet *request*, et *session* par exemple, sont accessibles dans une JSP.

*2.* On peut se servir de l'objet *response*, lorsqu'on veut directement crire le contenu de la page (ou modifier l'en-tte HTTP) sans utiliser de JSP, a peut tre utile lorsqu'on qu'on fait de l'AJAX aussi.

*3.* Il n'y a pas de cas o le sendRedirect est obligatoire. sendRedirect effectue un change supplmentaire entre le serveur et le client contrairement  forward. Tout ce qu'il faut savoir, c'est que a existe et que c'est ainsi. a fait  la fois parti des richesses et du surplus de la technologie JSP/Servlet.

*4.* Il n'y a pas vraiment d'quivalent avec PHP pour la fonction sendRedirect. Si on respecte le modle MVC, on pourrait dire qu'un forward en JSP/Servlet, c'est comme un "include" de View.php  la dernire instruction du Controller (bon je ne sais pas si j'ai bien russi  exprimer ce que je pense).


 ::ccool::

----------

