濮阳杆衣贸易有限公司

主頁 > 知識庫 > JSP 開發(fā)之Struts2內建自定義攔截器

JSP 開發(fā)之Struts2內建自定義攔截器

熱門標簽:百度地圖添加標注圖標樣式 如何用中國地圖標注數字點 好操作的電話機器人廠家 地圖標注市場怎么樣 泰州泰興400電話 怎么申請 南京新思維電話機器人 南昌市地圖標注app 企業(yè)怎么在聯(lián)通申請400電話 聊城智能電銷機器人外呼

JSP 開發(fā)之Struts2內建自定義攔截器

Struts2的自定義攔截器主要用于解析請求參數,將請求參數賦值給Action屬性,執(zhí)行數據校驗,文件上傳等等操作。當需要擴展Struts2的功能時,我們只需要提供相應的攔截器并將它配置到Struts2容器中即可;當我們不需要使用的時候,只需要取消它在Struts2容器中的配置就行了。

1>配置攔截器主要使用四個配置元素:

:用于配置自定義攔截器
:用于引用攔截器或者攔截器棧
:用于配置自定義攔截器棧,一個攔截器棧由多個攔截器構成,也可以包含其他的攔截器棧
:擁有配置參數

!--配置自定義攔截器-->
interceptor name="攔截器名" class="實現(xiàn)類">
  param name>../param>
  ...
/interceptor>

!--配置攔截器棧,用于一次性過引用多個攔截器-->
interceptor-stack name="攔截器棧名">
  interceptor-ref name="攔截器1" />
  interceptor-ref name="攔截器2">
    param name>../param>
    ...
  /interceptor-ref>
  !--也可以引用攔截器棧-->
  interceptor-ref name="攔截器棧名" />
/interceptor-stack>

2>配置好了攔截器之后,就可以在元素中使用該攔截器了,使用自定義攔截器時,還必須顯示使用系統(tǒng)默認的攔截器defaultStack。

package ..>
  !--配置包下所有Action的默認攔截器--》
  !--如果Action配置了自己的攔截器,那么默認攔截器將不會配置到該Action下-->
  default-interceptor-ref name="defaultStack" />
  action ...>
    !--配置自己的interceptor攔截器-->
    interceptor-ref name="myInterceptor" />
    !--因為已經配置了自己的攔截器,所以包默認配置攔截器將不作用,因此需要自己顯示配置defaultStack系統(tǒng)默認攔截器-->
    interceptor-ref name="defaultStack" />
  /action>
/package>

3>用戶自定義攔截器:Struts2提供了Interceptor攔截器原生接口:

public interface Interceptor extends Serializable
{
  //初始化攔截器的回調方法
  void init() ;
  //實現(xiàn)攔截的處理方法
  String intercept(ActionInvocation invocation) throws Exception ;
  //銷毀攔截器之前的回調方法
  void destroy() ;
}

因此,用戶自定義攔截器類需要實現(xiàn)該接口并提供該接口中的所有抽象方法的實現(xiàn)。不過Struts2還提供了該接口的一個直接實現(xiàn)類:AbstractInterceptor,該類提供了init()和destroy()方法的實現(xiàn),我們只需要重寫intercept()攔截方法即可:

public class simpleInterceptor extends AbstractInterceptor
{
  private String username ;
  private String password ;
  //omit setter and getter methods
  @Override
  public String intercept(ActionInvocation invocation) throws Exception 
  {
    //獲取被攔截的Action實例
    LoginAction action = (LoginAction)invocation.getAction() ;
    System.out.println("開始攔截:" + new Date()) ;
    //取得開始執(zhí)行Action處理方法的時間
    long start = System.currentTimeMillis() ;
    //回調執(zhí)行Action被攔截的處理方法
    String result = invocation.invoke() ;
    System.out.println("結束執(zhí)行:" + new Date()) ;
    //取得執(zhí)行Action處理方法之后的時間
    Long end = System.currentTimeMillis() ;
    System.out.println("執(zhí)行用時:" + (end-start) +"ms") ;
    return result ;
  }
}

上面提供的AbstractInterceptor類定義的攔截器會攔截Action內的所有處理方法,如果只想攔截指定的方法,或者想指定哪些方法攔截,哪些方法不攔截,可以使用Struts2提供的MethodFilterInterceptor類,該類是AbstractInterceptor類的子類,提供了下面三個主要的方法:

1>String doIntercept(ActionInvocation invocation) throws Exception:同intercept()方法作用一樣
2>void setIncludeMethods(String includeMethods):設置需要被攔截的方法名
3>void setExcludeMethods(String excludeMethods):設置不需要被攔截的方法名

其中兩個setter方法可以在配置該攔截器時通過param元素來指定屬性值

interceptor name="simpleIntercept2" class="com.chengxi.SimpleInterceptor2">
  param name="includeMethods">login,execute/param>
  param name="excludeMethods">regiset/param>
/interceptor>

4>攔截器的執(zhí)行順序:如果有多個攔截器同時作用于一個Action上時,遵循:在Action的控制方法執(zhí)行之前,先定義的攔截器先作用執(zhí)行;在Action的控制方法執(zhí)行之后,先定義的攔截器后作用執(zhí)行;也就是在invocation.invoke()方法這個點進行分界

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

您可能感興趣的文章:
  • struts2自定義攔截器的示例代碼
  • struts2如何使用攔截器進行用戶權限控制實例
  • Struts2之Action接收請求參數和攔截器詳解
  • Struts2攔截器登錄驗證實例
  • Java的Struts2框架中攔截器使用的實例教程
  • JavaWeb中Struts2攔截器深入分析(一)
  • struts2過濾器和攔截器的區(qū)別分析
  • Struts攔截器實現(xiàn)攔截未登陸用戶實例解析

標簽:山南 烏蘭察布 開封 白銀 吉林 臨汾 自貢 銅川

巨人網絡通訊聲明:本文標題《JSP 開發(fā)之Struts2內建自定義攔截器》,本文關鍵詞  JSP,開,發(fā)之,Struts2,內建,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《JSP 開發(fā)之Struts2內建自定義攔截器》相關的同類信息!
  • 本頁收集關于JSP 開發(fā)之Struts2內建自定義攔截器的相關信息資訊供網民參考!
  • 推薦文章
    天台县| 彭泽县| 永福县| 南丰县| 五原县| 桂林市| 民丰县| 安化县| 准格尔旗| 贵南县| 陆河县| 霍邱县| 贵南县| 泌阳县| 巴彦淖尔市| 和龙市| 佛冈县| 武平县| 康乐县| 治县。| 肇庆市| 成武县| 临漳县| 蕉岭县| 金门县| 峨边| 锡林浩特市| 麻栗坡县| 绥化市| 政和县| 深泽县| 永德县| 肃宁县| 涞水县| 宕昌县| 秦皇岛市| 湾仔区| 工布江达县| 祥云县| 正定县| 车致|