Quelle est la différence entre les réponses.sendRedirect() et de la demande.getRequestDispatcher ().transmission (demande,réponse) [duplicata]

cette question a déjà une réponse ici:

  • RequestDispatcher.forward () vs HttpServletResponse.sendredirect () 8 réponses

j'ai un problème avec mon saut de page quand J'utilise JAVA, si j'utilise:

response.sendRedirect("login.jsp")

ensuite je reçois cette url: http://localhost:8080/login.jsp

mais si j'utilise

request.getRequestDispathcer("login.jsp").forward(request, response)

puis je reçois cette url: http://localhost:8080/Shopping/login.jsp (le" Shopping " est le nom de mon module).

quelle différence?

48
demandé sur Navnath Godse 2013-12-04 13:14:05

6 réponses

pour expliquer simplement la différence,

  response.sendRedirect("login.jsp");

ne pré-exécute pas le chemin de contexte (se réfère à l'application/module dans lequel le servlet est empaqueté)

mais, alors que

 request.getRequestDispathcer("login.jsp").forward(request, response);

préparera le chemin de contexte de l'application respective

de plus, Redirect request est utilisé pour rediriger vers des ressources vers des serveurs ou des domaines différents. Ce transfert de contrôle de la tâche est déléguée au navigateur par le conteneur. C'est-à-dire que la redirection renvoie un en-tête au navigateur / client. Cet en-tête contient l'url de la ressource à rediriger par le navigateur. Ensuite, le navigateur envoie une nouvelle requête à l'url donnée.

Avant de demander est utilisé pour transférer des ressources disponibles dans le serveur d'où l'appel est fait. Ce transfert de contrôle est effectué par le conteneur interne et navigateur / le client n'est pas en cause.

69
répondu Keerthivasan 2013-12-04 09:26:40

de l'avant

Le contrôle

peut être redirigé vers les ressources disponibles sur le serveur à partir duquel l'appel est passé. Ce transfert de contrôle est effectué par le conteneur interne et le navigateur / client n'est pas en cause. C'est la différence majeure entre forward et sendRedirect. Lorsque le forward est terminé, les objets request et response originaux sont transférés avec des paramètres supplémentaires si nécessaire.

rediriger

Le contrôle peut être redirigé vers des ressources vers différents serveurs ou domaines. Ce transfert de contrôle est délégué au navigateur par le conteneur. C'est-à-dire que la redirection renvoie un en-tête au navigateur / client. Cet en-tête contient l'url de la ressource à rediriger par le navigateur. Ensuite, le navigateur envoie une nouvelle requête à l'url donnée. Comme il s'agit d'une nouvelle requête, l'ancien objet request and response est perdu.

par exemple, sendRedirect peut transférer le contrôle de http://google.com à http://anydomain.com mais forward ne peut pas faire cela.

’ session ' n'est pas perdu à la fois en forward et en redirect.

pour sentir la différence entre forward et sendRedirect visuellement voir la barre d'adresse de votre navigateur, en avant, vous ne verrez pas l'adresse de redirection (depuis le navigateur n'est pas impliqué) dans redirect, vous pouvez voir l'adresse redirigée.

17
répondu Anish Rai 2014-04-09 07:32:13

la simple différence entre Forward (demande ServletRequest, réponse ServletResponse) et sendRedirect (url String) est

forward ():

  1. la méthode forward() est exécutée du côté du serveur.
  2. la requête est un transfert vers une autre ressource du même serveur.
  3. cela ne dépend pas du protocole de requête du client puisque le La méthode forward () est fournie par le réservoir servlet.
  4. La demande est partagée par la ressource cible.
  5. un Seul appel est consommé dans cette méthode.
  6. Il peut être utilisé à l'intérieur du serveur.
  7. nous ne pouvons pas voir le message transmis, il est transparent.
  8. la méthode forward() est plus rapide que la méthode sendRedirect() .
  9. il est déclaré dans RequestDispatcher interface.

sendRedirect ():

  1. la méthode sendRedirect() est exécutée du côté du client.
  2. la requête est un transfert vers une autre ressource vers un autre serveur.
  3. la méthode sendRedirect() est fournie sous HTTP de sorte qu'elle ne peut être utilisée qu'avec les clients HTTP .
  4. une nouvelle demande est créée pour la ressource de destination.
  5. deux appels de demandes et de réponses sont utilisés.
  6. Il peut être utilisé à l'intérieur et à l'extérieur du serveur.
  7. nous pouvons voir l'adresse redirigée, il n'est pas transparent.
  8. la méthode sendRedirect() est plus lente parce que lorsque la nouvelle requête est créée, l'objet de l'ancienne requête est perdu.
  9. il est déclaré dans HttpServletResponse .
14
répondu Maulik Kakadiya 2015-12-28 07:06:09

1.rediriger renvoyer la demande au navigateur de serveur,puis de renvoyer la demande au serveur à partir du navigateur.

2.avant d'envoyer la requête à une autre servlet (servlet de servlet).

5
répondu sprite 2013-12-04 09:22:51

Rediriger et Demande répartiteur sont deux méthodes différentes pour déplacer la forme d'une page à l'autre. si nous utilisons redirect vers une nouvelle page en fait une nouvelle requête se produit du côté du client lui-même vers la nouvelle page. donc nous pouvons voir le changement dans L'URL. Puisque la redirection est une nouvelle requête, les anciennes valeurs de requête ne sont pas disponibles ici.

2
répondu Lijo 2013-12-04 09:52:28

redirection: renvoie la requête au navigateur/ client à partir du serveur,puis renvoie la requête au serveur à partir du navigateur/ client.

forward: envoyer la demande à un autre servlet (servlet to servlet) et ne pas envoyer la demande à un autre navigateur/ client .

0
répondu Shmily Nguyễn 2015-12-17 16:53:55