隨筆-124  評論-49  文章-56  trackbacks-0

          網站struts.apache.org
          實踐步驟:
          1 搭建環境
            (1)導入jar包
               使用其中相關的類(可將所有jar全部導入)
            (2)建立一個配置文件:struts-config.xml
               作用:方便struts用戶使用
               位置:一般放在WEB-INF下
            (3)配置web.xml
               注冊struts中心控制器-----ActionServlet
            <servlet>
            <servlet-name>action</servlet-name>
            <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>()Navigate下Open Type輸入actionServlet復制目錄
            <init-param>//讀初始化文件的信息
             <param-name>config</param-name>//參數名
             <param-value>/WEB-INF/struts-config.xml</param-value>//文件名
            </init-param>
            <load-on-startup>0</load-on-startup>//服務啟起就實例化,0最早
           </servlet>
           <servlet-mapping>
            <servlet-name>action</servlet-name>
            <url-pattern>*.do</url-pattern>//對所有的do請求都作處理
           </servlet-mapping>
            注意事項:
            struts配置文件的位置
            預先加載控制器
          ------------------------------------------------------------------
          2 建立ActionForm
            (1)建一個Bean類,繼承org.apache.struts.action.ActionForm
            (2)注冊,修改配置文件struts-config.xml
            <form-bean>
            <form-beans>
             <form-bean name="變理名" type="類全名"/>
            </form-beans>
            意注:struts-config.xml文件中<form-beans>和<action-mappings>的順序不能變,有DTD約束規定。
          ------------------------------------------------------------
          3 建立Action
           (1)建立一個類,繼承org.apache.struts.action.Action。重寫execute方法
              需要強制轉型
              LoginFrom lof=(LoginFrom)form;
              調用其它模塊
              跳轉(根據關鍵字,關鍵字參照該action中forward標簽中的name屬性)
              mapping.findForward("name屬性");
           (2)注冊,修改配置文件struts-config.xml
           <action>
           <action-mappings>
                  <action path="指明調用者(JSP)能通過中心控制器ActionServlet找到該Action"
                          type="指明該action類全名"
                          name="該action引用的form的名稱">
                     <forward name="loginSuccess" path="index.jsp"></forward>
                  </action>
              </action-mappings>
          4 頁面訪問
          <form action="<%=request.getContextPath()%>/login.do">
          -------------------------------------------------------------------
          Struts framework的工作原理工科

          1 讀敢配置 (初始化ModuleConfig對象)
          Struts框架總控制器(ActionServlet)是一個Servlet,在web.xml中配置成自動啟動的Servlet。
          讀取配置文件(struts-config.xml)的配置信息,為不同的Struts模塊初始化相應的ModuleConfig
          對名:ActionConfig,
                ControlConfig,
                FormBeanConfig,
                MessageResourcesConfig
          2 發送請求
          請求上傳WEB服務器(處理.do的請求)
          3 填充FORM(實例化,復位,填充數據,校驗,保存)
          (*.do請求)從ActionConfig中找出對應該請求的Action子類,如沒有對應的Action,控制器直接轉發給
          JSP或靜態頁面。如有對應的Action且這個Action有一個相應的ActionForm.
          ActionForm被實例化并用http請求的數據填充其屬性,并且保存在ServletContext中(request或session中),
          這樣它們就可以被其它Action對象或者JSP調用。
          4 派發請求
          控制器根據配置信息ActionConfig將請求派發到具體的Action,相應的FormBean一并傳給這個Action的execute()方法.
          5 處理業務
          Action一般只包含一個execute方法,它負責執行相應的業務邏輯(調用其它業務模塊).完畢返回一個ActionForward對象,
          控制器通過該ActionForward對象來進行轉發工作
          6 返回響應
          Action根據業務處理的不同結果返回一個目標響應對象給總控制器,該目標響應對象對應一個具體的JSP頁面或另一Action.
          7 查找響應(可以是一個Action)
          8 響應用戶
          -----------------------------------------------------------------------------------------------------------
          組件
          ActionSerlet,Action Classes,Action Mapping(此處包括ActionForward),ActionForm Bean.
          Struts中的MVC:
          1 模型(Model):本質上來說在Struts中Model是一個商業邏輯類,開發者實現商業邏輯。
          2 視圖(View):View是由與控制器Servlet配合工作的一整套JSP定制標簽庫構成,利用他們可以快速建立應用系統的界面。
          3 控制器(Controller),前端控制器是一個Servlet,它將客戶端請求轉發到相應的后端控制器Action類。
          注意:官方認為ActionForm Bean應為控制層(Controller)組件,自已寫的JavaBeans為模型(Model)
          -----------------------------------------------------------------------------------
          ActionServlet(中心控制器)
           定義:繼承自javax.servlet.http.HttpServlet類,是中心控制器(總控制器)。它提供一個中心位置來處理全部的終端請求。
           作用:接受請求,填充數據,派發請求,響應用戶。
           配置:在web.xml文件聲明。
           例子:
           <servlet>
            <servlet-name>action</servlet-name>
            <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
            <init-param>
              <param-name>config</param-name>
              <param-value>/WEB-INF/struts-config.xml</param-value>
            </init-param>
            <load-on-startup>0</load-on-startup>
          </servlet>
          <servlet-mapping>
            <servlet-name>action</servlet-name>
            <url-pattern>*.do</url-pattern>
          </servlet-mapping>
          注意:struts-config.xml文件系統默主調用,可以不<init-param>配置
          <init-param>
              <param-name>config</param-name>
              <param-value>/WEB-INF/struts-config.xml</param-value>
          </init-param>
          -------------------------------------------------------------------
          Action
          發出該action請求時初始化,不是在讀取配置時,并且只初始化一次。
          Action是線程不安全的,因為所有的請求共享一個別action實例。
          所以:不要用實例變量或者類變是共享只是針對某個請求的數據
                注意資源操作的同步性。
          應用:
          統計一個action訪問次數
          public class CountAction extends Action {
           private Integer count=0;
           public ActionForward execute(ActionMapping mapping, ActionForm form,
             HttpServletRequest request, HttpServletResponse response)
             throws Exception {
            synchronized(count){//加鎖
            count++;
            }
            PrintWriter out=response.getWriter();
            out.print("count="+count);
            return null;
           }
          }

          ----------------------------------------------------
          ActionMapping
          是對struts-config.xml中action標簽中所有屬性的封裝類。
          mapping.getName()(String)
          mapping.getPath()(String)
          mapping.getType()(String)
          String[] forwardNames=mapping.findForwards();
          for(String forward:forwardNames){
           ActionForward forward=mapping.findForward(forward);
           String forwardPath=forward.getPath();
          }
          相應的set方法不能使用。
          -----------------------------------------------------
          ActionForward(導航器)
          ActionForward對象是配置對象。這些配置對象擁有獨一無二的標識以允許他們按照name屬性來檢索。
          name:邏輯名稱
          path:頁面或者模塊訪問路徑。
          redirect:默認為false.設為true時為容器外跳轉,相當于response.sendRedirect();
          在xml文件中的path中要寫絕對路徑。
          --------------------------------------------------------------
          ActionForm工作原理
          步驟:
          (1)檢查Action的映射,確定Action中已經配置了對ActionForm的映射
          (2)根據name屬性,查找form bean中的配置信息
          (3)檢查Action的form bean的使用范圍,確定在此范圍下(request,session),是否已經有些form bean的實例。
          (4)假如當前范圍下,已經存在了些form bean的實例,而是對當前請求來說,是同一種類型的話,就重用。
          (5)否則,就重新構建一個form bean的實例(調用構造方法),并且保存在一定作用范圍。
          (6)form bean的reset()方法被調用
             在作數據收集前被調用,是一個重置的方法.
          (7)調用對應的setter方法,對狀態屬性賦值
          (8)如果validatede的屬性設置為true,就調用form bean的validate()方法。
             該方法進行表單的服務器端驗證.
          (9)如果validate()方法沒有返回任何錯誤,控制器將ActionForm作為參數,傳給Action實例的execute()方法并執行。
          注意:直接從ActionFrom類繼承的reset()和validate()方法,并不能實現什么處理功能,所以重新覆蓋。

                     
          注意:
          1 無參構造方法必須有
          2 Scope缺省值是session
          3 調用setter方法,實質上是對應的標準set方法
          分析:
          4 從過程去查看
          HttpSessionAttributeListener
          ServletRequestAttributeListener
          5 從結果去查看
          ---------------------------------------------------
          ActionForm
          reset()方法,用于恢復屬性,在重新復值前由controller調用。
          valldate()方法,用于校驗屬性,返回ActionErrors,如果成功返回null,默認返回null.
          關閉校驗功能設置struts-config.xml中<action>標簽的validate屬性為false.
          validate
          ----------------------------------------------------------
          struts-config.xml文件中的action標簽
          1 attribute屬性
          用來存取form的關鍵字,缺省值與name一樣,如果設了必須用該屬性。
          2 validate屬性(action中的屬性)
          用來控制是否校驗表單,缺省為false,false不校驗。
          3 input屬性
          當表單校驗失敗時將請求轉發的URL(或目標模塊,可以為另一個別action),結合validate屬性使用,為相對路徑。
          在ActionForm類的validate方法中手動添加錯誤
          public ActionErrors validate(ActionMapping mapping,HttpServletRequest request){
            ActionErrors errors=new ActionErrors();
            ActionMessage message=new ActionMessage("error");//應為鍵值對
            errors.add("error",message);
            return errors;
          }
          ---------------------------------------------------------------------------
          struts-config.xml文件中的<global-forwards>全局跳轉標簽
          <global-forwards>
            <forward name="error" path="Error.jsp"/>
          </global-forwards>
          使用方式同action中的forwar標簽

          posted on 2009-11-29 22:59 junly 閱讀(2336) 評論(0)  編輯  收藏 所屬分類: struts2/struts1.3/JSF
          主站蜘蛛池模板: 霍州市| 广西| 永康市| 朝阳市| 三穗县| 仙居县| 尉犁县| 绥化市| 丘北县| 新竹市| 永济市| 潜江市| 上栗县| 应城市| 巴塘县| 南阳市| 明水县| 奎屯市| 陇南市| 浠水县| 光山县| 调兵山市| 锡林浩特市| 瓮安县| 柘城县| 安远县| 玉门市| 东阿县| 清苑县| 江永县| 永宁县| 朔州市| 江阴市| 京山县| 平南县| 连平县| 綦江县| 道孚县| 额敏县| 昌都县| 峨眉山市|