Struts 2 erstellt einen eigenen Interceptor

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:

  1. Eine Klasse erstellen implementiertcom.opensymphony.xwork2.interceptor.Interceptor.

  2. Implementieren Sie die Methodeintercept(ActionInvocation invocation).

  3. Konfigurieren Sie den Interceptor instruts.xml.

  4. 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()...