Struts 2 erstellen einen eigenen Abfangjäger
Laden Sie es herunter -Struts2-Create-Own-Interceptor-Example.zip
In diesem Tutorial wird gezeigt, wie Sie in Struts 2 einen eigenen Interceptor erstellen.
Zusammenfassende Schritte:
-
Eine Klasse erstellen implementiertcom.opensymphony.xwork2.interceptor.Interceptor.
-
Implementieren Sie die Methodeintercept(ActionInvocation invocation).
-
Konfigurieren Sie den Interceptor instruts.xml.
-
Verknüpfen Sie es mit der Aktion.
Struts 2 interceptors
Struts 2 enthält viele fertige Interceptors. Überprüfen Sie die Liste deravailable Struts 2 interceptors, bevor Sie Ihren eigenen Interceptor erstellen.
Ein vollständiges Beispiel zum Erstellen eines eigenen Abfangjägers:
1. Aktion
Eine einfache Aktion, um die Benutzeranforderung weiterzuleiten und eine Nachricht auszudrucken.
HelloAction.java
package com.example.common.action; import com.opensymphony.xwork2.ActionSupport; public class HelloAction extends ActionSupport{ public String execute() throws Exception { System.out.println("HelloAction execute() is called"); return SUCCESS; } }
2. Abfangjäger
Ein vollständiges Interceptor-Beispiel.
PrintMsgInterceptor.java
package com.example.common.interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; public class PrintMsgInterceptor implements Interceptor{ //called during interceptor destruction public void destroy() { System.out.println("CustomInterceptor destroy() is called..."); } //called during interceptor initialization public void init() { System.out.println("CustomInterceptor init() is called..."); } //put interceptor code here public String intercept(ActionInvocation invocation) throws Exception { System.out.println("CustomInterceptor, before invocation.invoke()..."); String result = invocation.invoke(); System.out.println("CustomInterceptor, after invocation.invoke()..."); return result; } }
Explanation
Die Interceptor-Klasse musscom.opensymphony.xwork2.interceptor.Interceptor interface implementieren. Während der Interceptor-Initialisierung wirdinit() aufgerufen; Interceptor-Zerstörung,destroy() heißt. Zuletzt fügen Sie den gesamten Interceptor-Code, der die Arbeit erledigt, in dieintercept(ActionInvocation invocation)-Methode ein.
invocation.invoke()
Bei der Interceptor Intercept () -Methode geben Siemust called the invocation.invoke() ein und geben das Ergebnis zurück. Dies ist die Methode, die für den Aufruf des nächsten Interceptors oder der nächsten Aktion verantwortlich ist. Die Aktion konnte nicht fortgesetzt werden, ohne die Methodeinvocation.invoke()aufzurufen.
destroy() is not reliable
Es wird nicht empfohlen, Code indestroy() einzufügen, da diese Methode nicht zuverlässig ist. Wenn Ihr Anwendungsserver zwangsweise heruntergefahren oder durch einen Befehl beendet wird, werden diedestroy() nicht aufgerufen.
3. struts.xml
Konfigurieren Sie den Interceptor in der Dateistruts.xml.
pages/hello.jsp
4. Demo
Während der Serverinitialisierung wird die Methode des Interceptorsinit()aufgerufen.
INFO: Overriding property struts.i18n.reload - old value: false new value: true 15 Julai 2010 11:37:42 AM com.opensymphony.xwork2.util.logging.commons.CommonsLogger info INFO: Overriding property struts.configuration.xml.reload - old value: false new value: true CustomInterceptor init() is called... 15 Julai 2010 11:37:42 AM org.apache.coyote.http11.Http11Protocol start INFO: Starting Coyote HTTP/1.1 on http-8080 15 Julai 2010 11:37:42 AM org.apache.jk.common.ChannelSocket init INFO: JK: ajp13 listening on /0.0.0.0:8009 15 Julai 2010 11:37:42 AM org.apache.jk.server.JkMain start INFO: Jk running ID=0 time=0/20 config=null 15 Julai 2010 11:37:42 AM org.apache.catalina.startup.Catalina start INFO: Server startup in 994 ms
Während Sie über die URL auf die Aktion zugreifen:http://localhost:8080/Struts2Example/helloAction.action
INFO: Overriding property struts.i18n.reload - old value: false new value: true 15 Julai 2010 11:37:42 AM com.opensymphony.xwork2.util.logging.commons.CommonsLogger info INFO: Overriding property struts.configuration.xml.reload - old value: false new value: true CustomInterceptor init() is called... 15 Julai 2010 11:37:42 AM org.apache.coyote.http11.Http11Protocol start INFO: Starting Coyote HTTP/1.1 on http-8080 15 Julai 2010 11:37:42 AM org.apache.jk.common.ChannelSocket init INFO: JK: ajp13 listening on /0.0.0.0:8009 15 Julai 2010 11:37:42 AM org.apache.jk.server.JkMain start INFO: Jk running ID=0 time=0/20 config=null 15 Julai 2010 11:37:42 AM org.apache.catalina.startup.Catalina start INFO: Server startup in 994 ms CustomInterceptor, before invocation.invoke()... HelloAction execute() is called CustomInterceptor, after invocation.invoke()...