麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JSP > 正文

JSP 開發之Struts2內建自定義攔截器

2024-09-05 00:23:00
字體:
來源:轉載
供稿:網友

JSP 開發之Struts2內建自定義攔截器

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

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

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

<!--配置自定義攔截器--><interceptor name="攔截器名" class="實現類">  <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>配置好了攔截器之后,就可以在元素中使用該攔截器了,使用自定義攔截器時,還必須顯示使用系統默認的攔截器defaultStack。

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

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

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

因此,用戶自定義攔截器類需要實現該接口并提供該接口中的所有抽象方法的實現。不過Struts2還提供了該接口的一個直接實現類:AbstractInterceptor,該類提供了init()和destroy()方法的實現,我們只需要重寫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()) ;    //取得開始執行Action處理方法的時間    long start = System.currentTimeMillis() ;    //回調執行Action被攔截的處理方法    String result = invocation.invoke() ;    System.out.println("結束執行:" + new Date()) ;    //取得執行Action處理方法之后的時間    Long end = System.currentTimeMillis() ;    System.out.println("執行用時:" + (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>攔截器的執行順序:如果有多個攔截器同時作用于一個Action上時,遵循:在Action的控制方法執行之前,先定義的攔截器先作用執行;在Action的控制方法執行之后,先定義的攔截器后作用執行;也就是在invocation.invoke()方法這個點進行分界

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


注:相關教程知識閱讀請移步到JSP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 免费日本一区二区 | 日本精品黄色 | 免费三级大片 | 91精品国产免费久久 | 久久精品二区 | 欧美18一12sex性处hd | 91福利免费观看 | 日韩精品久久久久久久电影99爱 | av在线一区二区三区四区 | 久久久久免费精品国产小说色大师 | 在线观看福利网站 | 奶子吧naiziba.cc免费午夜片在线观看 | 久久免费视频7 | 国产精品999在线观看 | 国产99久久精品一区二区 | 激情夜色 | 精品久久久一二三区播放播放播放视频 | 操操插插| 国产日产精品一区四区介绍 | 欧美精品亚洲人成在线观看 | 毛片在哪里看 | 国产中文99视频在线观看 | 日韩欧美中文字幕视频 | 亚洲第一男人天堂 | 成人在线观看免费观看 | 香蕉视频网站在线观看 | 99热1| 欧洲精品久久久 | 久久99久久99精品 | 亚洲四播房 | 在线观看精品视频 | 性欧美性欧美 | 久久久久久久久久久影视 | 一级视频网站 | 成人性爱视频在线观看 | 五月天影院,久久综合, | 久久不雅视频 | 欧美一级网 | 一级性色| 在线播放免费人成毛片乱码 | 久久久久久91 |