web-dev-qa-db-fra.com

Quelle est la différence entre response.sendRedirect () et request.getRequestDispatcher (). Forward (demande, réponse)

J'ai un problème de saut de page lorsque j'utilise Java, si j'utilise:

response.sendRedirect("login.jsp")

alors je reçois cette URL: http://localhost:8080/login.jsp

Mais si j'utilise

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

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

Quelle est la différence?

48
roger

Pour expliquer simplement la différence,

  response.sendRedirect("login.jsp");

ne pas préfixer le chemin de contexte (fait référence à l'application/au module dans lequel la servlet est intégrée)

mais alors que

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

va précéder le contextpath de l'application respective

De plus, demande de redirection est utilisé pour rediriger les ressources vers différents serveurs ou domaines. Cette tâche de transfert de contrôle 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 lance une nouvelle demande à l’URL donnée.

Requête de transfert est utilisé pour transférer aux ressources disponibles sur le serveur à partir duquel l'appel est effectué. Ce transfert de contrôle est effectué par le conteneur en interne et le navigateur/client n'est pas impliqué.

75
Keerthivasan

vers l'avant

Le contrôle peut être transféré aux ressources disponibles sur le serveur à partir duquel l'appel est effectué. Ce transfert de contrôle est effectué par le conteneur en interne et le navigateur/client n'est pas impliqué. C'est la différence majeure entre forward et sendRedirect. Lorsque le transfert est terminé, les objets de requête et de réponse d'origine sont transférés avec des paramètres supplémentaires si nécessaire.

réorienter

Le contrôle peut être redirigé vers des ressources vers différents serveurs ou domaines. Cette tâche de transfert de contrôle 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 lance une nouvelle demande à l’URL donnée. Comme il s'agit d'une nouvelle demande, l'ancien objet de demande et de réponse est perdu.

Par exemple, sendRedirect peut transférer le contrôle de http://google.com à http://anydomain.com mais la transmission ne peut pas le faire.

La "session" n’est pas perdue à la fois en avant et en redirection.

Pour sentir la différence entre forward et sendRedirect, visualisez visuellement la barre d'adresse de votre navigateur. En mode forward, vous ne verrez pas l'adresse transférée (car le navigateur n'est pas impliqué) dans la redirection, vous pouvez voir l'adresse redirigée.

17
Anish Rai

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

forward ():

  1. La méthode forward() est exécutée côté serveur.
  2. La demande est transférée vers une autre ressource du même serveur.
  3. Cela ne dépend pas du protocole de requête du client car la méthode forward () est fournie par le conteneur de servlets.
  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é dans le serveur.
  7. Nous ne pouvons pas voir le message transféré, il est transparent.
  8. La méthode forward () est plus rapide que la méthode sendRedirect().
  9. Il est déclaré dans l'interface RequestDispatcher.

sendRedirect ():

  1. La méthode sendRedirect() est exécutée côté client.
  2. La demande est transférée 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 demande et de réponse sont consommés.
  6. Il peut être utilisé à l'intérieur et à l'extérieur du serveur.
  7. Nous pouvons voir l'adresse redirigée, ce n'est pas transparent.
  8. La méthode sendRedirect() est plus lente car lors de la création d'une nouvelle requête, l'ancien objet de requête est perdu.
  9. Il est déclaré dans HttpServletResponse.
15
Maulik Kakadiya

1.redirect renvoie la demande au navigateur depuis le serveur, puis renvoyez la demande au serveur à partir du navigateur.

2. envoyer la demande à un autre servlet (servlet à servlet).

5
sprite

Redirect et Request Dispatcher sont deux méthodes différentes pour déplacer le formulaire d'une page à une autre. Si nous utilisons la redirection vers une nouvelle page, une nouvelle requête est en train de passer du côté client à la nouvelle page. afin que nous puissions voir le changement dans l'URL. La redirection étant une nouvelle demande, les anciennes valeurs de demande ne sont pas disponibles ici.

2
Lijo