Überblick
Dieser Artikel konzentriert sich auf die Implementierung von Weiterleitungen im Frühjahr und diskutieren die Gründe für jede Strategie.
Warum umleiten?
Überlegen wir zunächst, warum Sie in Ihrer Frühlingsanwendung möglicherweise eine Weiterleitung durchführen müssen.
Natürlich gibt es viele mögliche Beispiele und Gründe. Ein einfacher Bereich kann nach dem Formular Daten, um die doppelte Einreichung des Problems oder die Ausführungsstrom an eine andere Controller -Methode delegieren.
Eine Sache, die zu beachten ist, ist, dass das typische Beitrag/Weiterleitungs-/Get -Muster das Problem der Dual -Commit nicht angemessen löst - das Problem der Aktualisierung der Seite vor Abschluss des ersten Commits kann weiterhin zu einem doppelten Commit führen.
Umleiten Sie mit redirectView um
Beginnen wir mit dieser einfachen Methode - nehmen wir direkt ein Beispiel:
Hinter dem RedirectView feuern httpServletResponse.sendredirect () - Dies führt die tatsächliche Umleitung durch.
Beachten Sie, wie wir umgelenkte Eigenschaften in die Methode injizieren - im Rahmen ermöglicht es diesen Teil der schweren Arbeit, sodass wir mit diesen Eigenschaften interagieren können.
Wir fügen dem Modell recirectTtributes ein Attribut hinzu - enthüllen Sie es als HTTP -Abfrageparameter. Das Modell enthält Objekte - normalerweise Zeichenfolgen oder Objekte, die in Zeichenfolgen umgewandelt werden können.
Lassen Sie uns nun unsere Umleitungsfunktion testen - verwenden Sie einen einfachen Curl -Befehl, um dabei zu helfen:
Das Ergebnis wird sein:
Umleitung mithilfe der Umleitung: Präfix
Die vorherige Methode verwendet RedirectView, da sie aus bestimmten Gründen nicht optimal ist.
Erstens sind wir jetzt mit der Spring -API verbunden, da wir recirectView direkt in unserem Code verwenden.
Zweitens müssen wir von Anfang an wissen, dass bei der Implementierung des Controller -Betriebs seine Ergebnisse immer umgeleitet werden, dies ist jedoch nicht immer der Fall.
Eine bessere Option ist die Verwendung des Umleitungsumleitung: Präfix - Der Name der Umleitungsansicht wird wie andere logische Ansichtsnamen in den Controller injiziert. Der Controller weiß nicht einmal, dass die Umleitung stattfindet.
Es sieht so aus:
Wenn der Ansichtsname mit Umleitung zurückgegeben wird:, die URLBasedViewResolver -Klasse (und alle ihre Unterklassen) erkennt sie als besondere Anzeige, die umgeleitet werden muss. Der Rest des Ansichtsnamens wird als Umleitungs -URL behandelt.
Hier gibt es einen Ort zu beachten - wenn wir hier die logische Ansicht von Redirect:/recirectedurl verwenden, führen wir einen Umleitungsumleiter aus, der sich auf den aktuellen Servlet -Kontext bezieht.
Wenn Sie zu einer absoluten URL umgeleitet werden müssen, können wir einen Namen wie diesen verwenden: Weiterleiten: http: // localhost: 8080/Spring-re-redirect/reciretedurl.
Wenn wir jetzt den Befehl curl ausführen:
Wir werden sofort eine Weiterleitung erhalten:
Weiterleiten mit dem Vorabprefix
Lassen Sie uns nun sehen, wie man etwas etwas anderes macht - eine Weiterleitung.
Bevor Sie sich den Code ansehen, schauen wir uns eine schnelle und hochrangige Zusammenfassung der Semantik der Weiterleitung und Umleitung an:
Die Umleitung reagiert mit einer neuen URL, die den 302 -Antwortcode und den Standort -Header enthält. Dann stellt der Browser/Client eine Anfrage an die neue URL erneut auf der Serverseite weiter. Der Servlet Container leitet dieselbe Anfrage an die Ziel -URL weiter. Die URL im Browser muss nicht geändert werden
Schauen wir uns nun den Code an:
Wie umgeleitet:, der vorwärts: Das Präfix wird von urlbasedViewresolver und seinen Unterklassen analysiert. Innen wird ein InternalResourceView erstellt, der einen RequestDispatcher.forward () -Operation für die neue Ansicht ausführt.
Wenn wir den Befehl mit Curl ausführen:
Wir erhalten HTTP 405 (keine erlaubte Methode):
In diesem Fall haben wir nur eine Anfrage vom Browser/Client an die Serverseite gesendet, verglichen mit den beiden Anforderungen, die wir in der Umleitungslösung haben. Natürlich werden die von Umleitungen hinzugefügten Eigenschaften nicht benötigt.
Eigenschaften, die Redirectattributes enthalten
Als nächstes - schauen wir uns die Übergabe von Immobilien in einer Weiterleitung an - nutzen Sie die RedirectTtribures im Rahmen:
Wie bereits erwähnt, können wir Eigenschaftsobjekte direkt in die Methode einfügen - was den Mechanismus sehr einfach macht.
Beachten Sie auch, dass wir auch ein Flash -Attribut hinzufügen - dies ist eine Eigenschaft, die der URL nicht hinzugefügt wird. Wir können diese Eigenschaft erreichen - wir können später @ModelAttribute ("FlashAttribute") in der umgeleiteten endgültigen Zielmethode verwenden, um auf das Flash -Attribut zuzugreifen:
Also erfolgreich vollständig - wenn Sie Curl verwenden müssen, um die Funktion zu testen:
Wir werden an den neuen Ort umgeleitet:
Auf diese Weise gibt es uns die Möglichkeit, einige Eigenschaften nur zwischen den beiden am Umleitungsvorgang beteiligten Methoden zu teilen.
Eine andere Konfiguration ohne Präfixe
Erforschen wir nun eine andere Konfiguration - Umleitung ohne Präfixe.
Um dies zu erreichen, müssen wir org.springframework.web.servlet.view.xmlviewresolver verwenden:
Anstelle von org.springframework.web.servlet.view.internalResourceViewResolver haben wir in unserer vorherigen Konfiguration verwendet:
Wir müssen auch eine RedirectView -Bean in der Konfiguration definieren:
Jetzt können wir uns über die ID auf diese neue Bohne beziehen, um die Umleitung auszulösen:
Um es zu testen, verwenden wir den Befehl curl erneut:
Das Ergebnis wird sein:
HTTP -Postanforderung Anfrage umleiten
Für Anwendungsfälle wie Bankzahlungen müssen wir möglicherweise HTTP -Postanfragen umleiten. Abhängig vom zurückgegebenen HTTP -Statuscode kann die Postanforderung an HTTP GET oder Post weitergeleitet werden.
Gemäß der HTTP 1.1 -Protokollreferenz können die Statuscodes 301 (dauerhaft entfernt) und 302 (gefunden) ermöglichen, dass die Anforderungsmethode von Post zu erhalten geändert wird. Die Spezifikation definiert auch die relevanten 307 (temporären Umleitung) und 308 (permanente Umleitung) Statuscodes, mit denen die Anforderungsmethode nicht zu ermöglichen, die Anforderungsmethode zu erhalten.
Schauen wir uns nun den Code an, um die Postanforderung in eine andere Postanforderung umzuleiten:
Verwenden wir nun den Befehl curl, um den umgeleiteten Beitrag zu testen:
Wir werden an die Zieladresse umgeleitet:
abschließend
In diesem Artikel werden drei verschiedene Möglichkeiten zur Implementierung von Weiterleitungen im Frühjahr eingeführt, wie man Attribute bei der Durchführung dieser Weiterleitungen und zum Umgang mit Umleitungen von HTTP -Postanforderungen umleitet.
Das obige ist der Leitfaden für VSpring -Umleitung (Umleitung) und verwandte Strategieprobleme, die Ihnen vom Herausgeber vorgestellt wurden. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!