Love Pisces

          It's not your aptitude but your attitude that determines your altitude!
          posts - 2, comments - 43, trackbacks - 0, articles - 9

          Struts詳解之Action類

          Posted on 2007-06-02 13:44 筱筱 閱讀(663) 評論(0)  編輯  收藏 所屬分類: Struts學習日記

          1.Action類

                org.apache.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 );
                }
                
          主站蜘蛛池模板: 唐海县| 梅河口市| 嫩江县| 六安市| 镇原县| 榆社县| 小金县| 甘孜| 政和县| 始兴县| 西林县| 吴桥县| 灌云县| 信丰县| 陈巴尔虎旗| 平阴县| 安新县| 荔浦县| 武平县| 常德市| 苏尼特左旗| 尚义县| 桓台县| 饶阳县| 枣阳市| 高清| 湘潭县| 吉木萨尔县| 雷州市| 体育| 漠河县| 阳东县| 波密县| 抚宁县| 洪泽县| 翁牛特旗| 涡阳县| 庆元县| 梅河口市| 铜陵市| 山东|