§封Ja葬va§

          Struts2核心攔截器

          當struts2經過輸入校驗階段(struts2系列---輸入校驗)后,接著將調用execute()業務邏輯方法。有時我們需要在執行execute()方法之前先進行比如登陸驗證之類的判斷。只有登陸過的用戶才能進行業務操作。這時就需要用到Struts2的攔截器Interceptor。

          以下為struts2攔截器用法的簡單小結:

          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>
                  -->

                  <!--定義全局跳轉頁-->
                  <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默認的攔截器棧-->           
                      <interceptor-ref name="defaultStack"/>
                  </action>

              </package>

          </struts>

          當執行execute()方法之前被自定義的isLogin攔截器攔截下來進入到IsLoginInterceptor類來進行登陸驗證。

          IsLoginInterceptor.java:

          public class IsLoginInterceptor extends AbstractInterceptor {

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

          }

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

          實際開發中,往往配置多個攔截器棧,配置于不同業務模塊的<action/>中。
          但是注意默認的攔截器棧只能是一個。


          2.方法過濾攔截器

          默認情況下我們為某個Action定義了攔截器,則這個攔截器會攔截該Action的所有方法。有些情況下,我們無需攔截所有的方法,此時就需要使用方法過濾攔截器。

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

          方法過濾攔截器類繼承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) 評論(0)  編輯  收藏 所屬分類: Struts2


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 湟源县| 平阳县| 南昌县| 登封市| 涞源县| 罗源县| 惠州市| 宁津县| 双牌县| 莱州市| 武宣县| 湖口县| 嵊泗县| 溧水县| 包头市| 喀什市| 马山县| 吉水县| 巩留县| 来凤县| 城市| 太康县| 彭阳县| 蚌埠市| 盈江县| 中牟县| 广南县| 乡宁县| 周宁县| 永川市| 油尖旺区| 汤阴县| 雷州市| 龙川县| 龙门县| 宜宾县| 都江堰市| 赫章县| 湘潭市| 新密市| 兴城市|