Der Interceptor Interceptor in SpringMVC ist ebenfalls sehr wichtig und nützlich. Die Hauptfunktion besteht darin, Benutzeranfragen abzufangen und die entsprechende Verarbeitung durchzuführen. Beispielsweise kann es die Berechtigungsüberprüfung durchführen oder feststellen, ob der Benutzer angemeldet ist, oder feststellen, ob die aktuelle Zeit die Kaufzeit von Ticket wie 12306 ist.
1. Definieren Sie die Interceptor -Implementierungsklasse
Interceptor -Intercept -Anfragen in SpringMVC werden über Handlerinterceptor implementiert. Es ist sehr einfach, einen Interceptor in SpringMVC zu definieren. Es gibt zwei Hauptmethoden. Der erste Weg besteht darin, die Interceptor -Klasse zu definieren, die die Feder HandlerInterceptor -Schnittstelle implementiert, oder diese Klasse erbt die Klasse, die die Handlerinterceptor -Schnittstelle implementiert, z. Der zweite Weg besteht darin, die Spring WebRequestInterceptor -Schnittstelle zu implementieren oder die Klasse zu erbt, die die WebRequestInterceptor -Schnittstelle implementiert.
(I) Implementierung der Handlerinterzeptor -Schnittstelle
In der Handlerinterceptor -Schnittstelle sind drei Methoden definiert, und wir verwenden diese drei Methoden, um Benutzeranforderungen abzufangen.
(1) PREHANDLE (HTTPServletRequest -Anforderung, HttpServletResponse -Antwort, Objektverhandlung), wie der Name schon sagt, wird vor dem Verarbeiten der Anforderung aufgerufen. Interceptor in SpringMVC wird in Kettenform aufgerufen. Mehrere Interceptors können gleichzeitig in einer Anwendung oder in einer Anfrage existieren. Jeder Interceptor-Aufruf wird nach seiner Erklärung nach der Erklärung nacheinander ausgeführt, und die ersten werden die Vorhand-Methode im Interceptor ausgeführt. Daher können einige Vorinitialisierungsvorgänge in dieser Methode oder in dieser Methode vorverarbeitet werden, oder einige Urteile können in dieser Methode vorgenommen werden, um zu entscheiden, ob die Anfrage fortgesetzt werden sollte.
Der Rückgabewert dieser Methode besteht aus booleschen Booleschen Typ. Wenn es zu False zurückkehrt, bedeutet dies, dass die Anfrage endet und der nachfolgende Interceptor und Controller nicht erneut ausgeführt werden. Wenn der Rückgabewert wahr ist, wird die Prehandle -Methode des nächsten Interceptors weiterhin aufgerufen. Wenn es bereits der letzte Interceptor ist, wird die Controller -Methode der aktuellen Anforderung aufgerufen.
(2) Posthandle (HttpServletRequest -Anforderung, HttpServletResponse -Antwort, Objekthandle, ModelAndView ModelAndView) Methode. Aus der Erläuterung der Prehandle -Methode wissen wir, dass diese Methode, einschließlich der späteren erwähnten Aftercompletion -Methode, nur dann aufgerufen werden kann, wenn der Rückgabewert der Prehandle -Methode des aktuellen Interceptors zu wahr ist.
Die Post -Handle -Methode wird, wie der Name schon sagt, nach der Verarbeitung der aktuellen Anforderung ausgeführt, dh nachdem die Controller -Methode aufgerufen wurde. Sie wird jedoch vor dem Rückgabeteil des DispatcherServlets und der Ansicht aufgerufen, sodass wir nach dem Controller -Prozess in dieser Methode mit dem ModelAndView -Objekt arbeiten können. Die Richtung des Aufrufs der Post -Handle -Methode ist das Gegenteil von Prehandle, was bedeutet, dass die zuerst die Post -Handle -Methode des Interceptors später ausgeführt wird, was dem Ausführungsprozess des Interceptors in Struts2 etwas ähnlich ist. Der Ausführungsprozess des Interceptors in Struts2 ist ebenfalls verkettet, aber in Struts2 muss die Aufrufmethode der AktionInvokation manuell aufgerufen werden, um den Aufruf zum nächsten Interceptor oder der nächsten Aktion auszulösen. Dann wird der Inhalt in jedem Interceptor vor der Aufrufmethode in der deklarierten Reihenfolge ausgeführt, und der Inhalt nach der Aufrufmethode wird umgekehrt.
(3) Aftercompletion (HTTPServletRequest -Anforderung, HTTPServletResponse -Antwort, Objektverhandlung, Ausnahmex) Methode muss ausgeführt werden, wenn der Rückgabewert des vorhanden entsprechenden Interceptor -Vorhandle -Methode wahr ist. Wie der Name schon sagt, wird diese Methode nach Abschluss der gesamten Anfrage ausgeführt, dh nachdem der DispatcherServlet die entsprechende Ansicht wiedergegeben hat. Die Hauptfunktion dieser Methode besteht darin, Ressourcen zu bereinigen.
Hier ist eine einfache Codebeschreibung:
importieren javax.servlet.http.httpServletRequest; importieren javax.servlet.http.httpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelandView; Die öffentliche Klasse SpringMvCinterceptor implementiert HandlerInterceptor { /*** Die Vorhandle -Methode wird für die Abfangen von Prozessor verwendet. Wie der Name schon sagt, wird diese Methode vor dem Controller -Prozess aufgerufen. Der Interceptor -Interceptor in SpringMVC ist gekettet, und es können mehrere Interceptors gleichzeitig existieren. Anschließend wird SpringMVC gemäß der Reihenfolge der Erklärung einzeln ausführen, und alle Vorhand -Methoden im Interceptor werden aufgerufen, bevor die Controller -Methode aufgerufen wird. Die Interceptor -Kettenstruktur von SpringMVC kann ebenfalls unterbrochen werden. Diese Interrupt -Methode macht den Rückgabewert von Prehandle zu False. Wenn der Rückgabewert von Prehandle falsch ist, endet die gesamte Anfrage. */ @Override public boolean prehandle (httpServletRequest-Anforderung, httpServletResponse-Antwort, Objekthandler) löst eine Ausnahme aus {// Todo automatisch generierter Methode Stub Return Falsch; } /*** Diese Methode wird nur ausgeführt, wenn der aktuelle Rückgabewert der Prehandle -Methode des Interceptor true. Posthandle wird für das Abfangen von Prozessor verwendet. Seine Ausführungszeit ist nach dem Verarbeitung des Prozessors*, dh nachdem die Controller -Methode aufgerufen wurde, aber es wird ausgeführt, bevor der DispatcherServlet die Ansicht rendert, was bedeutet, dass Sie in dieser Methode die ModellAndView*bedienen können. Die Kettenstruktur dieser Methode ist das Gegenteil der normalen Zugangsrichtung, dh die zuerst deklarierte Methode wird später aufgerufen. Dies ähnelt dem Ausführungsprozess des Interceptors in Struts2. * Nur in der Intercept -Methode in Struts2 sollte die aufgerufene Aktionsmethode manuell aufgerufen werden. Die aufgerufene Aktionsmethode in Struts2 besteht darin, den nächsten Interceptor * oder die Aktion aufzurufen, und dann die Inhalte, die vor dem Interceptor aufgerufen werden müssen, werden vor dem Aufruf geschrieben, und der Inhalt, der nach dem Interceptor aufgerufen werden muss, werden nach dem Anruf bei der Invoke -Methode geschrieben. * / @Override public void posthandle (httpServletRequest-Anforderung, httpServletResponse-Antwort, Objekthandler, modelAndView modelAndView) löst eine Ausnahme aus (// toDo automatisch generierter Methode Stub} / *** Diese Methode muss auch ausgeführt werden, wenn der Rückgabewert der aktuellen Reprequenz-Interceptor-Methode der Vorhanden-Methode wahr ist. Diese Methode wird nach Abschluss der gesamten Anfrage ausgeführt, dh der DispatcherServlet rendert die Ausführung der Ansicht. * Die Hauptfunktion dieser Methode besteht darin, Ressourcen zu bereinigen. Natürlich kann diese Methode nur ausgeführt werden, wenn der aktuelle Rückgabewert der Prehandle -Methode des Interceptor wahr ist. */ @Override public void AfterCompletion (httpServletRequest-Anforderung, httpServletResponse-Antwort, Objekthandler, Ausnahme ex) Ausnahme {// Todo automatisch generierter Methode Stub}}}}}}} (Ii) Implementieren Sie die WebRequestInterceptor -Schnittstelle
In WebRequestInterceptor sind auch drei Methoden definiert, und wir verwenden diese drei Methoden auch, um Abfangen zu implementieren. Alle drei Methoden passieren den gleichen Parameter -WebRequest. Was ist diese Webrequest? Diese Web -Ausführung ist eine von Frühling definierte Schnittstelle. Die darin enthaltenen Methodendefinitionen entsprechen im Grunde genommen mit httpServletRequest. Alle Operationen, die im WebRequestInterceptor im WebRequestInterceptor ausgeführt werden, werden mit httpServletRequest synchronisiert und dann in der aktuellen Anfrage übergeben.
(1) Methode PREHhandle (WebRequest Request). Diese Methode wird aufgerufen, bevor die Anforderung verarbeitet wird, dh sie wird aufgerufen, bevor die Controller -Methode aufgerufen wird. Diese Methode unterscheidet sich vom Vorhanden -Handlerinterzeptor. Die Hauptdifferenz besteht darin, dass der Rückgabewert der Methode ungültig ist, was bedeutet, dass es keinen Rückgabewert gibt. Daher verwenden wir es im Allgemeinen, um Ressourcen vorzubereiten. Wenn wir beispielsweise Hibernate verwenden, können wir ein Hibernate -Sitzungsobjekt in dieser Methode vorbereiten und dann die SetAttribute (Name, Wert, Umfang) von WebRequest verwenden, um es in die WebRequest -Eigenschaft zu bringen. Hier können wir über den dritten Parameterbereich der SetAttribut -Methode sprechen, die vom ganzzahligen Typ entspricht. Drei Konstanten werden für die übergeordnete Layer -Schnittstelle von WebRequest definiert:
Scope_Request: Sein Wert beträgt 0, was bedeutet, dass er nur in Anfrage zugänglich ist.
Scope_Session: Sein Wert beträgt 1. Wenn die Umgebung dies zulässt, stellt sie eine lokale isolierte Sitzung dar, ansonsten stellt sie eine normale Sitzung dar und kann im Rahmen der Sitzung zugegriffen werden.
Scope_Global_Session: Ihr Wert beträgt 2.. Wenn die Umgebung dies zulässt, stellt sie eine global gemeinsam genutzte Sitzung dar, ansonsten stellt sie eine normale Sitzung dar und kann im Rahmen der Sitzung zugegriffen werden.
(2) Posthandle (WebRequest -Anforderung, Modellmapmodell) Methode. Diese Methode wird nach der Anforderungsverarbeitung aufgerufen, dh nach dem Aufrufen der Controller -Methode, wird jedoch vor dem Rendern der Ansicht aufgerufen, sodass Sie die Anzeige von Daten ändern können, indem Sie das Datenmodellmodellmap in dieser Methode ändern. Diese Methode hat zwei Parameter. Das WebRequest -Objekt wird verwendet, um die gesamten Anforderungsdaten zu übergeben. Beispielsweise können die in Vorhanden erstellten Daten über WebRequest übergeben und zugegriffen werden. Modellmap ist das nach dem Controller -Prozess zurückgegebene Modellobjekt. Wir können das zurückgegebene Modellmodell ändern, indem wir seine Eigenschaften ändern.
(3) Aftercompletion (WebRequest Request, Ausnahmex) Methode. Diese Methode wird nach Bearbeitung der gesamten Anfrage ausgeführt, dh nach zurückgegebener und gerenderter Ansicht. Daher kann in dieser Methode der Ressourcenfreigabebetrieb durchgeführt werden. Der WebRequest -Parameter kann die Ressourcen übergeben, die wir hier in Prehandle zur Veröffentlichung erstellt haben. Der Ausnahmeparameter repräsentiert das aktuell angeforderte Ausnahmeobjekt. Wenn die im Controller ausgelöste Ausnahme vom Spring -Ausnahmeprozessor verarbeitet wurde, ist das Ausnahmebobjekt null.
Hier ist eine einfache Codebeschreibung:
import org.springframework.ui.modelmap; import org.springframework.web.context.request.webrequest; import org.springframework.web.context.request.webrequestInterceptor; Die öffentliche Klasse AllInterceptor implementiert WebRequestInterceptor { /*** Ausführen, bevor die Anfrage bearbeitet wird. Diese Methode wird hauptsächlich zur Erstellung von Ressourcendaten verwendet, und dann können sie als Anforderungsattribute in WebRequest eingesetzt werden. request.setAttribute ("request", "request", WebRequest.scope_request); // Dies wird im Rahmen der Anfrage platziert, sodass Sie nur Anfrage erhalten können Wenn die Umgebung dies zulässt, kann sie nur in einer lokal isolierten Sitzung zugegriffen werden. Andernfalls kann in der normalen aktuellen Sitzung zugegriffen werden. Request.SetAttribute ("GlobalSession", "GlobalSession", WebRequest.scope_Global_Session); // Wenn die Umgebung dies zulässt, kann in einer global gemeinsam genutzten Sitzung zugegriffen werden. Andernfalls kann in der normalen aktuellen Sitzung zugegriffen werden}/*** Diese Methode wird ausgeführt, nachdem der Controller ausgeführt wird und vor der Rückgabe in die Ansicht ausgeführt wird. Modellmap stellt das Modellobjekt dar, das zurückgegeben wurde, nachdem der Controller angefordert wurde, den Controller zu verarbeiten, sodass die Eigenschaften der Modellmap in dieser Methode geändert werden können, um den Effekt der Änderung des zurückgegebenen Modells zu erreichen. */ @Override public void posthandle (WebRequest-Anforderung, ModelMap Map) löst Ausnahme aus {// Todo automatisch generierter Methode Stub für (String-Schlüssel: map.keyset ()) system.out.println (Schlüssel + "--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- AfterCompletion (WebRequest-Anforderung, Ausnahmeausnahme) löst Ausnahme aus {// Todo automatisch generierte Methode Stub System.out.println (Ausnahme + "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= "); }}2. Fügen Sie die definierte Interceptor -Klasse zum Intercept -System von SpringMVC hinzu
1. Fügen Sie ein Schema hinzu, das MVC in der SpringMVC -Konfigurationsdatei unterstützt
xmlns: mvc = "http://www.springframework.org/schema/mvc" xsi: schemalocation = "http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd "
Hier ist ein Beispiel für meine Aussage:
<beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-sinstance xmlns: mvc = "http://www.springframework.org/schema/mvc" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/sschema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd ">
Auf diese Weise können Sie das MVC -Tag in der SpringMVC -Konfigurationsdatei verwenden. Es gibt einen MVC: Interceptors im MVC -Tag, mit dem der Interceptor von SpringMVC deklariert wird.
(Ii) Verwenden Sie das MVC: Interceptors -Tag, um den Interceptor zu deklarieren, der der SpringMVC -Interceptor -Kette hinzugefügt werden muss
<MVC: Interceptors> <!- Verwenden Sie Bean, um einen Interceptor zu definieren. Der Interceptor, der direkt unter der Wurzel von MVC definiert ist: Interceptors wird alle Anforderungen abfangen-> <bean/> <mvc: interceptor> <mvc: mabelling path = "/test/nummer"/> <!
Aus dem obigen Beispiel können wir erkennen, dass eine Reihe von Abfangvorführern mit dem Tag MVC: Interceptors deklariert werden kann und dann eine Interceptor -Kette bilden kann. Die Ausführungsreihenfolge des Interceptors wird in der Reihenfolge der Erklärungen ausgeführt. Die Prehandle -Methode im deklarierten Interceptor wird zuerst ausgeführt, aber seine Post -Handle -Methode und Aftercompletion -Methode werden später ausgeführt.
Es gibt zwei Hauptmethoden, um Interceptor unter dem MVC: Interceptors -Tag zu deklarieren:
(1) Definieren Sie direkt ein Bohnenobjekt der Interceptor -Implementierungsklasse. Der auf diese Weise deklarierte Interceptor -Interceptor wird alle Anfragen abfangen.
(2) Verwenden Sie das MVC: Interceptor -Tag, um zu deklarieren. Auf diese Weise deklarierte Interceptor kann den Anforderungsweg definieren, der über den MVC: Mapping -Subtag abgefangen werden muss.
Nach den beiden oben genannten Schritten wird der definierte Interceptor handeln, um spezifische Anforderungen abzufangen.
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.