<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    溫故知新:struts2_06其他功能:攔截器

    struts2的攔截器其實和過濾器是一個概念,雖然自定義的過濾器用的不多,但是struts2的核心功能都是用攔截器來實現(xiàn)的,異常捕獲,參數(shù)綁定,和國際化等等。

    寫一個最簡單的過濾器的例子,感受一下自定義過濾器的使用就好。
    先上action
     1 package demo.action;
     2 
     3 public class InterceptorDemo {
     4     
     5     private String name;
     6     
     7     public String execute(){
     8         System.out.println("我是Execute的方法");
     9         System.out.println("name:" + name);
    10         return "success";
    11     }
    12     
    13     //get/set方法略
    14     
    15 }
    16 
    創(chuàng)建一個interceptor只需要新建一個類,繼承struts2的AbstractInterceptor,重寫intercept方法
     1 package demo.interceptor;
     2 
     3 import com.opensymphony.xwork2.ActionInvocation;
     4 import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
     5 
     6 public class InterceptorDemo extends AbstractInterceptor{
     7 
     8     private static final long serialVersionUID = -1739072578539674220L;
     9 
    10     @Override
    11     public String intercept(ActionInvocation invocation) throws Exception {
    12         
    13         System.out.println("我是一個炫酷的攔截器");
    14         
    15         //校驗用戶是否登陸等操作
    16         //ServletActionContext.getContext().getSession()...
    17         
    18         //校驗用戶是否有權限訪問等操作
    19         //invocation.getProxy().getActionName()...
    20         
    21         return invocation.invoke();
    22     }
    23 
    24 }
    25 
    如此一來,攔截器就創(chuàng)建好了,接下來就是對攔截器的配置,看到struts.xml
     1    <package name="interceptorDemo" extends="struts-default" namespace="/">
     2    
     3        <!-- 需要在包內(nèi)聲明攔截器,之后可以定義在action中定義對聲明攔截器的引用 -->
     4        <interceptors>
     5            <interceptor name="InterceptorDemo" class=demo.interceptor.InterceptorDemo"/>
     6        </interceptors>
     7    
     8        <!-- 在指定的action中使用指定的攔截器 -->
     9       <action name="interceptorDemo" 
    10             class="demo.action.InterceptorDemo" 
    11             method="execute">
    12             <interceptor-ref name="InterceptorDemo"/>
    13       </action>
    14
    15    </package>
    將定義好的攔截器添加到某個action的定義中,讓攔截器攔截對應的action,但如果如上述那樣去配置的話,除了自定義攔截器的功能,struts2 的攔截器功能都會失效,action中的name值根本拿不到。配置中的每個包都會繼承struts-default這個包,簡單看一下struts-default.xml這個文件
     1 <interceptor-stack name="defaultStack">
     2   <interceptor-ref name="exception"/>
     3  <interceptor-ref name="alias"/>
     4  <interceptor-ref name="servletConfig"/>
     5  <interceptor-ref name="i18n"/>
     6  <interceptor-ref name="prepare"/>
     7  <interceptor-ref name="chain"/>
     8  <interceptor-ref name="scopedModelDriven"/>
     9  <interceptor-ref name="modelDriven"/>
    10  <interceptor-ref name="fileUpload"/>
    11  <interceptor-ref name="checkbox"/>
    12  <interceptor-ref name="multiselect"/>
                        ...
         <interceptor-ref name="debugging"/>
        </interceptor-stack>
                        ...
        <default-interceptor-ref name="default-stack"/>
                        ...
    上述就是部分配置,定義了默認的攔截器棧,也就是一組攔截器,從名字就可以看出很多功能都由攔截器完成,所以,自定義的攔截器也需要引用這一組攔截器,需要在配置中添加默認攔截器棧
    1 <action name="interceptorDemo" 
    2             class="org.duyt.action.InterceptorDemo" 
    3             method="execute">
    4             <interceptor-ref name="InterceptorDemo"/>
    5             <interceptor-ref name="defaultStack"/>
    6 </action>
    或者定義一組攔截器棧
     1        <interceptors>
     2            <interceptor name="InterceptorDemo" class="demo.interceptor.InterceptorDemo"/>
     3         
     4            <!-- 聲明的攔截器棧一定要引用defaultStack,不然struts2無法發(fā)揮作用,參數(shù)封裝等最基本的功能都會失效 -->
     5            <interceptor-stack name="selfStack">
     6                <interceptor-ref name="InterceptorDemo"/>
     7                <interceptor-ref name="defaultStack"/>
     8            </interceptor-stack>
     9        </interceptors>
    10    
    11          <!-- 在指定的action中使用指定的攔截器 -->
    12       <action name="interceptorDemo" 
    13             class="demo.action.InterceptorDemo" 
    14             method="execute">
    15             <interceptor-ref name="selfStack"/>
    16       </action>
    這樣,自定義的攔截器就能融入到完整的功能之中。

    posted on 2014-11-02 09:28 都較瘦 閱讀(145) 評論(0)  編輯  收藏 所屬分類: MVCFramework

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統(tǒng)計

    公告

    博客定位:囿于目前的水平,博客定位在記錄自己的學習心得和隨手的練習

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品午夜国产va久久| 亚洲精品韩国美女在线| 国产精品亚洲专区一区| 扒开双腿猛进入爽爽免费视频| 亚洲经典在线中文字幕| 久久国产精品成人片免费| 亚洲欧洲日产韩国在线| 97性无码区免费| 亚洲熟妇无码AV| 国产一区二区三区在线观看免费| 精品国产亚洲AV麻豆 | 日韩免费一区二区三区在线| 亚洲AV综合色区无码二区偷拍| 毛片在线免费视频| 免费亚洲视频在线观看| 亚洲国产精品一区二区三区久久 | 日韩精品福利片午夜免费观着| 亚洲一区二区观看播放| 在线观看亚洲免费视频| 一区二区三区在线免费| 亚洲AV午夜成人片| 最近最新MV在线观看免费高清| 久久久久亚洲精品无码网址色欲 | 日本免费xxxx色视频| 亚洲男人天堂2022| 亚洲国产精品人人做人人爽| 中文字幕乱码一区二区免费| 亚洲国产成人无码av在线播放| 国产免费69成人精品视频| 三上悠亚在线观看免费| 亚洲一区二区三区无码国产| 免费a级毛片无码a∨性按摩| 在线观看免费播放av片| 亚洲综合成人婷婷五月网址| 国产a v无码专区亚洲av| 精品无码免费专区毛片| 日韩大片在线永久免费观看网站 | 亚洲一区二区成人| 国产午夜鲁丝片AV无码免费| 久操免费在线观看| 亚洲a∨无码一区二区|