零距離接觸struts

來源:互聯網
上載者:User

        Struts今天學習完了,與上個學習項目相比,這個的學習慢了很多,主要還是自己懈怠了。

        Struts是一個很經典的MVC架構。

ActionServlet

        ActionServlet俗稱前端控制器,對URL進行截取,由截取到的URL擷取到struts-config中配置的以此URL為path的Action。

        ActionServlet還利用BeanUtils對request中的parameter的擷取進行了封裝成了一個ActionForm,從而使得擷取參數這個環節簡單了很多。

        此類是有Struts進行的實現,無需修改。

ActionForm

        ActionForm是對頁面參數擷取進行的封裝。此類編寫要求:屬性要有getter和setter方法,名稱一般與表單上name要求一致。

        擷取參數用的方法是getElementsByName,所以擷取到的是一個數組,所以如果要擷取多個(checkbox),那麼在ActionForm中用一個數組接收即可。

        如果擷取的是上傳資料,那麼用FormFile參數接收即可,多檔案上傳在後續部落格會進行詳細敘述。

        ActionForm的存在,從另一方面減少了開發的工作:轉換器。在ActionForm如果設定參數為int類型的,那麼會直接將頁面參數轉成int類型的,這些都歸功於轉換器。需要注意的是java.util.Date在ActionForm沒有轉換器,所以如果要用這個類型那麼轉成字串或者自訂一個轉換器。

Action

        Action就是業務控制器了,主要完成參數的擷取,Model的調用,轉向這三個功能。

        在參數擷取方面,有ActionForm收集表單資料,還可以自己通過request進行擷取

        在轉向方面,struts提供了ActionForward這個類,可以通過ActionMapping擷取,也可以自己手動new一個。

        需要注意的是:Action是單一實例的,所以會存線上程安全問題。

ActionForward

        ActionForward封裝了轉向資訊,在配置Action時對forward標籤進行配置(非forward屬性)。

ActionMapping

        每一條Action的配置資訊,都以path為key,值為ActionMapping在Map中進行了儲存,在訪問時,如果Map中沒有以path為key的記錄,那麼就返回有unknown屬性的mapping,如果沒有,那麼就將此異常交給tomcat來處理。

        關於Action的配置,都在ActionMapping中有所體現,例如type可以用可以用它getType()進行擷取,在ActionServlet中也是通過這個方法擷取到類名從而實現動態載入然後放到Map中的。

ForwardAction

        這個是一個Action,如果沒有特別需要,他等價於Action配置forward屬性。

        二者區別:

        在ActionServlet中,processForward方法是用來判斷是否設定了forward屬性的,如果設定了,那麼就會直接返回,Action不會進行執行個體化。

        而ForwardAction的的轉向頁面是配置在parameter中的,而type統一配置成org.apache.struts.actions.ForwardAction,此Action會進行執行個體化。

        如果在Action沒有處理,那麼上面兩種方法都沒有區別,但如果需要處理,就要用到後者,建立一個類繼承ForwardAction,然後重寫execute方法,進行完自己的處理後,然後調用父類execute方法,不需要自己寫轉向語句,因為在ForwardAction實現的execute方法中,有轉向操作。

DispatchAction

        DispatchAction也是一個Action,它的出現是因為之前的寫法Action的數量太多了,有些Action可能就是3-4行有效代碼,但是就是一個類,對類的維護帶來了不便。

        整合DispatchAction的類,不需要重寫execute方法,只需要寫與execute方法同參數同傳回值的一個方法

        在配置DispatchAction時,配置一下parameter這個屬性,然後在調用的時候,附帶parameter設定的參數值為要調用的方法名(完全一樣),那麼就會調用到相應的方法上面去了。

其他邊緣知識點:

        國際化、異常、模式比對、標籤庫等就不做羅列了,我把他們歸結為用的時候再詳細學習的知識,現在知道就行了。

        本文書寫目的旨在在今後再碰到MVC架構時,將新知識點往此架構上靠攏,所以主要是原理上的說明,如果只是實際使用,感覺還是很容易上手的,因為架構的出現帶來的是項目開發的簡單便捷以及規範。

        有不全,不對之處歡迎交流~~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.