資源描述:
《基于jsp servlet的web應(yīng)用框架的設(shè)計與實現(xiàn)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、基于JSP/Servlet的Web應(yīng)用框架的設(shè)計與實現(xiàn)周云,余青松,敬宗儒(華東師范大學(xué)計算中心,上海200062)摘要:Web應(yīng)用程序的開發(fā)過程中存在著Framework的應(yīng)用。這些Framework使開發(fā)過程十分規(guī)范。它們自動地處理了部分非業(yè)務(wù)邏輯的過程.從而使得程序員的主要精力專注于業(yè)務(wù)邏輯的實現(xiàn)。文中設(shè)計并且實現(xiàn)了一個簡單的Framework模型,實現(xiàn)了部分的自動化處理。該模型的構(gòu)建,驗證了采用最基本的Java語言工具以及設(shè)計方式實現(xiàn)Framework的可能性。關(guān)鍵詞:Web應(yīng)用框架;MVC;設(shè)計和實現(xiàn)0.引言在開發(fā)Web應(yīng)用程序的過程中
2、,特別是JSP應(yīng)用程序,到處充斥著Framework的應(yīng)用。這些Framework的技術(shù)相當(dāng)成熟,規(guī)范十分完整。它們對于程序員的編碼規(guī)范以及后臺Model實體的管理相當(dāng)完善。文中關(guān)注的重點是如何用最基本的Java語言工具和設(shè)計方式來設(shè)計和實現(xiàn)一個帶有自動化操作功能的Framework,從而深人理解一些Framework內(nèi)在處理機(jī)制。1.Framework概述人們需要一個Framework來對軟件開發(fā)提供支持,并且對程序員所書寫的代碼進(jìn)行規(guī)范。一些公共的非邏輯的處理過程應(yīng)該做成共通模塊,一些不好的編成習(xí)慣應(yīng)該得到限制和糾正。同時,與數(shù)據(jù)庫打交道的數(shù)
3、據(jù)Model也應(yīng)該得到妥善管理。另外,這些操作的共通特性都是高于模塊級別但又屬于代碼級別的。所以,應(yīng)該設(shè)計出一個類似于規(guī)約性質(zhì)同時又是以實際代碼形式出現(xiàn)的管理體制。于是,F(xiàn)ramework便誕生了。目前流行的Framework有很多,比如Struts,印ring,JSF等等[I]。它們使JSP程序員從散兵游勇轉(zhuǎn)化為了正規(guī)軍。它們的共同點都是擁有自動化操作“前端”以及資源管理的“后端”.筆者參照Struts的前端自動化操作過程設(shè)計并且實現(xiàn)了一個Framework模型,希望借此深入了解一些Framework的內(nèi)部實現(xiàn)機(jī)制。2.Framework模型的
4、設(shè)計原則最根本的原則是Framework要給開發(fā)過程帶來便利,使得開發(fā)過程更加規(guī)范完善。為了實現(xiàn)這個根本原則,必須解決兩個問題:(1)盡量將非業(yè)務(wù)邏輯自動化處理;(2)將程序員的發(fā)揮空間進(jìn)行限制。13對于第一個問題,通過對比研究可以發(fā)現(xiàn),前臺視圖層回傳參數(shù)一Servlet接受參數(shù),并將參數(shù)封裝到一個對象當(dāng)中~Servlet選擇正確的視圖,并且進(jìn)行顯示,這三個步驟與業(yè)務(wù)邏輯沒有關(guān)系[21。不管你是什么業(yè)務(wù)邏輯,這三個步驟總會獨立地執(zhí)行。業(yè)務(wù)邏輯只會出現(xiàn)在這三個步驟的間隙之間。應(yīng)該據(jù)此對這三個步驟分別進(jìn)行封裝,實現(xiàn)自動化處理。對于第二個問題,可以提出
5、一個簡單的解決辦法:讓程序員“只可能將正確的代碼寫在正確的地方”。把其他與業(yè)務(wù)邏輯沒有關(guān)系的代碼全部進(jìn)行封裝即可。綜合所述,文中所描述的Framework模型的設(shè)計原則就是,封裝非業(yè)務(wù)邏輯的操作,限制程序員的自由度。當(dāng)然,這只是一個Framework模型初步設(shè)計與實現(xiàn),進(jìn)一步的應(yīng)用,需要按照標(biāo)準(zhǔn)的封裝方式完善整個Framework模型。3.Framework模型的設(shè)計Web程序的設(shè)計遵循現(xiàn)在成熟的MVC設(shè)計模式。Model的設(shè)計組合獨立于Framework之外。View是屬于前臺視圖層。Controler負(fù)責(zé)接收參數(shù),調(diào)用對應(yīng)的業(yè)務(wù)模型實體進(jìn)行處
6、理,返回對應(yīng)的視圖。由此可見,對于業(yè)務(wù)模型實體的設(shè)計重要的一點就是它要能夠自動地生成并且被Controller自動地調(diào)用,同時Controller還必須將對應(yīng)的數(shù)據(jù)緩沖區(qū)傳遞給它。那么業(yè)務(wù)模型所需要的就是一個標(biāo)記,一個能夠表明它身份的標(biāo)記。Framework模型的框架如圖1所示,其Sequence圖如圖2所示;其UM類圖如圖3所示。3.1獲取前臺視圖傳回的參數(shù)先從獲取前臺視圖傳回的參數(shù)開始進(jìn)行分析。既然要對這個過程進(jìn)行自動處理,那么程序要獲取HttpServletRequest當(dāng)中各個參數(shù)的名字,進(jìn)行數(shù)據(jù)緩沖的實體的引用,進(jìn)行數(shù)據(jù)緩沖實體當(dāng)中各個
7、對應(yīng)屬性的名字,進(jìn)行屬性設(shè)置和讀取的所有方法的名字??梢岳肑ava的RTTI機(jī)制解決這個問題。3.2獲取相應(yīng)的ActionForm實體(數(shù)據(jù)緩沖區(qū))引用13如果獲取了HttpServletRequest當(dāng)中所有的參數(shù)名字以及值,那么就可以把它們封裝到一個具體的實體當(dāng)中。簡言之,這個實體就是一個普通的Java類實體。那么,這一步所遇到的問題就是如何獲得這個實體的引用。因為這個實體的創(chuàng)建應(yīng)該由程序員完成,所以實體的類型就是千差萬別的。針對這種情況,應(yīng)該把這些類做統(tǒng)一的管理,即把它們?nèi)坷^承自一個Framework系統(tǒng)當(dāng)中定義的基類。同時,由于Act
8、ion-Form只是純粹的數(shù)據(jù)實體,業(yè)務(wù)處理方法沒有存在的必要,所以ActionForm當(dāng)中沒有對方法進(jìn)行擴(kuò)展的必要。因此,規(guī)定所有的A