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?
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é.
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.
La simple différence entre Forward
(demande ServletRequest, réponse ServletResponse) et sendRedirect
(String url) est
forward ():
forward()
est exécutée côté serveur.forward ()
est fournie par le conteneur de servlets.sendRedirect()
.RequestDispatcher
.sendRedirect ():
sendRedirect()
est exécutée côté client.sendRedirect()
est fournie sous HTTP
de sorte qu'elle ne peut être utilisée qu'avec les clients HTTP
.sendRedirect()
est plus lente car lors de la création d'une nouvelle requête, l'ancien objet de requête est perdu.HttpServletResponse
.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).
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.