Loading...

          java .net

          開始學(xué)習(xí)struts2(六)

          前兩天實踐了關(guān)于攔截器的具體實現(xiàn),說實話關(guān)于底層實現(xiàn)還沒有看明白,看jdk的源碼中的
          public static Class<?> getProxyClass(ClassLoader loader,Class<?>... interfaces)
          方法,好長啊
          迂回一下,今兒看struts2的具體攔截器Interceptor怎么配置
          配置可比自己寫實現(xiàn)攔截器容易多了
          1、首先寫一個攔截器類,攔截器類有兩只寫法(目前俺知道的)
          一種是顯示com.opensymphony.xwork2.interceptor.Interceptor接口,com.opensymphony.xwork2.interceptor.Interceptor接口有三個方法destroy()、init()和String intercept(ActionInvocation actionInvocation),跟過濾器差不多
          這里指出的是init初始化方法將在容器啟動是調(diào)用這個方法。
          package com.test.interceptor;

          /**
          * Created by IntelliJ IDEA.
          * User: Administrator
          * Date: 2009-1-15
          * Time: 16:34:17
          * To change this template use File | Settings | File Templates.
          */
          import com.opensymphony.xwork2.interceptor.Interceptor;
          import com.opensymphony.xwork2.ActionInvocation;

          public class MyInterceptor implements Interceptor{

              public void destroy() {

              }

              public void init() {

              }

              public String intercept(ActionInvocation actionInvocation) throws Exception {

                  System.out.println("test intercept begin");
                  String result = actionInvocation.invoke();
                  System.out.println("test intercept finish");
                  return result;
              }
          }

          另一種就是繼承com.opensymphony.xwork2.interceptor.AbstractInterceptor,這是個抽象類,并實現(xiàn)了com.opensymphony.xwork2.interceptor.Interceptor接口,分別實現(xiàn)了init和destroy方法,但什么都沒做,繼承AbstractInterceptor后,實現(xiàn)intercept方法就行了,
          這里指出的是在intercept方法中執(zhí)行actionInvocation.invoke();執(zhí)行所攔截的action中的方法;
          2、攔截器寫完了剩下就是配置了,這里要用到struts.xml的組織結(jié)構(gòu)<struts>中有<package>包的的概念,包與包之間可以繼承extends,就像子類繼承父類一樣,子類將擁有父類的屬性和配置,我們一般都繼承extends="struts-default",而struts-default定義在struts2-core.jar 中的struts-default.xml中,struts-default包中定義了很多struts2提供的攔截器和攔截器棧(攔截器棧可以包含多個攔截器或攔截器棧),struts2的好多功能都是實現(xiàn)在這些攔截器中,其中有個<default-interceptor-ref name="defaultStack"/>標(biāo)簽定義了默認(rèn)的攔截器,如果<action>配置中沒有攔截器配置,那就調(diào)用默認(rèn)攔截器,如果有攔截器配置,要么同時加上默認(rèn)攔截器,要么在自己的package中加入設(shè)置默認(rèn)攔截器的標(biāo)簽。
          <package name="capinfo" extends="struts-default">
                  <interceptors>
                      <interceptor name="myInterceptor" class="com.test.interceptor.MyInterceptor">
                      </interceptor>
                  </interceptors>
                  <action name="HelloWorld"
                      class="com.capinfo.struts2.action.HelloWordAction">
                      <result>/HelloWorld.jsp</result>
                      <interceptor-ref name="myInterceptor"></interceptor-ref>
                      <interceptor-ref name="defaultStack"></interceptor-ref>
                  </action>
           
                  <!-- Add your actions here -->
              </package>

          posted on 2009-01-16 16:08 閱讀(290) 評論(0)  編輯  收藏 所屬分類: 學(xué)習(xí)java

          公告

          希望有一天

          我能用鼠標(biāo)雙擊我的錢包

          然后選中一張100元

          按住“ctrl+c”

          接著不停的“ctrl+v”

          嘻嘻~~~笑醒~~~



          導(dǎo)航

          <2009年1月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          統(tǒng)計

          常用鏈接

          留言簿(6)

          隨筆分類(102)

          隨筆檔案(398)

          文章分類

          文章檔案(10)

          有趣網(wǎng)絡(luò)

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 大化| 靖远县| 社旗县| 白河县| 凤庆县| 长汀县| 海安县| 墨脱县| 闸北区| 红河县| 兴文县| 镇远县| 炉霍县| 石景山区| 凭祥市| 灵武市| 镇康县| 全州县| 横峰县| 上犹县| 绍兴县| 尉犁县| 博罗县| 黎川县| 定结县| 庐江县| 江源县| 黄陵县| 梅河口市| 桐柏县| 石林| 平阴县| 高要市| 凤庆县| 通渭县| 喀喇| 偏关县| 抚顺市| 平和县| 嘉兴市| 南平市|