Im vorherigen Abschnitt haben wir den grundlegenden Betrieb des Einkaufswagens abgeschlossen, aber es gibt ein Problem: Wenn der Benutzer klickt, um sich zu regeln, sollten wir ein Anmeldeurteil vornehmen, um festzustellen, ob der Benutzer angemeldet ist. Wenn er nicht angemeldet ist, muss er sich zunächst anmelden lassen. Dadurch wird die Technologie der Filter verwendet. Der Filter fängt die Seitenanforderungen speziell ab. Es ähnelt dem Prinzip eines Interceptors. Der Interceptor stellt die Aktionsanfragen spezifisch ab, sodass jeder seine eigenen Verwendungszwecke hat. Wenn es sich um eine Seite handelt, ohne eine Aktion zu durchlaufen, müssen wir nur einen Interceptor schreiben. Wenn wir zur Verarbeitung zu einer Aktion springen müssen, müssen wir einen Interceptor schreiben.
1. Das Prinzip des Anmeldessprung <br /> Lassen Sie mich zuerst über das Implementierungsprinzip sprechen: Schreiben Sie einen Filter und konfigurieren Sie die URL, die in web.xml abgefangen werden muss. Auf diese Weise wird der von uns geschriebene Filter, wenn die URL des Benutzers an die Konfiguration des Benutzers entspricht, ausgeführt. Im Filter prüfen wir zunächst, ob ein Benutzer in der Sitzung angemeldet ist. Wenn es keinen Hinweis darauf gibt, dass es keine Anmeldung gibt, erhalten Sie die Seiten-URL und die Parameter, auf die der Benutzer zugreifen möchte, sie in die URL einfügen und in die Sitzung einfügen und dann auf die Anmeldeseite umleiten, sich anmelden und zur Aktionsverarbeitung springen und nach der Verarbeitung zur in der Sitzung gespeicherten URL springen, in der der Benutzer ursprünglich gehen sollte. Dadurch wird der Anmeldessprung abgeschlossen.
2. Implementierung von Anmeldessprung
Wenn die reale Einkaufswagen -Seite verwendet wird, klicken wir auf die Kasse, und es wird wie folgt automatisch zur Bestellbestätigungsseite springen:
Wenn der Benutzer jedoch zu diesem Zeitpunkt nicht angemeldet ist, werden wir definitiv nicht direkt zur Bestellbestätigungsseite springen, daher müssen wir einen Filter verwenden, um ihn zu blockieren und ein Urteil zu fällen. Schreiben wir den Filter unten:
2.1 Implementierung von Filtern
Die Filterimplementierung muss die Filterschnittstelle implementieren und drei Methoden überschreiben. Tatsächlich müssen wir hauptsächlich einen von ihnen überschreiben. wie folgt:
Public Class UserFilter implementiert Filter {@Override public void destroy () {// Todo automatisch generierte Methode Stub} @Override public void dofilter (ServletRequest Request, ServletResponse-Antwort, Filterchain-Kette) Throws IoException, ServletException {httpletRectRectRectRectRectREQUEST) (httplequest) {httpletRectrequest) (htttplequest) {httpletRectRectrequest-Anfrage; HttpServletResponse res = (httpServletResponse) Antwort; // Bestimmen Sie, ob die aktuelle Sitzung Benutzerinformationen enthält, wenn (req.getSession (). GetAtTribute ("Benutzer") == NULL) {// die URL -Adresse speichern, dass der aktuelle Kunde zu String gourl = req.getServletPath (); // die Adresse erhalten möchte, die der Benutzer zu String param = req.getQueryString () (); // Erhalten Sie die Parameter in der Adresse, wenn (param! = Null) {gourl = gourl + "?" + Param; // Die Anforderungsadresse + Parameter} // die Adresse speichern, auf die der aktuelle Kunde in der Sitzung req.getSession () zugreifen möchte. // Illegale Anfrage, zur Anmeldeseite req.getSession (). res.sendredirect (req.getContextPath () + "/ulogin.jsp"); } else {// Wenn es den nächsten Filter gibt, springen, ansonsten direkt zur Zielseitenkette.dofilter (Anfrage, Antwort); }} @Override public void init (filterConfig config) löscht servleTexception {// Todo automatisch generierter Methode Stub}} aus Nach dem Implementierungscode zu urteilen, ist die Dofilter -Methode hauptsächlich Durchfall. Bestimmen Sie in der Methode zunächst, ob in der aktuellen Sitzung Benutzerinformationen vorhanden sind. Wenn nicht, bedeutet dies, dass es keine Anmeldung gibt. Anschließend müssen Sie zuerst die URL -Adresse und Parameter in der Adresse speichern, zu der der Benutzer sie gehen möchte, sie in eine neue URL buchstabieren und in der Sitzung speichern und dann in die Anmeldeseite umleiten, um sich der Benutzer anzumelden. Wenn Benutzerinformationen in der Sitzung vorhanden sind, bedeutet dies, dass Sie sich angemeldet haben und direkt auf die Seite freigeben. Der Benutzer möchte.
Vergessen Sie nach dem Schreiben von Filter nicht, die URL so zu konfigurieren, dass sie in Web.xml filtert, wie folgt:
Also wird der oben genannte $ {Shop} /user/confirm.jsp gefiltert. Schauen wir uns als nächstes die Anmeldeseite an. Es hat tatsächlich zwei Kästchen, Benutzername und Passwort, was hauptsächlich davon abhängt, zu welcher Aktion es springt:
Wir sehen, dass es zur Login -Methode in der Benutzeraktion springt, um die Logik auszuführen. Hier implementieren wir die Benutzeraktion:
2.2 Aktionsumsetzung
In der BenutzerAktion machen wir zunächst ein Anmeldeurteil, dh nach Benutzern mit dem Benutzernamen und dem Kennwort in der Datenbank. Wenn es erfolgreich ist, speichern Sie den Benutzer in der Sitzung und geben Sie es dann ein Ergebnis zurück und geben Sie es für die Verarbeitung an Struts2 weiter. Der Code ist wie folgt:
@Controller ("userAction") @Scope ("Prototyp") öffentliche Klasse UserAction erweitert Baseaction <Beer> {public String login () {// Beurteilung des Login -Modells = UserService.login (Modell); if (model == null) {session.put ("fehler", "Anmeldung fehlgeschlagen"); Rückgabe "Login"; } else {// Anmelden erfolgreich, speichern Sie zuerst den Benutzer in Sitzungssitzung.put ("Benutzer", Modell); // verteidigen Sie den Sprung der Seite basierend darauf, ob die GORL in der Sitzung einen Wert hat, wenn (Session.get ("gourl") == null) {return "Index"; // Überspringen Sie zur Homepage} else {return "gourl"; }}}}Schauen wir uns die Konfiguration in Struts.xml an:
Da wir die Gourl in der Sitzung haben, aber in Struts.xml, können wir die Sitzung und dann die Parameter im Java -Code nicht erhalten, aber wir können sie aus dem Wertstapel nehmen. Das obige ist die Methode, um Daten aus dem Wertstapel abzurufen.
2.3 Anmeldeurteil der Serviceschicht
Die Serviceschicht ist hauptsächlich die Anmeldemethode, die in der obigen Aktion verwendet wird, und die Implementierung ist wie folgt relativ einfach:
// UserService Interface Public Interface UserService erweitert BaseService <BeuN> {// Der Benutzer protokolliert sich ein und gibt den Benutzer der öffentlichen Benutzeranmeldung (Benutzerbenutzer) an und gibt zurück. } // UserServiceImpl implementierungen @Service ("UserService") öffentliche Klasse UserServiceImpl erweitert BaseSeServiceImpl <Benutzer> implementiert UserService {@Override öffentliche Benutzeranmeldung (Benutzerbenutzer) {String HQL = "From User U Where U.Login =: Login und U.Pass =: Pass"; return (user) getSession (). createEquery (HQL) // .setString ("Login", user.getLogin ()) // .SetString ("Pass", user.getPass () // .uniqueresult (); }}Ok, wir verwenden Filter, um das Urteil und Sprung der Benutzeranmeldung zu erkennen. Nach dem Anmeldung können wir zur Bestellbestätigungsseite springen. Der Effekt ist wie folgt:
Der gesamte Prozesstest wurde abgeschlossen und die Funktion ist normal. Tatsächlich können wir es ein wenig mehr verbessern. Wir sollten tatsächlich ein Login -Urteil fällen, bevor wir es dem Einkaufswagen hinzufügen. Das heißt, die Einkaufswagenseite befindet sich bereits im Anmeldeszustand, und hier finden Sie die Bestellbestätigungsseite, um die Anmeldung zu bestimmen. Wenn wir jedoch vor der Einkaufswagen -Seite Urteile fällen, ist es für uns schwierig, den Filter zu verwenden. Wir müssen den Interceptor verwenden, da die Aktionsanfrage keine gewöhnliche Seite ist, wenn sie auf die Einkaufswagen -Seite springen. Bei der Anfrage von Aktionen müssen wir den Interceptor verwenden, um ihn abzufangen. Lassen Sie uns dies später verbessern. Jetzt werden wir die Funktionen hier im Grunde genommen implementieren. Okay, Login -Urteilsvermögen und Sprung sind fertig.
Originaladresse: http://blog.csdn.net/eson_15/article/details/51425010
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.