Struts之Action類

 

1.Action類
      org.apache.struts.action.Action類是Struts的心臟,也是客戶請求和業務操作間的橋樑。每個Action類通常涉及爲代替客戶完成某種操作。

      一旦正確的Action實例確定,就會調用RequestProcessor類的processActionPerform()方法,processActionPerform()方法,負責調用Action實例的execute()方法。

      execute()方法有4個參數:ActionMapping對象、ActionForm對象 、HttpServletRequest對象和HttpServletResponse對象。ActionForm對象封裝了表單數據,因此Action類可以通過getter方法從該對象中獲得表單數據,然後調用模型組件處理這些數據。Action類又通過ActionMapping對象的findForward()方法獲得一個ActionForward對象,然後把處理結果轉發到ActionForward對象所指的目標。 
      其具體的實現過程如下代碼所示:
package login;
import org.apache.struts.action.*;
import javax.servlet.http.*;
import java.util.*;
 
publlic class loginAction extends Action{
        public ActionForward execute(ActionMapping actionmapping, ActionForm actionForm,

                        HttpServletRequest request, HttpServletResponse response )
   {
          loginActionForm loginForm=(loginActionForm) actionForm;
            //從form bean中取出表單數據
          String username=loginForm.getUsername();
          String password=loginForm.getPassword();
            //生成一個Session對象
          HttpSession session=request.getSession(true);
          session.removeAttribute("username");
          session.setAttribute("username",username);
            //生成一個ArrayList對象,並把用戶名和密碼的值寸入該對象中
          ArrayList arr=new ArrayList();
          arr.add(username);
          arr.add(password);
          String prompt;
            //調用模型組件loginHandler,檢查該用戶是否已經註冊
          loginHandler login=new loginHandler();
          boolean mark=login.checkLogin(arr);

          if(mark)  prompt="Success";
              else prompt="Fail";
            return actionMapping.findForward(prompt);
   }
}

2.ActionMapping類
      
      ActionMapping存儲了與特定用戶請求對應的特定Action的相關信息,例如輸入頁面、轉發頁面等。ActionServlet將ActionMapping傳送到Action類的execute()方法,然後Action將調用ActionMapping的findForward()方法,此方法返回一個指定名稱的ActionForward,這樣Action就完成了本地轉發。若沒有找到具體的ActionForward,就返回一個null。

3.ActionForward類

      Action類中的execute()方法返回一個ActionForward對象。ActionForward對象代表一個Web資源的邏輯抽象表示形式。這裏的Web資源通常就是JSP頁面或Java Servlet。
      ActionForward是該資源的包裝類,所以應用程序和實際資源之間並無多少瓜葛。實際的Web資源只在配置文件struts-config.xml中指定(如forward元素的name,path和redirect屬性),並非在程序代碼中寫入。RequestDispatch會根據redirect屬性的值,來決定ActionForward實例要進行轉發還是重定向。
      要從一個Action實例返回一個ActionForward實例,可以在Action類內動態地創建一個ActionForward實例,或者更常見的做法是使用ActionMapping的findForward()方法找出配置文件中預先配置的一個ActionForward實例,如下所示:
      return mapping.findForward("Success");
         其中,mapping是一個ActionMapping實例,該程序片斷能夠返回一個參數“Success”對應的ActionForward實例,以下代碼是在配置文件struts-config.xml中定義的forward元素:
      <action name="loginActionForm" type="login.loginAction"
         validate="false" input="/login.jsp"
         scope="request" path="/loginAction">
      <forward name="Success" path="/main.jsp" redirect="true"/>
      <forward name="Fail" path="/register.jsp" redirect="true"/>
      <action/>
       ActionMapping類的findForward()方法首先會調用findForwardConfig()方法,以查看在<action>元素中是否包含<forward>子元素,如果有,就會檢查<global-forwards>元素片段。一旦找到匹配的ActionForward實例,就會從execute()方法將其返回給RequestProcessor。下面是ActionMapping類的findForward()方法:
      public ActionForward findForward(String name)
      {
            ForwardConfig config=findForwardConfig(name);
            if(config==null)
            {
                  config=getModuleConfig().findForwardConfig(name);
            }
            return ( (ActionForward)  config );
      }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章