日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Struts框架原理分析之我见

發(fā)布時(shí)間:2024/4/13 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts框架原理分析之我见 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ?struts是早期的成熟MVC前端控制層框架,具有諸多優(yōu)點(diǎn),近兩天又系統(tǒng)了研究了一下框架的原理,

希望能夠從原理上研究一下struts框架的實(shí)現(xiàn)思路。也就是說如果理解了這些原理的相關(guān)應(yīng)用技術(shù),就可以自己寫出

一個(gè)山寨版的struts了,當(dāng)然根據(jù)水平的不同,寫出的框架的健壯性、擴(kuò)展性、重用性肯定會相差很多的。

????????????????????struts的有兩個(gè)控制器,分別是前端的ActionServlet中心控制器,和后端所有action都需要繼承的

Action控制器。真正的開發(fā)過程中,項(xiàng)目開發(fā)人員并不需要對ActionServlet有過多的了解就可以開發(fā)的很happy。

但是這篇隨筆我想系統(tǒng)的寫一下我最近的研究體會,解析struts架構(gòu)。從ActionServlet開始,讓我們看透struts。

struts并不神秘,構(gòu)建起這個(gè)框架的技術(shù)是servlet,jsp,javabean,dom4j或jdom,反射。

?

1.ActionServlet(中心控制器)

ActionServlet需要做的工作是,根據(jù)web.xml的struts配置文件的路徑,解析struts配置文件(一般用的都是

/WEB-INF/struts-config.xml)。當(dāng)然不只找配置文件這么簡單,還需要初始化一些屬性值,如果web.xml沒有

指定,就使用默認(rèn)的值,這是第一個(gè)重要步驟。第二步填充ActionFrom,struts框架構(gòu)建于“Action-Form”模式上

所以這一步非常重要,也是難點(diǎn)。首先根據(jù)配置文件,利用反射的Class.forName方法查找匹配的類,如果存在則填充,

不存在則拋出異常。提取頁面所有參數(shù)名(request.getParameterNames()--Enumeration),接著把參數(shù)名與bean

中的屬性名進(jìn)行匹配,若匹配把取出的值填充到bean中(使用BeanUtils技術(shù))保存form對象。如果使用ActionForm

的子類DynaActionForm,則是走另一套類似的方法,只不過不需要使用反射,而是直接對比配置文件的配置屬性和

所配置數(shù)據(jù)類型是否一致。一致就構(gòu)建進(jìn)一個(gè)內(nèi)致的formbean對象。然后需要借助Action后端控制器進(jìn)行操作默認(rèn)會

調(diào)用對應(yīng)的action的execute方法(前提:action沒有繼承自DispatchAction之類的特殊Action控制器子類的話)。最終

接收返回的ActionForward,派發(fā)請求并查找響應(yīng)。

????????????????????????????????????????????????????????????????????????????????--------------------------這就是神秘的ActionServlet。

2.Action(后端控制器)

主要包含execute方法,還有其他加起來多達(dá)21種可覆寫方法。當(dāng)然這也就體現(xiàn)出了struts框架的完善度。如果我們自己想要在

不看源碼的情況下實(shí)現(xiàn)這個(gè)控制器,我覺得需要挑戰(zhàn)一下自己的能力。這里不過多的敘述了。

3.ActionFrom

包含方法:Reset、validate.....9種可覆寫方法。實(shí)現(xiàn)諸如校驗(yàn)、重置的功能。

4.ActionMapping

這是action的控制方法都要傳的一個(gè)重要參數(shù)對象,包含屬性:path,name,type,validate,HashMap:forwards....

5.ActionForward

這是action的控制方法都要返回的一個(gè)參數(shù)對象,包含屬性:name,path,redirect....

??????????????????????????????????????????????????????????????????????????????---------------------------以上就是struts的核心類。

?struts的插件實(shí)現(xiàn)是給了一個(gè)Plugin接口,其中有兩個(gè)接口方法來實(shí)現(xiàn)的。說白了就是在struts啟動的時(shí)候,會加載

插件的初始化方法或者配置文件。

?當(dāng)然除了上述的主要核心內(nèi)容外struts也要實(shí)現(xiàn)許多其他的功能類,來實(shí)現(xiàn)國際化,模塊異常,鏈?zhǔn)浇Y(jié)構(gòu),頁面標(biāo)簽處理,

可視化結(jié)構(gòu),以及一些我所沒有用到的功能。這些源代碼沒有研究,目前資歷尚淺,有待今后研究。

總結(jié):

不要因?yàn)楝F(xiàn)在有了struts2,JSF,甚至更新的JavaFX技術(shù),就不去學(xué)好老框架,每個(gè)框架都有它的智慧所在。況且掌握

一個(gè)框架又不難,所以更沒有理由拒絕。

?本文轉(zhuǎn)自施楊博客園博客,原文鏈接:http://www.cnblogs.com/shiyangxt/archive/2009/02/07/1385956.html,如需轉(zhuǎn)載請自行聯(lián)系原作者

超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的Struts框架原理分析之我见的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。