In diesem Artikel wird Beispiele für die Weiterleitung und Interceptor in SpringMVC vorgestellt. Es wird wie folgt mit Ihnen geteilt:
Variable Parameter Beim Entwerfen von Methoden verwenden Sie数据类型... um Parametertypen zu deklarieren, z public static void function(int... numbers)
Bei der Implementierung der Methodekörper werden die variablen Parameter als Array verarbeitet
public class test {public static void main (String [] args) {System.out.println (test.sum (1,2,3)); System.out.println (test.sum (1,2,3,4,54)); } public static int sum (int ... numbers) {int sum = 0; für (int i = 0; i <number.length; i ++) {sum+= number [i]; } Return Sum; }}Hinweis: In jeder Methode ist höchstens 1 variabler Parameter zulässig, und wenn es einen variablen Parameter gibt, muss es der letzte Parameter sein.
Weiterleitung und Umleitung
Bei der Methode zur Bearbeitung von Anforderungen innerhalb des Controllers ist die Standardmethode zur Rückgabe einer Zeichenfolge weiterleitet. Der weitergeleitete Wert ist der Name der Ansichtskomponente, z. B. die Rückgabe "Login", die im Wesentlichen die Seite erhalten, die schließlich basierend auf dem Ansichtsresolver (ViewResolver) angezeigt wird. Die Syntax der Rückführung: Pfad repräsentiert eine Umleitung. Der Inhalt auf der rechten Seite der Umleitung ist der Weg. Dieser Pfad verwendet normalerweise einen relativen Pfad und wird basierend auf dem Pfad in der Adressleiste des aktuellen Clients als Standard referenziert. Beispielsweise lautet die aktuelle Adresse: http: // localhost: 8080/project/user/reg.do und dann zurück "recirect: login.do" und dann zu http: // localhost: 8080/project/user/login.do, wenn Sie zurückgeben. an http: // localhost: 8080/project/main/index.do
nach vorne:
Die Standardmethode, aber Sie können auch die Rückgabe "Forward: Login" verwenden.
Die zurückgegebene Ansicht muss eine Ansicht sein, die nach dem Durchlaufen des Ansichtsparsers an die angegebene Ansicht weitergeleitet wird.
umleiten:
Umleitung: Return "Redirect: Login.do"
Gibt einen Pfad zur Controller -Methode zurück, nicht zur Ansicht. Dies wird nicht durch den Ansichtsparser gehen, sondern direkt springen.
Beispiel
@RequestMapping (value = "/handle_reg.do", method = requestMethod.post) public String HandleG (Benutzerbenutzer, Modellmap -Karte) {try {userService.reg (Benutzer); System.out.println ("erfolgreich registriert!"); return "redirect: login.do"; // login.do zu der Steuermethode von login.do, login.do, an login.jsp} catch (usernameConflictException e) {System.out.println (e.getMessage ()) entspricht; map.put ("errormessage", e.getMessage ()); "Fehler" zurückgeben; }} @RequestMapping (value = "login.do") public String handlelogin () {return "login"; }Interceptor
Grundkonzepte
Mit Interceptor
Benutzerdefinierte Interceptor -Klasse
Erstellen Sie eine Intercept -Klasse (DemoInterceptor), um die Handlerinterzeptor -Schnittstelle zu implementieren
public class DemoInterceptorImplements HandlerInterceptor { /*** Berufen vor dem Prozessor* @Param Request HttpServletRequest -Objekt, das Anforderungsparameter usw. erhalten kann. Wenn True zurückgegeben wird, werden nachfolgende Interceptors und Prozessoren ausgeführt. zurückkehren; } / *** Berufen nach dem Prozessor, der ausgeführt wurde, und rufen Sie an, bevor Sie zu der angegebenen Ansicht springen posthandle (httpServletRequest -Anforderung, httpServletResponse -Antwort, Objekt Handler, modelandView modelandView) löst Ausnahme aus ( /*** 1. Sie können Ihre eigene Logik entwerfen, beispielsweise in einigen Fällen, in einigen Fällen falsch, Return true* 2. Return true bedeutet, dass der nachfolgende Prozessor und der Abfangvergessen, das falsche, das Verfahren zur Verantwortung des Verfahrens unterbricht wird. System.out.println ("Handler:"+Handler); System.out.println ("posthandler Ausführung des Demointerceptor"); // Setzen Sie den Namen der Ansicht, und nach Abschluss der Ausführung wird er auf die Seite index.jsp // modelandView.setViewName ("index") springen. } /** * Anruf * Nach Abschluss der Anfrageverarbeitung, öffentliche void AfterCompletion (httpServletRequest -Anforderung, httpServletResponse -Antwort, Objekthandler, Ausnahme ex) löst Ausnahme aus {System.out.println ("DemoInterceptor's Aftercompletion Execution"); }}Konfigurieren Sie in der SpringMVC -Konfigurationsdatei
Konfiguration
Muss in der obigen Reihenfolge konfiguriert werden, andernfalls wird ein Fehler gemeldet
<!-Konfigurieren Sie den Interceptor, bei dem mehrere Interceptors konfiguriert werden können-> <MVC: Interceptors> <mvc: Interceptor> <!-Konfigurieren Sie den Interceptor-Pfad und Intercept alle Prozessormethodenzuordnungen unter/Benutzer, z. <MVC: mapingPath = "/user/*"/> <!-Konfigurieren Sie die Controller-Methode, die vom Interceptor nicht abgefangen wird. Dies ist eine optionale Konfiguration, wie z. <mvc: exklude-mappingPath = "/user/login.do"/> <!-Konfigurieren Sie die Bean des Interceptors, geben Sie den vollständigen Klassennamen an-> <beanclass = "cn.tedu.spring.interceptor.DemoInterceptor"> </bean> </mvc: interceptor> </mvc: interceptors> </mvc: interceptors> </mvc: interceptors
Die Implementierungsmethode
öffentlicher boolescher Vorhandle (HttpServletRequest -Anfrage, HttpServletResponse -Antwort, Objekthandler)
public void postSandle (httpServletRequest -Anforderung, httpServletResponse -Antwort, Objekthandler, ModelAndView ModelandView)
Öffentliche Unterkunft (HttpServletRequest -Anforderung, HttpServletResponse -Antwort, Objekthandler, Ausnahme ex)
Demo -Anmeldeprüfung
Benutzerdefinierte Interceptor (LoginInterceptor)
Der spezifische Prozess ist sehr deutlich in der Prehandler -Methode geschrieben
öffentliche Klasse LoginInterceptorImplements HandlerInterceptor { / * * Berufen vor dem Prozessor (Nicht-Javadoc) * 1. Session Es besteht keine Notwendigkeit, den nachfolgenden Prozess auszuführen* Wenn nicht null, bedeutet dies, dass er angemeldet wurde, dann direkt true zurückgegeben und weiterhin den nachfolgenden Interceptor oder Prozessor ausführen*/ public boolean prehandle (httpServletRequest -Anfrage, HttpServletResponse -Antwort, Objekt Handler) Auslöste {{{{{{{) Session = Request = Request. // Sitzungsobjekt uid = session.getAttribute ("uid"); // Lesen Sie das Objekt in Sitzung // Wenn UID existiert, können Sie sich anmelden und vervollständigen, wenn (uid! = Null) {return true; // Return true, wenn die Anmeldung erfolgreich ist, müssen Sie den nachfolgenden Prozess} response.sendredirect ausführen (Request.getContextPath ()+"/user/login.do"); // Umleiten Sie die Anmeldeschnittstelle aus. // Return Falsch, der nachfolgende Prozess muss nicht ausgeführt werden, und es wird direkt unterbrochen. {}}Konfigurieren Sie Interceptor in SpringMVC
Da es hier nur zum Benutzerzentrum springt und die Anmeldung überprüfen muss, stimmt es nur mit user_center.do überein
<!-Konfigurieren Sie Interceptors, wobei mehrere Interceptors konfiguriert werden können-> <mvc: interceptors> <mvc: interceptor> <mvc: mapingPath = "/user/user_center
Ausführungsreihenfolge mehrerer Interceptors
Ausführen nach der in der SpringMVC -Konfigurationsdatei konfigurierten Reihenfolge der Reihenfolge der unter <mvc: Interceptors> konfigurierten Reihenfolge der Interceptors. Wenn ein Interceptor auf demselben Weg durchgeführt wird, dann der erste konfigurierte Erstinteremptor
Der Unterschied zwischen Interceptor und Filter (Hauptdifferenz)
Zusammenfassen
Interceptors können verwendet werden, wenn mehrere Anforderungen die gleichen oder sehr ähnlichen Aufgaben erfordern.
Entwickeln Sie einen Interceptor gut, dann müssen Sie ihn in der Konfigurationsdatei von SpringMVC konfigurieren
In <MVC: Interceptors>, wenn mehrere <mvc: interceptors> konfiguriert sind, bilden mehrere Interceptors eine Interceptor -Kette. Wenn mehrere Interceptors konfiguriert sind, fangen sie denselben Pfad ab und werden dann in der Reihenfolge der konfigurierten Knoten ausgeführt.
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.