Struts 2 создает собственный перехватчик

Struts 2 создает собственный перехватчик

Скачать -Struts2-Create-Own-Interceptor-Example.zip

В этом уроке показано, как создать собственный перехватчик в Struts 2.

Сводные шаги:

  1. Создать класс реализуетcom.opensymphony.xwork2.interceptor.Interceptor.

  2. Реализуйте методintercept(ActionInvocation invocation).

  3. Настройте перехватчик вstruts.xml.

  4. Свяжите это с действием.

Struts 2 interceptors
Struts 2 поставляется с множеством готовых перехватчиков, убедитесь, что вы проверили списокavailable Struts 2 interceptors, прежде чем создавать свой собственный перехватчик.

Полный пример создания собственного перехватчика:

1. действие

Простое действие, чтобы переслать запрос пользователя и распечатать сообщение.

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. истребитель-перехватчик

Полный пример перехватчика.

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
Класс перехватчика должен реализовыватьcom.opensymphony.xwork2.interceptor.Interceptor interface. Во время инициализации перехватчика вызываетсяinit(); вызывается уничтожение перехватчикаdestroy(). Наконец, поместите весь код перехватчика, который выполняет эту работу, в методintercept(ActionInvocation invocation).

invocation.invoke()
В методе перехватчика intercept () выmust called the invocation.invoke() и возвращаете его результат. Этот метод отвечает за вызов следующего перехватчика или действия. Действие не будет продолжено без вызова методаinvocation.invoke().

destroy() is not reliable
Не рекомендуется помещать какой-либо код внутриdestroy(), потому что этот метод ненадежен. Когда ваш сервер приложений принудительно завершает работу или завершается с помощью команды,destroy() не будет вызываться.

3. struts.xml

Настройте перехватчик в файлеstruts.xml.





  

    
    

         
            
        
          

    

    
    
    pages/hello.jsp
     

   

4. Demo

Во время инициализации сервера вызывается метод перехватчикаinit().

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

При доступе к действию через URL: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()...