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

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

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

    posts - 70,comments - 408,trackbacks - 0

    今天主要是研究一個基本的Struts應用,helloapp的例子,這個應用基本的東東就是:接受用戶輸入的姓名,然后輸出Hello+姓名,開發應用涉及以下的步驟:

    1)     分析應用需求.

    2)     把基于MVC設計模式的Struts框架運用到應用中.

    3)     創建視圖組件,包括HTML表單(hello.jsp)和ActionForm(HelloForm.java).

    4)     創建application,properties本地資源文件.

    5)     數據驗證,包括表單驗證和業務邏輯驗證.

    6)     創建控制器組件,HelloAction.java.

    7)     創建包含被各個模塊共享的常量數據的JAVA文件,Constants.java.

    8)     創建配置文件.Web.xml和struts-config.xml.

    9)     編譯,發布和運行helloapp應用.

    在開發應用時,首先從分析需求入手,列舉該應用的具體功能,以及限制條件.這個應用

    具體需求:

    1)     接受用戶輸入的姓名,然后返回Hello+姓名.

    2)     如果用于沒有輸入姓名久提交表單,將返回出錯信息,提示用戶輸入姓名.

    3)     如果用戶輸入姓名為Monster將返回出錯信息.拒絕訪問.

    4)     為了演示模塊組件的功能,應用使用模型組件來保存用戶輸入的姓名.

    Struts框架的應用的各個模塊構成主要有:

    1)               模型包括一個JavaBean它有一個username屬性,代表用戶輸入的名字,提供了get/set方法.還有一個save方法負責把屬性保存到持久化存儲系統中.

    2)               視圖包括一個JSP文件hello.jsp它提供用戶界面,接受用戶輸入的姓名,視圖還包括一個ActionForm,保存數據,并且進行驗證.

    3)               控制器包括一個Action類HelloAction,它完成三個任務,一是進行業務邏輯驗證,二是調用模型組件的save方法保存輸入的姓名,三是決定將合適的視圖組件返回給用戶.除了創建模型,視圖和控制器組件,還需要創建Struts的struts-config.xml文件它可以把這些組件組裝起來,使它們協調工作.此外還需要創建一個整個Web應用的配置文件web.xml.好了前面的一些理解的話題說到這里,我感覺原理我已經懂了.下面言歸正傳開始研究整個Web應用的創建,我逐步來研究.

    創建視圖組件:視圖組件主要包括一個JSP文件和一個ActionForm,首先創建一個JSP文件提供用戶界面,能夠接受用戶輸入的姓名,此外本應用所有的輸出結果也都是用這個hello.jsp顯示給用戶.hello.jsp中使用來自Struts的標簽庫.至于引入標簽庫我就不多說了感覺沒什么難度在以前學JSP的時候已經完全理解了.<html:errors>用于顯示Struts框架中其他組件產生的錯誤信息.<html:form>用于創建HTML表單.它能夠把表單的字段和ActionForm的屬性關聯起來.<html:text>該標簽是<html:form>的子標簽,用于創建HTML表單的文本框.<bean:message>用于輸入本地化的文本內容,它的key屬性指定消息key,與消息key匹配的文本內容來自于專門的本地資源文本文件.<bean:write>用于輸入Bean的屬性.name指定bean的名字,property指定要輸出的屬性.<logic:present>用于判斷Bean在特定的范圍內是否存在,只有存在才會執行標簽主體中的內容.用name指定要判斷的Bean然后用scope來指定范圍.JSP創建完成了下面創建本地資源文件,使用<bean:message>標簽輸出內容.這個文件就是一個application.properties文件,就是一個類似hashtalbe一個key一個value.就是消息key/消息文本的格式.用<bean:message key=”key”>使用.下面說說創建ActionForm,當用戶提交了HTML表單后,Struts框架將自動把表單數據組裝到ActionForm中,ActionForm和HTML表單的字段一一對應,validate()方法用于表單驗證,reset()方法用于把屬性重新設置為默認值.數據驗證幾乎所有的用戶交互的數據都需要驗證,Struts的數據驗證是現成的,主要分兩種類型表單驗證和邏輯驗證.當用戶提交了HTML表單后,Strust自動把數據組裝到ActionForm,接下來自動調用validate方法進行驗證.如果validate方法返回ActionErrors對象為null,或者不包括任何ActionMessage對象,就表示沒錯誤數據驗證通過.如果有就把ActionErrors對象保存在request范圍內的ActionErrors對象中包含的錯誤信息顯示出來,提示用戶修改錯誤.

    創建控制器組件:控制器組件包括ActionServlet和Action類,ActionServlet類是Struts自帶的,它是整個框架的控制靈魂,通常不需要擴展,Struts提供了可擴展的Action,使用來處理特定的HTTP請求的.Action類的工作機制是所有的Action都是org.apache. struts.action.Action的子類.Action子類應該覆蓋父類的execute()方法.四個參數分別是:ActionMapping包含了這個Action的配置信息,和struts-config.xml文件中的action元素對應.ActionForm包含了用戶的表單數據,當Struts框架調用execute()方法的時候ActionForm中的數據已經通過了表單驗證.還有請求和應答對象參數.Action類的execute方法返回一個ActionForward對象,它包含了請求轉發路徑信息.至于訪問本地化文本在Aciont類中首先通過execute()方法獲得MessageResources對象.通過getResources方法參數是一個request.該方法返回當前默認的MessageResources對象,它封裝了Resource Bundle的文本內容.可以這樣獲取屬性對象Struts tltie=message.getMessage(“key”).業務邏輯驗證主要是用Action的execute()方法如果用戶輸入的姓名是Monster,將創建包含錯誤信息的ActionMessage對象,然后調用Action基類定義的saveErrors()方法,它負責把ActionMessage對象保存在request范圍內.最后返回ActionForward對象,Struts會根據ActionForward對象包含的轉發信息把請求轉發給適當的視圖組件,視圖組件通過標簽<html:errors>標簽把request范圍內的ActionMessages對象中包含錯誤信息顯示出來.提示用戶修改錯誤.一個ActionMessages對象包含多個ActionMessage對象,ActionErrors繼承于ActionMessages,ActionError繼承于ActionMessage對象.接下來說說訪問模型組件的方法.HelloAction類創建了一個模型組件PresonBean對象,并且調用它的saveToPrsistent

    Store()方法來保存userName屬性.把屬性保存到本地資源文本文件中!保存之后就要向視圖組件傳遞數據了Action類把數據保存在request或者session范圍內,以便向視圖組件傳遞信息request.setAttribute(Constants.PERSON_KEY,pd)把PersonBean對象保存到一個request對象范圍內.request.removeAttribute(mapping,getAttribute())從request范圍內刪除ActionForm,由于后續的請求轉發目標組件不再需要HelloForm,所以可以刪除.最后通過Action類把流程轉發給合適的視圖組件.return (mapping.findForward(“Action映射配置名稱”));好了控制器的創建已經搞定了.

    創建模型組件:本例的模型是一個PersonBean是一個非常簡單的JavaBean,它包括一個userName屬性,以及相關的get/set方法.還有一個業務方法saveToPresistentStore().本例中并沒有真正實現這個方法,在實際應用中這個方法可以把JavaBean屬性保存在持久化存儲系統中,如數據庫或文件系統.

    創建存放常量的JAVA文件:HelloAction按照request.setAttirbute(類名.常量,對象)的方法設置request共享的值,把一些常量定義在.java文件種可以提高Action類的獨立性.當屬性key常量的值發生改變的時候,只需要修改.java文件,不需要該Action.

    創建配置文件:對于Struts應用它的配置文件web.xml應該對ActionServlet類進行配置,此外,還應該生命Web應用所使用的Struts標簽庫.感覺沒什么就是配置標簽庫和配置action映射ActionServlet地址.配置confgi映射struts-config.xml地址.在加上一個servlet-mapping的*.do請求轉給action就OK了!然后重點研究的是創建Struts框架配置文件.Struts框架允許把應用劃分多個組件,提高開發速度.而Struts框架的配置文件可以把這些組件組裝起來,決定如何使用它們.<form-bean>元素配置一個ActionForm,name屬性是名稱,type是它對應的類.<action>元素是path屬性指定請求訪問的Action路徑,type屬性指定Action的完整類名,name屬性指定需要傳遞給Action的ActionForm.scope指定ActionForm的存放范圍,validate屬性指定是否執行表單驗證也就是是否實行ActionForm中的validate()方法.input屬性指定當表單驗證失敗的時候轉發的路徑.<cation>元素還包含一個子元素<forward>它定義了一個請求轉發的路徑也就是Action處理結果要轉發給的路徑在這里設置.Action的execute方法返回值是一個ActionForward方法這個方法返回的參數是一個<forward>元素映射的JSP文件.<message-resources>元素定義了一個本地資源文本文件.parameter屬性指定一個properties文件.記住路徑不用加擴展名.

    發布和運行helloapp應用:這個簡單就是在Tomcat中發布和一般的Web應用類似,記住把Struts包和tld標簽庫包都copy進去就OK了.有一個重點的東東就是可以把一個Web工程打包成一個war包文件,在DOS下轉到helloapp的根目錄輸入jar cvf helloapp.war *.*即可,這樣也是一樣可以發布的.

    服務器端裝載hello.jsp的流程:

    1)<bean:message>標簽從本地資源文件中讀取文本輸出到網頁上.

    2)<html:form>標簽在request范圍中查找HelloForm,如果存在這樣的實例就把HelloForm對象中的userName屬性復制給HTML表單的userName文本框,由于此時還不存在HelloForm對象,所以忽略這項操作.

    3)把hello.jsp視圖呈現給客戶.

    表單驗證流程:

    1)              Servlet容器在web.xml中尋找<url-pattern>屬性為” *.do “的<servlet-mapping>元素.

    2)              根據以上<servlet-mapping>元素的<servlet-name>屬性,也就是action在web.xml文件中尋找到匹配的<servlet>元素.

    3)              把請求轉發給以上<servlet>元素指定的ActionServlet,ActionServlet依據用戶的請求路徑,在Struts配置文件中檢查path屬性一樣的元素沒有.do.

    4)              ActionServlet根據<action>元素的name屬性創建一個ActionForm對象,把客戶端的提交的數據傳給它,在把ActionForm保存在<action>元素的scope屬性設置的范圍內.

    5)              <cation>元素的validate設置為true所以調用ActionForm的validate()方法驗證表單.

    6)              validate()方法返回一個ActionErrors對象里面包含一個ActionMessage對象,這個ActionMessage封裝了錯誤信息.

    7)              ActionServlet把ActionForm的validate()方法返回的ActionErrors對象保存在request范圍內,然后根據<cation>的input屬性把對象發送給相應的JSP.

    8)              hello.jsp的<html:errors>標簽從request范圍內讀取ActionErrors對象,在從ActionErrors對象中讀取ActionMessage對象,把包含的錯誤信息顯示在網頁上.

    以上是我根據自己的理解闡述了這個簡單的應用,至于具體的應用因為本Blog沒提供下載空間所以不能發布上來.希望通過上面的闡述能讓大家對一個Struts應用有一個初步的了解,如果不懂也沒關系,接下來的幾天我會繼續深入的把Struts的具體的組件介紹出來,如果感覺我寫的來爛別給我丟雞蛋哦HOHO! (網友們的支持,是我繼續寫技術文章的動力!)

    posted on 2005-10-22 15:02 我心依舊 閱讀(2218) 評論(4)  編輯  收藏

    FeedBack:
    # re: Struts的Hellpapp應用分析(原創)
    2005-10-25 13:03 | unicode
    希望以后能把相關技術的代碼發布上來,我們可以參考學習.例如Struts分頁算法的應用,期待ing  回復  更多評論
      
    # re: Struts的Hellpapp應用分析(原創)
    2006-03-28 10:18 | wjb
    期待原代碼!  回復  更多評論
      
    # re: Struts的Hellpapp應用分析(原創)
    2007-07-24 10:58 | wq
    正在學習孫衛琴老師的《精通Struts:...》第一個程序就是helloapp,看了很久,正在查找Validate()方法返回的Actionerrors對象何時為null,怎么算不包含actionMessage對象,google看到了樓主的文章,那個高興啊
    進來一看,那個失望啊
    相信樓主都沒認真看過你的東西
    估計直接從哪里down下來的
    有什么意思呢
    和我的書上一摸一樣的文字
    空格還懶得加
    哎。。。。
    幾年前高中老師說過的話
    天下文章一大抄  回復  更多評論
      
    # re: Struts的Hellpapp應用分析(原創)[未登錄]
    2007-07-24 15:51 | 我心依舊
    @wq
    你失望是你的問題.那么簡單的東西看不懂還用上Google?不錯我當時也看那本書了.不過文章的字是我一個字一個字打上去的,所以我會了.Struts就那么點東西,非常簡單易用.
    與其在網上亂搜想投機取巧,不如把書上的東西也自己打出來,沒準就會了.何況這天下誰抄誰啊?孫偉琴的書也是抄的.知識都是一樣的誰寫都是這么寫.
    無知,挖我2年前的東西.  回復  更多評論
      

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


    網站導航:
     
    主站蜘蛛池模板: 国产又黄又爽又猛免费app| 亚洲综合在线成人一区| 亚洲国产精品无码久久| 在线观看免费高清视频| 亚洲a级片在线观看| 免费人成在线视频| 亚洲欧美一区二区三区日产| 一个人免费观看在线视频www| 亚洲国产日韩在线| 黄色片在线免费观看| 亚洲人AV在线无码影院观看| 精品免费国产一区二区三区| 国产成人综合亚洲| 国外亚洲成AV人片在线观看| a视频在线观看免费| 亚洲精品美女在线观看播放| 毛片免费观看的视频| 国产精品亚洲а∨无码播放麻豆 | 国产精品观看在线亚洲人成网| 国产成人免费全部网站| 一级A毛片免费观看久久精品 | 免费国产a理论片| 久久亚洲高清综合| 99re这里有免费视频精品 | 亚洲一级毛片在线观| 处破痛哭A√18成年片免费| 另类小说亚洲色图| 国产亚洲精品a在线观看app | 成人免费无码大片A毛片抽搐色欲| 综合一区自拍亚洲综合图区| 亚洲色大成网站www永久一区| 69精品免费视频| 亚洲av日韩专区在线观看| 狠狠色婷婷狠狠狠亚洲综合 | 嫩草成人永久免费观看| 精品亚洲AV无码一区二区 | 亚洲成a人片在线观看久| 国产精品免费AV片在线观看| 亚洲性色AV日韩在线观看| 国产亚洲精品高清在线| 免费可以看黄的视频s色|