§封Ja葬va§

          Struts2核心攔截器

          當(dāng)struts2經(jīng)過輸入校驗(yàn)階段(struts2系列---輸入校驗(yàn))后,接著將調(diào)用execute()業(yè)務(wù)邏輯方法。有時(shí)我們需要在執(zhí)行execute()方法之前先進(jìn)行比如登陸驗(yàn)證之類的判斷。只有登陸過的用戶才能進(jìn)行業(yè)務(wù)操作。這時(shí)就需要用到Struts2的攔截器Interceptor。

          以下為struts2攔截器用法的簡(jiǎn)單小結(jié):

          1.

          struts.xml配置:

          <?xml version="1.0" encoding="UTF-8" ?>
          <!DOCTYPE struts PUBLIC
              "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
              "http://struts.apache.org/dtds/struts-2.0.dtd">

          <struts>

              <package name="default" extends="struts-default">

                  <interceptors>
                 
                      <!--定義攔截器-->
                      <interceptor name="isLogin" class="com.test.action.interceptor.IsLoginInterceptor"></interceptor>
                     
                      <!--
                      <!-- 自定義攔截器棧-->
                      <interceptor-stack name="myStack">
                          <interceptor name="isLogin"/>
                          <interceptor name="defaultStack"/>
                      </interceptor-stack>
                      -->
                     
                  </interceptors>
                 
                  <!--
                  <default-interceptor-ref name="myStack"></default-interceptor-ref>
                  -->

                  <!--定義全局跳轉(zhuǎn)頁(yè)-->
                  <global-results>
                      <result name="login" type="redirect">/login.jsp</result>
                  </global-results>

                  <action name="updateMessage" class="com.test.action.UserAction">
                      <result name="success">/success.jsp</result>
                      <result name="input">/index.jsp</result>
                      <result name="failure">/index.jsp</result>
                      <!--放入上面自定義的攔截器-->
                      <interceptor-ref name="isLogin"/>
                      <!--放入struts2默認(rèn)的攔截器棧-->           
                      <interceptor-ref name="defaultStack"/>
                  </action>

              </package>

          </struts>

          當(dāng)執(zhí)行execute()方法之前被自定義的isLogin攔截器攔截下來進(jìn)入到IsLoginInterceptor類來進(jìn)行登陸驗(yàn)證。

          IsLoginInterceptor.java:

          public class IsLoginInterceptor extends AbstractInterceptor {

           @Override
           @SuppressWarnings("unchecked")
           public String intercept(ActionInvocation invocation) throws Exception
           {
            //獲得Session對(duì)象
            Map session = invocation.getInvocationContext().getSession();
            //判斷session中是否有信息
            if(session.get("userid") == null)
            {
             //無信息返回配置文件中<global-results>配置的全局頁(yè)面
             return Action.LOGIN;
            }
            else
            {
             //有信息繼續(xù)執(zhí)行execute()方法
             return invocation.invoke();
            }
           }

          }

          注:defaultStack是每個(gè)<action/>默認(rèn)的攔截器棧。然而當(dāng)用戶在<action>中放入了自定義的攔截器的時(shí)候,就必須再顯式的放入defaultStack。
          struts2之所以能在Action類里能做那么多功能,就是依賴于其默認(rèn)的攔截器棧里定義的各種攔截器。
          用戶可以配置自己的攔截器棧作為默認(rèn)的攔截器棧:
          只需將配置中的注釋解開,<action/>配置里的<interceptor/>也就無需寫了。此時(shí)自定義的myStack代替了defaultStack攔截器棧

          實(shí)際開發(fā)中,往往配置多個(gè)攔截器棧,配置于不同業(yè)務(wù)模塊的<action/>中。
          但是注意默認(rèn)的攔截器棧只能是一個(gè)。


          2.方法過濾攔截器

          默認(rèn)情況下我們?yōu)槟硞€(gè)Action定義了攔截器,則這個(gè)攔截器會(huì)攔截該Action的所有方法。有些情況下,我們無需攔截所有的方法,此時(shí)就需要使用方法過濾攔截器。

          方法過濾攔截器使用方法與普通的攔截器沒什么區(qū)別:

          方法過濾攔截器類繼承MethodFilterInterceptor,
          重寫的是doIntercept(ActionInvocation invacation)方法

          <action/>配置中:

          <!--放入上面自定義的攔截器-->
          <interceptor-ref name="isLogin">
              <!-- 指定login和register方法不需要被攔截-->
              <param name="excludeMethods">login,register</param>
              <!-- 指定execute方法需要被攔截-->
              <param name="includeMethods">execute</param>
          </interceptor>

          posted on 2009-03-05 10:35 §朱家二少§ 閱讀(434) 評(píng)論(0)  編輯  收藏 所屬分類: Struts2


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 南京市| 石阡县| 利津县| 会同县| 淮北市| 松潘县| 黄陵县| 盐津县| 沂水县| 大新县| 石台县| 仙游县| 行唐县| 福泉市| 北票市| 沐川县| 常山县| 巴青县| 邳州市| 清远市| 承德县| 华蓥市| 克山县| 文昌市| 阿克苏市| 丹阳市| 锦屏县| 定结县| 辽宁省| 河池市| 巧家县| 敦煌市| 五家渠市| 潞城市| 高邮市| 门源| 南涧| 叙永县| 荥经县| 蛟河市| 班玛县|