web-dev-qa-db-fra.com

Quelle est la différence entre RequestDispatcher.forward () et HttpServletResponse.sendRedirect ()?

Quelle est la différence entre la méthode forward() de RequestDispatcher et la méthode sendRedirect() de HttpServletResponse?
Quelqu'un peut-il expliquer avec un exemple et la meilleure utilisation de ces méthodes avec un exemple en temps réel?

20
Raj

SendRedirect ():
Cette méthode est déclarée dans l'interface HttpServletResponse

Signature: void sendRedirect (URL de chaîne)

Cette méthode est utilisée pour rediriger la demande du client vers un autre emplacement pour un traitement ultérieur, le nouvel emplacement est disponible sur un serveur différent ou un contexte différent.Notre conteneur Web gère cela et transfère la demande à l'aide du navigateur, et cette demande est visible dans le navigateur en tant que nouveau demande. Parfois, cela est également appelé redirection côté client.

Forward (): Cette méthode est déclarée dans l'interface RequestDispatcher.

Signature: avant (demande ServletRequest, réponse ServletResponse)

Cette méthode est utilisée pour transmettre la demande à une autre ressource pour un traitement ultérieur au sein du même serveur, une autre ressource peut être n'importe quel servlet, page jsp tout type de fichier.Ce processus est pris en charge par le conteneur Web lorsque nous appelons la demande de méthode de renvoi est envoyée à une autre ressource sans que le client en soit informé, quelle ressource gérera la requête mentionnée sur l'objet requestDispatcher que nous pouvons obtenir de deux manières en utilisant ServletContext ou Request. Ceci est également appelé redirection côté serveur.

[~ # ~] a [~ # ~] RequestDispatcher forward () est utilisé pour transmettre la même demande à une autre ressource tandis que ServletResponse sendRedirect () est un processus en deux étapes. Dans sendRedirect (), l'application Web renvoie la réponse au client avec le code d'état 302 (redirection) avec URL pour envoyer la demande. La demande envoyée est une toute nouvelle demande.

[~ # ~] b [~ # ~] forward () est géré en interne par le conteneur tandis que sednRedirect () est géré par le navigateur.

[~ # ~] c [~ # ~] Nous devrions utiliser forward () lors de l'accès aux ressources dans la même application car c'est plus rapide que la méthode sendRedirect () qui nécessitait un appel réseau supplémentaire.

[~ # ~] d [~ # ~] Dans forward (), le navigateur n'est pas au courant de la ressource de traitement réelle et l'URL dans la barre d'adresse reste la même alors que dans sendRedirect () L'URL dans la barre d'adresse change pour la ressource transférée.

[~ # ~] e [~ # ~] forward () ne peut pas être utilisé pour appeler une servlet dans un autre contexte, nous ne pouvons utiliser que sendRedirect () dans ce cas.

Explication des détails ici

3
Sameer Kazi

Nous ne pouvons utiliser le répartiteur de demandes que lorsque l'autre servlet auquel la demande est transmise se trouve dans la même application. D'autre part, Send Redirect peut être utilisé dans les deux cas si les deux servlets résident dans une même application ou dans des applications différentes.

3
Saurabh

Une demande est transmise uniquement transmet la demande aux mêmes composants d'application WEB, et la redirection peut également être redirigée vers le même site dans différentes ressources d'application, et peut même être dirigée vers une URL absolue.

La redirection peut voir l'URL de la page cible, le transfert d'URL de la page ne peut voir que la première visite, après tout, il y a un serveur pour faire le travail.

La demande de réponse entre les objets appelant et appelé partage les mêmes objets demande et réponse, redirige l'appelant et l'appelé appartiennent à deux processus de demande et de réponse d'accès distincts.

Doit être ajouté après le retour de la redirection de saut, ou bien sauter à travers la page, mais effectue également un saut derrière l'instruction, le transfert est effectué sur la page de saut, le code suivant ne sera pas exécuté.

2
heroxuguowei