Ich habe ein Problem mit meinem Seitensprung, wenn ich Java verwende, wenn ich Folgendes verwende:
response.sendRedirect("login.jsp")
dann bekomme ich diese url: http://localhost:8080/login.jsp
Aber wenn ich benutze
request.getRequestDispathcer("login.jsp").forward(request, response)
dann bekomme ich diese url: http://localhost:8080/Shopping/login.jsp
(das "Shopping" ist der Name meines Moduls).
Was ist der Unterschied?
Um den Unterschied einfach zu erklären,
response.sendRedirect("login.jsp");
stellt den Kontextpfad nicht voran (bezieht sich auf die Anwendung/das Modul, in der/dem das Servlet gebündelt ist)
aber wohingegen
request.getRequestDispathcer("login.jsp").forward(request, response);
wird den Kontextpfad der jeweiligen Anwendung voranstellen
Darüber hinaus wird Redirect request verwendet, um Ressourcen zu verschiedenen Servern oder Domänen umzuleiten. Diese Übertragung der Steuerungsaufgabe wird vom Container an den Browser delegiert. Das heißt, die Umleitung sendet einen Header zurück an den Browser/Client. Dieser Header enthält die Ressourcen-URL, die vom Browser umgeleitet werden soll. Dann leitet der Browser eine neue Anfrage an die angegebene URL ein.
Weiterleitungsanforderung wird verwendet, um an Ressourcen weiterzuleiten, die auf dem Server verfügbar sind, von dem aus der Anruf getätigt wird. Diese Übertragung der Kontrolle wird vom Container intern durchgeführt und der Browser/Client ist nicht beteiligt.
nach vorne
Die Steuerung kann an Ressourcen weitergeleitet werden, die auf dem Server verfügbar sind, von dem aus der Anruf getätigt wird. Diese Übertragung der Kontrolle wird vom Container intern durchgeführt und der Browser/Client ist nicht beteiligt. Dies ist der Hauptunterschied zwischen forward und sendRedirect. Wenn die Weiterleitung abgeschlossen ist, werden die ursprünglichen Anforderungs- und Antwortobjekte bei Bedarf zusammen mit zusätzlichen Parametern übertragen.
umleiten
Die Steuerung kann auf Ressourcen zu verschiedenen Servern oder Domänen umgeleitet werden. Diese Übertragung der Steuerungsaufgabe wird vom Container an den Browser delegiert. Das heißt, die Umleitung sendet einen Header zurück an den Browser/Client. Dieser Header enthält die Ressourcen-URL, die vom Browser umgeleitet werden soll. Dann leitet der Browser eine neue Anfrage an die angegebene URL ein. Da es sich um eine neue Anforderung handelt, geht das alte Anforderungs- und Antwortobjekt verloren.
Beispielsweise kann sendRedirect die Steuerung von http://google.com nach http://anydomain.com übertragen, aber forward kann dies nicht.
"Sitzung" geht nicht sowohl bei der Weiterleitung als auch bei der Umleitung verloren.
Um den Unterschied zwischen "forward" und "sendRedirect" zu erkennen, sehen Sie in der Adressleiste Ihres Browsers visuell. In "forward" wird die weitergeleitete Adresse (da der Browser nicht an der Weiterleitung beteiligt ist) nicht angezeigt. In "redirect" wird die weitergeleitete Adresse angezeigt.
Einfacher Unterschied zwischen Forward
(ServletRequest-Anforderung, ServletResponse-Antwort) und sendRedirect
(String-URL) ist
forward ():
forward()
wird serverseitig ausgeführt.forward ()
vom Servlet-Container bereitgestellt wird.sendRedirect()
-Methode.RequestDispatcher
deklariert.sendRedirect ():
sendRedirect()
wird clientseitig ausgeführt.sendRedirect()
wird unter HTTP
bereitgestellt, sodass sie nur mit HTTP
Clients verwendet werden kann.sendRedirect()
ist langsamer, da beim Erstellen einer neuen Anforderung das alte Anforderungsobjekt verloren geht.HttpServletResponse
deklariert.1.Leiten Sie die Anforderung vom Server an den Browser zurück und senden Sie sie vom Browser erneut an den Server.
2.Senden Sie die Anfrage weiter an ein anderes Servlet (Servlet an Servlet).
Redirect und Request Dispatcher sind zwei verschiedene Methoden, um von einer Seite zur nächsten zu wechseln. Wenn wir die Umleitung auf eine neue Seite verwenden, geschieht tatsächlich eine neue Anforderung von der Clientseite selbst auf die neue Seite. So können wir die Änderung in der URL sehen. Da es sich bei der Umleitung um eine neue Anforderung handelt, sind die alten Anforderungswerte hier nicht verfügbar.