Vorwort
Das Interceptor -System ist ein wichtiger Bestandteil des Struts2 -Frameworks. Es ist keine Übertreibung zu sagen, dass es ohne das Interceptor-System kein so benutzerfreundliches Struts2-Framework gibt. Im Struts2 -Framework hat eine große Anzahl von Interceptors viele grundlegende Funktionen erfüllt. Beispielsweise ist der Params -Interceptor für die Parsen der Parameter von HTTP -Anforderungen und das Festlegen der Aktionseigenschaften verantwortlich. Der Servlet-Config-Interceptor übergibt direkt die HTTPServletRequest-Instanz- und httpServletResponse-Instanz in der HTTP-Anfrage an Aktion; Der FileUpload-Interceptor ist dafür verantwortlich, die Dateidomäne in den Anforderungsparametern zu analysieren und eine Dateidomäne auf die drei Eigenschaften der Aktion festzulegen ... all dies wird vom integrierten Interceptor durchgeführt. Daher können wir die Prinzipien und Methoden der Verwendung von Interceptors in Struts2 beherrschen, wir können die "Lebensader" des Struts2 -Frameworks erfassen.
Bisher haben wir abgesehen von der Konfiguration eines StrutspreeteAndexecuteFilter -Filters in web.xml noch keine anderen Interceptors kontaktiert. Warum kann unsere Bewerbung gut laufen? Tatsächlich hat Struts2 standardmäßig eine große Anzahl gemeinsamer Interceptors ermöglicht. Diese Interceptors funktionieren so lange, wie das für die Aktion konfigurierte Paket das Struds-Default-Paket erbt. Schauen wir uns den eingebauten Interceptor von Struts2 an.
Struts2 eingebauter Interceptor
Es gibt viele eingebaute Abfangversänderungen im Struts2-Framework. Diese Interceptors werden fast 70% der Arbeiten des Struts2 -Frameworks abgeschlossen, einschließlich der Parsen -Anforderungsparameter, der Zuweisung von Anforderungsparametern an Aktionattribute usw. Das clevere Design von Struts2 ist hauptsächlich auf die Gestaltung des Interceptors zurückzuführen. Wenn die Struts2 -Funktion erweitert werden muss, müssen Sie nur den entsprechenden Interceptor bereitstellen und im Struts2 -Container konfigurieren.
Diese integrierten Interceptors sind in der Datei Struts-Default.xml in Form von Namensklassenpaaren konfiguriert, wobei der Name der Name des Interceptors ist, der die eindeutige Kennung des Interceptors später verwendet wird. Die Klasse gibt die Implementierungsklasse des Interceptor an. Eine detaillierte Beschreibung dieser integrierten Interceptors finden Sie in der offiziellen Dokumentation.
Konfigurieren Sie den Interceptor
Das Definieren eines Interceptors in der Datei von Struts.xml erfordert nur einen Interceptor -Namen für die Interceptor -Klasse, und die Interceptor -Definition wird abgeschlossen. Definieren Sie einen Interceptor mit <Interceptor .../> zum Beispiel:
<!-Definieren Sie den Interceptor, indem Sie den Interceptor-Namen und die Interceptor-Implementierungsklasse angeben.
Darüber hinaus können mehrere Interceptors miteinander verbunden werden, um einen Interceptor-Stapel zu bilden, und <Interceptor-Ref .../> wird im Interceptor verwendet, um die Interceptor-Referenz zu definieren. Zum Beispiel:
<interceptor-stack name = "interceptor stapel eins"> <interceptor-ref name = "interceptor eins"/> <interceptor-ref name = "Interceptor Two"/> ... </interceptor-stack>
Aus der Sicht der Programmstruktur besteht der Interceptor -Stack aus mehreren Interceptors. Aus Sicht der Programmfunktion sind der Interceptor -Stack und der Interceptor jedoch gleich, und die Methoden, die sie enthalten, werden automatisch vor der Ausführung der Methode zur Ausführung der Aktion ausgeführt. Daher können wir den Interceptor -Stapel vollständig als größeren Interceptor behandeln.
Da der Interceptor -Stack und der Interceptor konsistent sind, kann der Interceptor -Stapel auch einen Interceptor -Stapel enthalten, zum Beispiel:
<interceptor-stack name = "interceptor stack 2"> <interceptor-ref name = "modelDiven"/> <interceptor-ref name = "Interceptor Stack 1"/> </interceptor-stack>
Mit Interceptor
Sobald der Interceptor -Stack und der Interceptor definiert sind, kann dieser Interceptor -Stapel oder Interceptor verwendet werden, um die Aktion abzufangen. Das Interceptor -Verhalten des Interceptor wird vor der Ausführung der Aktion ausgeführt.
Durch die Verwendung des <interceptor-ref .../> -Elements entspricht die Konfigurationssyntax der Verwendung eines Interceptors in einer Aktion genau wie die Syntax der Referenzierung eines Interceptor bei der Konfiguration des Interceptor-Stacks. Zum Beispiel:
<action name = "login"> <result name = "error">/error.jsp </result> <result name = "Erfolg">/willkommen name = "key"> dynamische Parameter </param> </interceptor-ref> </action>
Nach Abschluss dieser Konfiguration funktionieren diese drei Interceptors, bevor die Downloadaktion ausgeführt wird.
Konfigurieren Sie den Standard -Interceptor
Bei der Konfiguration eines Pakets kann es mit einem Standard -Interceptor angegeben werden. Sobald ein Standard -Interceptor für ein Paket angegeben ist, funktioniert der Standard -Interceptor, wenn die Aktion in diesem Paket den Interceptor nicht explizit angibt. Sobald wir jedoch explizit einen Interceptor auf die Aktion im Paket anwenden, funktioniert der Standard -Interceptor nicht. Wenn für die Aktion der Standard -Interceptor verwendet werden muss, müssen Sie den Verweis auf den Interceptor manuell konfigurieren.
Der Standard -Interceptor für das Paket, in dem sich die Aktion befindet, wird nur dann wirksam, wenn in der Aktion keine ausdrücklich angewandte Aktion angewendet wird.
Konfigurieren Sie den Standard-Interceptor so, dass das Element <Standard-Interceptor-Ref .../> Element verwendet wird, das als Kind des <pakets .../> Elements verwendet wird, und konfigurieren Sie den Standard-Interceptor für alle Aktionen unter diesem Paket. Zum Beispiel:
<Standard-Interceptor-ref name = "Standard-Interceptor"/>
Sie können auch Parameter für den Standard -Interceptor angeben, zum Beispiel:
<Standard-Interceptor-ref name = "Standard-Interceptor"> <param name = "Parametername"> Parameterwert </param> </default-interceptor-ref>
In der Datei struts-default.xml wird ein abstraktes Paket mit dem Namen Strus-Default konfiguriert, in dem eine Standard-Interceptor-Referenz mit dem Namen DefaultStack definiert ist. Wenn das Paket, das wir definieren, das Struds-Default-Paket erbt, erbt es auch seinen Standard-Interceptor-Stack: defaultStack. Dies bedeutet auch, dass der Standardstack-Interceptor-Stapel automatisch wirksam wird, wenn wir den Interceptor zur Aktion nicht explizit anwenden.
Benutzerdefinierter Interceptor
1>. Fügen Sie eine Klasse hinzu, um die AbstractInterceptor -Klasse zu erben oder die Interceptor -Schnittstelle zu implementieren
öffentliche Klasse TimeInterceptor erweitert den AbstractInterceptor {/*** Der Rückgabewert der Kernmethode des Intercept ist eine Zeichenfolge*/@oversidePublic String Intercept (ActionInvocation Incialocation) löst Ausnahme aus {// todo automatisch generierte Methode Stubreturn "Login";}}2>. Fügen Sie Interceptors Child Node in Struts.xml -Paket hinzu und fügen Sie den Interceptor -Knoten darunter hinzu
<Package name = "Waren" Namespace = "/Waren" Extends = "Common-Pkg"> <Interceptors> <Interceptor name = "timeInterceptor"> </interceptor> </interceptors> </package>
3> .add Child Node Interceptor-Ref unter dem Aktionsknoten, den Sie abgefangen werden möchten
<Action name = "list_category" method = "list"> <interceptor-ref name = "timeInterceptor"> </interceptor-ref> <result name = "list" type = "disponcher">/pages/category/list.jsp </result> </action> </action> </action>
Zusammenfassen
Dieser Artikel enthält eine vorläufige Zusammenfassung des Kerns von Stuts2 - dem Interceptor. Im nachfolgenden Artikel werden wir unseren eigenen Interceptor implementieren und die in diesem Artikel zusammengefassten Wissenspunkte anwenden.
Okay, das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.