Struts2自定義攔截器

weixin_34391445發表於2017-10-30

概述

本文簡單介紹如何自定義一個Struts攔截器,但不涉及攔截器基礎、原理等其他知識,僅僅只是介紹自定義攔截器的步驟。本人目前的能力只能如此。我是學習Struts2時寫的這段文字,請帶著懷疑的態度閱讀。

詳細步驟

建立一個Struts2專案

建立一個HelloWorld專案,上一篇已經介紹過了,不贅述。

建立一個攔截器類

建立攔截器類必須要實現一個Interceptor 介面:

public interface Interceptor extends Serializable{
   void destroy();
   void init();
   String intercept(ActionInvocation invocation)
   throws Exception;
}

該介面中有3個方法:init(),intercept(),destroy()。init方法是初始化攔截器方法;destroy方法是攔截器清理方法;intercept 是攔截器方法,是實現攔截器功能的主要方法。

本例中攔截器繼承AbstractInterceptor,使用AbstractInterceptor預設的init和destroy方法,建立MyInterceptor類:

package com.xxx.action;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class MyInterceptor extends AbstractInterceptor{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
          /* let us do some pre-processing */
          String output = "Pre-Processing"; 
          System.out.println(output);

          /* let us call action or next interceptor */
          String result = invocation.invoke();

          /* let us do some post-processing */
          output = "Post-Processing"; 
          System.out.println(output);

          return result;
    }

}

簡單的解釋一下,String result = invocation.invoke();這行的作用是:如果還有其他攔截器,則呼叫其他攔截器,如果沒有,那麼就呼叫action方法。也就是說,在 invocation.invoke();之前是在呼叫action之前做的預處理,在 invocation.invoke();之後是對呼叫action後的結果的處理。

配置攔截器

在strtuts.xml中註冊攔截器:

 <interceptors>
        <interceptor name="myinterceptor" class="com.xxx.action.MyInterceptor"/>   
</interceptors>

name是攔截器名,是引用攔截器的標誌,class是攔截器的實現類的路徑。

在<action>標籤下為action配置攔截器:

 <action name="hello" 
            class="com.xxx.action.HelloWorldAction">
            
             <result name="success">/HelloWorld.jsp</result>
            <result name="error">/Erro.jsp</result>
            
            <interceptor-ref name="params"></interceptor-ref>
            <interceptor-ref name="myinterceptor"></interceptor-ref>
            
            
</action>

在<interceptor-ref name="myinterceptor"></interceptor-ref>中填寫正確的攔截器名。

部署到伺服器執行測試

在伺服器中執行即可,最終的專案結構如下:

3586633-b7237a24f83333da.png
Paste_Image.png

相關文章