Struts框架原理分析之我见
? ?struts是早期的成熟MVC前端控制層框架,具有諸多優點,近兩天又系統了研究了一下框架的原理,
希望能夠從原理上研究一下struts框架的實現思路。也就是說如果理解了這些原理的相關應用技術,就可以自己寫出
一個山寨版的struts了,當然根據水平的不同,寫出的框架的健壯性、擴展性、重用性肯定會相差很多的。
????????????????????struts的有兩個控制器,分別是前端的ActionServlet中心控制器,和后端所有action都需要繼承的
Action控制器。真正的開發過程中,項目開發人員并不需要對ActionServlet有過多的了解就可以開發的很happy。
但是這篇隨筆我想系統的寫一下我最近的研究體會,解析struts架構。從ActionServlet開始,讓我們看透struts。
struts并不神秘,構建起這個框架的技術是servlet,jsp,javabean,dom4j或jdom,反射。
?
1.ActionServlet(中心控制器)
ActionServlet需要做的工作是,根據web.xml的struts配置文件的路徑,解析struts配置文件(一般用的都是
/WEB-INF/struts-config.xml)。當然不只找配置文件這么簡單,還需要初始化一些屬性值,如果web.xml沒有
指定,就使用默認的值,這是第一個重要步驟。第二步填充ActionFrom,struts框架構建于“Action-Form”模式上
所以這一步非常重要,也是難點。首先根據配置文件,利用反射的Class.forName方法查找匹配的類,如果存在則填充,
不存在則拋出異常。提取頁面所有參數名(request.getParameterNames()--Enumeration),接著把參數名與bean
中的屬性名進行匹配,若匹配把取出的值填充到bean中(使用BeanUtils技術)保存form對象。如果使用ActionForm
的子類DynaActionForm,則是走另一套類似的方法,只不過不需要使用反射,而是直接對比配置文件的配置屬性和
所配置數據類型是否一致。一致就構建進一個內致的formbean對象。然后需要借助Action后端控制器進行操作默認會
調用對應的action的execute方法(前提:action沒有繼承自DispatchAction之類的特殊Action控制器子類的話)。最終
接收返回的ActionForward,派發請求并查找響應。
????????????????????????????????????????????????????????????????????????????????--------------------------這就是神秘的ActionServlet。
2.Action(后端控制器)
主要包含execute方法,還有其他加起來多達21種可覆寫方法。當然這也就體現出了struts框架的完善度。如果我們自己想要在
不看源碼的情況下實現這個控制器,我覺得需要挑戰一下自己的能力。這里不過多的敘述了。
3.ActionFrom
包含方法:Reset、validate.....9種可覆寫方法。實現諸如校驗、重置的功能。
4.ActionMapping
這是action的控制方法都要傳的一個重要參數對象,包含屬性:path,name,type,validate,HashMap:forwards....
5.ActionForward
這是action的控制方法都要返回的一個參數對象,包含屬性:name,path,redirect....
??????????????????????????????????????????????????????????????????????????????---------------------------以上就是struts的核心類。
?struts的插件實現是給了一個Plugin接口,其中有兩個接口方法來實現的。說白了就是在struts啟動的時候,會加載
插件的初始化方法或者配置文件。
?當然除了上述的主要核心內容外struts也要實現許多其他的功能類,來實現國際化,模塊異常,鏈式結構,頁面標簽處理,
可視化結構,以及一些我所沒有用到的功能。這些源代碼沒有研究,目前資歷尚淺,有待今后研究。
總結:
不要因為現在有了struts2,JSF,甚至更新的JavaFX技術,就不去學好老框架,每個框架都有它的智慧所在。況且掌握
一個框架又不難,所以更沒有理由拒絕。
?本文轉自施楊博客園博客,原文鏈接:http://www.cnblogs.com/shiyangxt/archive/2009/02/07/1385956.html,如需轉載請自行聯系原作者
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的Struts框架原理分析之我见的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 内存映射MMAP和DMA【转】
- 下一篇: linux内存占用过高原因
