web-dev-qa-db-fra.com

Différence entre le transfert et la redirection JSP

S'il vous plaît expliquer la différence entre jsp:forward et redirect.
Que se passe-t-il dans chaque cas?

73
Ammu
  • redirect définit l'état de la réponse sur 302 [1] et la nouvelle URL dans un en-tête Location, puis envoie la réponse au navigateur. Ensuite, le navigateur, conformément à la spécification http, fait une autre demande à la nouvelle URL

  • le transfert s'effectue entièrement sur le serveur. Le conteneur de servlet transmet simplement la même demande à l'URL cible, sans que le navigateur ne le sache. Par conséquent, vous pouvez utiliser les mêmes attributs de requête et les mêmes paramètres de requête lors du traitement de la nouvelle URL. Et le navigateur ne saura pas que l'URL a changé (parce que cela s'est passé entièrement sur le serveur)


[1]: Il s'agit d'un exemple de pratique de l'industrie en contradiction avec la norme. La spécification HTTP/1.0 (RFC 1945) imposait au client d'effectuer une redirection temporaire (la phrase descriptive d'origine était "Moved Temporarily"), mais les navigateurs populaires implémentaient 302 avec les fonctionnalités d'un 303 Voir autres. Par conséquent, HTTP/1.1 a ajouté les codes d’état 303 et 307 pour distinguer les deux comportements. Cependant, certaines applications et infrastructures Web utilisent le code de statut 302 comme s'il s'agissait du code 303. Source

136
Bozho

J'ai entendu des explications intéressantes sur les redirections et les transferts. Imaginez que vous ayez besoin des services de votre ami. Peu importe quel service. Supposons que votre ami ne puisse pas vous aider mais sache qui peut le faire.

Il RÉDIGÉRERA votre demande s’il vous disait: "Je ne peux pas gérer ça, mais je sais qui peut. Ici son numéro de téléphone. Appelle-le."

Il VERSERA votre demande s’il vous disait: "Pas de problème" et appelle cet homme tout seul, sans vous avertir de faire participer une autre personne à la gestion de votre désir. Ensuite, votre ami obtiendra le résultat du tri de votre souhait et vous le transmettra.

35
Sobik

La redirection est également plus lente que la transmission car elle doit passer par le navigateur et attendre que le navigateur fasse une nouvelle demande, ce qui entraîne également l'indisponibilité des objets de portée de la requête après la redirection.

11
rmartinus

Redirection:

  1. L'utilisateur demande une ressource.
  2. Réponse envoyée à l'utilisateur.
  3. Ce n'est pas la ressource demandée, c'est la réponse avec le code HTTP 302 et contient l'URL de la ressource demandée.
  4. L'URL peut être identique ou différent de l'URL demandée.
  5. Le navigateur client effectue à nouveau une demande de ressource avec la nouvelle URL. Cette fois, la ressource réelle est envoyée à l'utilisateur.

Vers l'avant:

C'est le processus d'affichage simple de la ressource demandée à l'utilisateur. Cela se passe entièrement du côté serveur.

6
Nishant

Cet article donne une très bonne explication sur la redirection directe en utilisant un exemple du monde réel de Nice.

Le laitier vient et demande un paiement mensuel chez vous. Ici la maison est le conteneur et vous êtes une ressource existante dans le conteneur. Milk Man est le client ou le navigateur.

Il demande le paiement mensuel à vous, il s'agit de la demande faite par le navigateur pour la ressource A. Si vous allez à l'intérieur de votre maison et demandez à votre mère (une autre ressource B dans le même conteneur) pour l'argent et revenez et livrez à la laitière c'est appelé en avant.

Si vous demandez au laitier de se parler à votre mère à l'intérieur de votre maison ou si vous lui demandez de parler à votre père qui est dans son bureau (domaine différent), on parle alors de redirection.

3
aravindaM
+-------------------------------------------------------------------------+-----------------------------------------------------------------------------+
|                             Forwards   vs.                              |                                  Redirects                                  |
+-------------------------------------------------------------------------+-----------------------------------------------------------------------------+
| ServletContext.getRequestDispatcher(location).forward(request,response) | httpServletResponse.sendRedirect(location)                                  |
| Communication between pages directly                                    | Communication b/w pages are indirectly by extra round trip from HTTP client |
| Communication happens within web-container                              | Communication happens outside web-container                                 |
| Use same Request and Response Object                                    | Use different Request and Response Object                                   |
+-------------------------------------------------------------------------+-----------------------------------------------------------------------------+
1
Premraj

Lorsque vous transférez une demande,

-Les objets demande et réponse sont transférés. -url reste le même.

Lorsque vous redirigez la demande vers un autre JSP/servlets,

-Les objets requête et réponse ne sont pas transférés vers un nouvel objet. -Url change dans le répertoire de la nouvelle page.

0
Buskeek