<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    千里馬

    天馬行空

    struts的一些總結

    1,使用框架進行程序開發的意義在于:框架本身包含了各種思想,這些思想是前人為開發人員總結的,他們往往具有開發效率高、易維護、是程序開發更簡單的特點。Struts實現MVC的思想,Hibernate實現了對象 與關系映射的思想,Sping則是依賴注入和面向切面編程的思想,他們都是全世界開發者智慧的結晶。也是眾多框架中的佼佼者。
    2,MVC模式:
      在java web開發中有兩種普遍的開發模式(模式1和模式2),模式1使用jsp+javabean技術將頁面顯示和業務邏輯分開,有jsp實現頁面 的顯示,javabean對象用來保存數據和實現業務邏輯。客戶端直接向jsp發出請求,jsp作出相應響應,并調用javabean對象,所有的數據都通過javabean來處理,然后再返回jsp,有jsp生成最后的返回結果。
      在模型1中,jsp往往會嵌入控制請求流程的代碼和部分邏輯代碼,如果把這部分代碼提取出來,有一個單獨的較色來承擔(該較色也就是控制器),則此時就構成了模型2,。模型2就符合了MVC的設計模式,即模型-視圖-控制器的模式。
    3,MVC框架的web應用程序被分割成若干邏輯部件,使程序開發變得更加容易。它把各種對象按照功能的不同分割成了3部分,主要目的就是將各種對象的耦合度降到最低。被分割的3部分是模型、視圖、控制器。
       模型:代表了應用程序的數據和處理這些數據的規則。當模型發生變化時,他會通知視圖,并為視圖提供查詢模型相關狀態的能力。
      視圖:用來組織模型的內容,他從模型那里獲得數據,然后展現給用戶,這較色往往有jsp承擔。
      控制器:負責從客戶端接受請求,并把這些請求轉換成某種行為,這些行為往往有模型來實現,這些行為完成以后,在選擇一個視圖呈現給用戶。
      如果使用已有是的知識實現一個MVC框架的web應用程序的話,可以這樣來實現,有servlet來充當控制器的角色,他接受請求,根據請求信息的不同,將他們分發給不同 的jsp頁面來作為用戶的響應,同時servlet還要實例化一個javabean對象,jsp就可以使用javabean的相關標簽來得到javabean的數據。
      采用模型2,可以將頁面的顯示、業務邏輯的處理和流程的控制很清晰的分離開來。jsp負責頁面的顯示,javabean負責業務邏輯的處理,servlet負責流程的控制。MVC模式使得web應用程序很容以維護和擴展。因為各個部件的功能不同可以有不同的人進行開發和維護。例如,美工專門負責jsp頁面成分發揮他們的美術和設計才能,而程序編寫人員負責業務邏輯的實現。
    4,Struts基礎:
      Struts的控制器是有ActionServlet、Action、和Struts-config.xml組成。ActionServlet是struts的入口,所有的請求都回通過它來處理,然后讓他決定讓相應 的Action處理請求。Action代表了一次動作,如用戶注冊、購買商品。開發者的業務邏輯代碼也會在這里添加;配置文件Struts-config.xml是對整個struts的配置,包括Actionservlet應該講請求轉發給那個Action,Action處理完成以后,又有哪個jsp文件作為響應等。
      Struts的模型主要有ActionForm來實現。他有一點類似于javabean,包含了若干可讀可寫的屬性,用于保存數據,也有數據驗證的功能。一般來說一個Action回配備一個ActionFom。
      Struts的視圖主要有jsp實現。jsp中顯示的數據可以來自ActionForm,也可以是Action保存在作用范圍內(request、session、application)的數據。當然是用struts自帶的標簽庫可以起到最大的簡化作用。
      使用struts開發web應用程序以后,開發者 的思想需要做一下改變,Action、ActionForm和jsp是一個整體了。每一次Http請求都會有他們三者的發現。jsp代表用戶可以看到的東西,ActionForm代表的是數據,Action代表的業務邏輯。
     一次典型的struts請求是這樣完成的:首先由瀏覽器客戶端發送請求,請求的地址,默認為以“.do”結尾。然后Actionservlet接收到請求以后,會根據請求的路徑和參數來判斷有那個Action來處理此次請求;等到Action完成以后,通常是execute方法調用完成以后,struts會根據返回的ActionForward來判斷是有那個jsp來作為最終的響應。
       以上就是struts最核心的設計思想,開發人員大多數時候只需完成配置文件和Action,將大多數的精力集中在Action里的業務邏輯實現上面。如果業務上有改動,只需修改Action即可,如果是顯示上的變化,也只需修改jsp,兩者實現了松耦合,互不影響。
     Action的URL后綴是“.do”是Struts的一種慣例,一般情況下不會做修改,通過配置也可以使用其他后綴,如“.action”。
    5,Struts開發的一般步驟:
          (1)搭建開發環境:最簡單的一種就是MyEclipse提供的工具直接添加。還有一種就是手動添加:具體步驟就是1,復制Struts所需的jar文件到web應用的“/WEB-INF/lib”目錄下面。2,在web.xml里配置,ActionServlet。Actionservlet是所有Struts的入口,他本質就是一個servlet,它的默認URL匹配方式為“/*.do”,所有以“.do”結尾的URL都會有Actionservlet來處理,以下是一個示例配置:
        <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>
        <init-param>
          <param-name>debug</param-name>
          <param-value>3</param-value>
        </init-param>
        <init-param>
          <param-name>detail</param-name>
          <param-value>3</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>

      3,創建Struts的配置文件struts-config.xml。一般來說,配置文件存放在web應用程序的“/WEB-INF/struts-config.xml”目錄下,通過配置文件指定Struts包含哪些Action、ActionForm等。示例配置如下:
     <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "

    <struts-config>
      <data-sources />
      <form-beans>
      <form-bean name="greetForm" type="com.insigma.struts.GreetForm"></form-bean><!-- 放置所有的ActionForm配置-->
      </form-beans>
      <global-exceptions />
      <global-forwards />
      <action-mappings>
        <action path="/CreetAction" type="com.insigma.struts.CreetAction" name="greetForm"><!-- 放置所有的Action配置-->
        <forward name="greet" path="/greet.jsp"></forward>
        </action>
      </action-mappings>
      <message-resources parameter="com.insigma.struts.ApplicationResources" /><!-- 配置資源文件的路徑-->
    </struts-config>
     (2),實現View-jsps:
           jsp在struts中的兩個作用:提供用戶輸入接口和展示數據。一般來說,不會讓用戶直接訪問struts的jsp文件,都是通過Action進行轉發,所以jsp表單數據一般來自ActionForm,而其他的動態數據一般來自于Action的request里的屬性(Attribute);
        Struts為jsp提供了豐富的標簽庫,尤其是Html標簽庫,讓jsp和actionForm成為了一個整體,提交表單的時候可以自動填充ActionForm,響應的時候可以為表單的輸入框自動添加數據,而對于其他的動態數據,可以使用struts的標簽庫,也可以使用JStl,是數據的展示非常簡便。
     (3),實現Modle-ActionForms:
             ActionForm充當的是數據層的作用,他為開發者保存數據提供了方便,尤其對于大型的web項目來說,一個頁面可能包含幾十個甚至上百個輸入框,如果開發者的每一個請求參數都通過request.getParameter()的方式獲取的 話,工作量會非常大,而且不利于維護,有了ActionForm以后,他可以幫助開發者自動填充數據。而且,它還提供了一些數據驗證的功能。
      自定義的ActionForm需要繼承org.apache.struts.action.ActionForm類,然后把需要添加的字段作為成員變量進行設置,并為這些變量加上set和get方法。
           import org.apache.struts.action.ActionForm;
               public class GreetForm extends ActionForm {
                         String username;

               public String getUsername() {
              return username;
                                         }

              public void setUsername(String username) {
               this.username = username;
                   }
                      }
       ActionForm完成以后,還需要在struts-config.xml里進行配置以后,才能供Action使用。使用標簽為<form-bean>,它包含form的名稱、name的屬性和類型type屬性。
     (4),實現Controller-Actions:
           Action代表了一次動作,邏輯代碼、數據裝填代碼和請求轉發代碼都會放在Action里,它是struts最核心最重要的地方。
           自定義的Action需要繼承自org.apache.struts.action.Action類,而且需要覆蓋它的execute方法,當有請求指向該Action時,struts會實例化該action在調用execute()方法。
                public ActionForward execute(ActionMapping mapping, ActionForm form,
      HttpServletRequest request, HttpServletResponse response)
      throws Exception {
         它包含4個參數:ActionMapping、ActionForm、HttpServletRequest、HttpServletResponse,最后的兩個參數與servlet的請求和響應是完全相同的。ActionMapping指的是該action映射的信息,通常會調用該對象的findForward()方法轉到下一個資源護或視圖jsp,該方法的參數即下一個資源的名稱,在struts-config.xml通過<forward>進行配置,他是一個超類,往往需要強制類型轉換,通過<action>的name屬性指定,
       import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;

    public class CreetAction extends Action {
      @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
      HttpServletRequest request, HttpServletResponse response)
      throws Exception {
       request.setCharacterEncoding("utf-8");
       response.setContentType("text/html,charset=utf-8");
       //轉換成ActionForm
       GreetForm gForm=(GreetForm)form;
       //往請求范圍內設置用戶名屬性變量
       request.setAttribute("username",gForm.getUsername());
       //返回名字為greet的view
       return mapping.findForward("greet");
    }
    }
    然后在struts-config.xml里進行設置。
    (5),訪問Action的URL:
         struts的可操作元素往往是以Action為單元的,有多少Action,就代表了多少個可進行的動作。Action的URl與ActionServlet的配置是有關系的,默認的情況下,所有的Action是以“.do”結尾的。
    6,Struts標簽庫::
       (1),Bean常用標簽庫:
            Struts的Bean標簽庫是為了訪問jsp的javabean和他們的屬性而設計的。它是對jsp的動作標簽<jsp:useBean>的改進,讓開發者更好的使用請求參數、請求頭和cookie等信息。但是他和jstl、el有一些重復的地方。
    盡管如此,有一個標簽時struts特有的,那就是,<bean:message/>,它是用力啊嘟嘟資源文件數據的。有的時候,一些常用的常量,如錯誤描述、多語言文本等保存在struts的資源文件ApplicationResources.properties里面便于維護。但是定義一個javabean來訪問這些數據顯得有些多余,皆可以直接使用這個標簽,非常的方便。
            資源文件ApplicationResources.properties的內容是以鍵值對的形式書寫的,中間以“=”隔開,key=value.在使用<bean:message/>的時候,只需要指定該標簽的key屬性即可,它對應的就是資源文件的左邊的名稱,然后該標簽就會返回相應的文本值。
     (2)html常用標簽:
       HTML標簽庫是Struts使用最多的標簽庫,它架起了jsp與Action和ActionForm的橋梁。它主要提供了大多數的表單元素即數據管理功能。他在標單方面表現的比jstl和el更優秀一些。如果要構建一個表單,Html標簽庫是目前最好的選擇。
      <html:form>是用來包含其他標簽的,他的action屬性的值,應該和struts-config.xml里面的<action>的path屬性的值相同,也是以斜線開頭。他們中的大多住都包含一個property屬性,與ActionForm的屬性相對應,也就是如果ActionForm有一個username屬性,那么property也許寫成username。
    7,Struts的高級特性:
       1,使用多種Action:
          Struts針對不同的情況,除了原始的Action以外,還提出了DispatchAction、LookupDispatchAction、MappingDispatchAction,后面的三個都可以將多個action方法寫在一個Action里面。
              Struts的多種Action
      名稱             使用情況              使用簡介
     Action         普遍的action                 直接使用即可
    DispatchAction 表單包含多個參數時使用    需要從客戶端接受一個參數,該參數的值對應方法的名稱
    lookupDispatchAction 表單包含多個提交按鈕的時候         需要重載getKeyMethodMap()方法,返回參數與方法名之間的對應                                                                                  @                                                         關系
    MappingDispatchAction 客戶端不便于傳遞參數時適用       需要配置文件的<action>標簽的parameter屬性,指定Action的方法@                                                      名稱
    (1),DispatchAction的實現類為org.apache.struts.actions.DispatchAction,他需要從客戶端接受一個參數,該參數的值與方法名對應。Struts會根據struts-config.xml里面配置的<action>標簽的parameter屬性來獲取請求參數,然后利用java的反射機制調用方法名與參數值相同的方法。這些方法的參數列表和返回類型與Action的execute()方法完全相同。使用DispatchAction大致可以分為以下幾步:
     1>自定義一個繼承自DispatchAction的類。把需要對外的每個action動作寫成一個方法。方法的參數列表和返回類型與Action的execute()方法完全相同。
     2>在struts-config.xml里配置Action。與配置一個普通的Action差不多,只是需要多加一個parameter屬性,一般為action或method,他指定了客戶端需要傳遞的參數名。
    3>為客戶端表單添加一個隱藏的輸入框,他的值為需要調用的方法名。如果http請求采用提交表單的形式,隱藏的輸入框是最好的選擇;若是通過url訪問Action的話,則需要在url后面加上請求參數。
    (2),lookupDispatchAction:的實現類是org.apache.struts.actions.lookupDispatchAction,它主要適合于一個表單里有多個按鈕的情況。lookupDispatchAction也需要從客戶端接受一個參數,但是參數的值與方法名的對應關系需要一個getKeyMethodMap()方法來確定,該方法返回一個Map,該Map的Key與Value與資源文件ApplicationResources.properties的key和value對應。使用lookupDispatchAction的步驟:
     1》,自定義一個lookupDispatchAction類把需要對外的每個action動作寫成一個方法,該方法的參數列表和返回類型與action的execute()方法完全相同。然后實現父類的getKeyMethodMap()方法,該方法返回的Map與資源文件的部分內容相對應。
    2》在資源文件ApplicationResources.properties里定義按鈕的名稱
    3》在struts-config.xml里配置Action。與普通的配置Action差不多,只需多家一個parameter屬性,一般為action或method,他制定了客戶端需要指定的參數名。
    4》當客戶端表單包含兩個提交按鈕時,用<bean:message>標簽來定義按鈕的value,并按鈕的name為參數的名字。
    (3),MappingDispatchAction:MappingDispatchAction:的實現類為org.apache.struts.actions.MappingDispatchAction.
    它無需從客戶端接收參數,直接通過struts-config.xml里的<action>的屬性parameter指定方法名,客戶端不許咬任何配置,使用起來就像一個普通的eAction一樣。他的確定就是可能導致struts-config的配置非常長,因為每一個方法都需加一個<action>標簽。盡管如此,他還是要比原來的Action要好一點,至少不需要寫那么多的action類了,所以MappingDispatchAction:更適合直接通過url訪問Action。使用MappingDispatchAction:的步驟:
    1》定義一個繼承自MappingDispatchAction:的類,把需要對外的每個action動作寫成一個方法,該方法的參數列表和返回類型與execute()方法的完全相同。
    2》在struts-config里配置該action,與一個普通的Action差不多,對于沒一個方法會對應一個<action>標簽,他們的path各不相同,另外,parameter屬性的值就是一個方法名。
    3》,客戶端訪問MappingDispatchAction的時候,無論是表單還是直接使用url,與普通的Action沒有區別。
    8,使用多種ActionForm:
      針對不同的情況,除了最原始的ActionForm以外,還提供了動態的ActionForm(DynaActionForm)和懶惰ActionForm(LazyValidatorForm)。在具體的開發過程中,可以有多種選擇,如果數據量大或用途比較廣泛,可以用普通ActionForm;如果數據量很小,則使用動態的DynaActionForm;如果數據量不太確定,那就是用懶惰的LazyValidatorForm
      1》DynaActionForm的實現類為org.apache.struts.action.DynaActionForm,之所以稱他為動態的ActionForm,是因為它是Action不比單獨定義一個ActionForm類,而可以通過在配置文件里通過XML的形式定義ActionForm的字段及其類型。
    此時的<form-bean>標簽里的type屬性應該是DynaActionForm的完整類名,然后再在其中嵌入<form-property>標簽來定義屬性,支持的數據類型包含8中java基本類型,String和時間類型。在Action的execute()方法和其他的action方法里。通過DynaActionForm.get()方法獲取所需的參數。
    2》lazyValidatorForm:
    lazyValidatorForm的實現類是org.apache.struts.validator.lazyValidatorForm,他比起DynaActionForm來說更簡單。lazyValidatorForm連用Xml定義字段的步驟都不必要了,他會自動將請求參數全部作為ActionForm的屬性,所有的Action都可以使用它。只不過,對于使用lazyValidatorForm的Action在配置的時候,需要設置<action>標簽的的validate屬性的為false。
    與DynaActionForm類似,在action的execute()方法或其他的action方法里。通過lazyValidatorForm.get()方法獲取所需的參數。

    posted on 2012-06-12 13:47 Mr Lee 閱讀(449) 評論(0)  編輯  收藏 所屬分類: java技術

    My Links

    Blog Stats

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章檔案

    (hibernate)http://www.tkk7.com/dyllove98/archive/2012/05/12/377959.html

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 一级毛片不卡片免费观看| 国产成人高清亚洲一区91| 国产色爽免费无码视频| 久久久青草青青国产亚洲免观 | 4399影视免费观看高清直播| 国产亚洲精品国产| 一个人看的www免费视频在线观看 一个人免费视频观看在线www | 亚洲精品免费网站| 亚洲不卡中文字幕| 无码国产精品久久一区免费| 色噜噜亚洲男人的天堂| 三年片在线观看免费大全| 亚洲人成77777在线观看网| 成年男女免费视频网站| 亚洲AV无码AV日韩AV网站| 色吊丝永久在线观看最新免费| 亚洲A∨精品一区二区三区下载| 国产精品免费小视频| 日本视频免费观看| 国产成人亚洲综合无码精品| 无码一区二区三区免费| 亚洲国产视频一区| 黄a大片av永久免费| 一级女人18片毛片免费视频| 国产亚洲成av人片在线观看| 最近中文字幕无免费| 亚洲精品无码专区在线| 亚洲精品高清在线| 无码人妻精品中文字幕免费| 亚洲AV成人噜噜无码网站| 国产又大又长又粗又硬的免费视频 | 在线观看免费精品国产| 乱淫片免费影院观看| 亚洲精品国产精品乱码视色 | 色网站在线免费观看| 亚洲产国偷V产偷V自拍色戒| 我的小后妈韩剧在线看免费高清版| 国产精品亚洲专区无码不卡| 国产亚洲精AA在线观看SEE| 无码少妇一区二区浪潮免费| 一区二区三区免费电影|