摘 要: Spring是一個為了解決企業(yè)應(yīng)用程序開發(fā)復(fù)雜性而創(chuàng)建的開源框架,提供了一種有效的方式來建立和組織J2EE應(yīng)用程序。本文首先簡單介紹了Spring和Spring MVC框架,然后介紹了用Spring MVC開發(fā)應(yīng)用程序的過程。
關(guān)鍵詞:Spring MVC 框架 Web開發(fā)
一、引言
在軟件開發(fā)中出現(xiàn)過各種各樣的框架,開源軟件的興起,使得各種各樣的框架紛紛出現(xiàn)。例如,Apache組織下就擁有諸多的框架類產(chǎn)品。框架就是一組協(xié)同工作的類,它們?yōu)樘囟愋偷能浖?gòu)筑了一個可重用的設(shè)計。然而,傳統(tǒng)的框架使得應(yīng)用程序組件過于依賴于框架中的類,這種耦合度的提高降低了組件的復(fù)用性。Spring框架的出現(xiàn),使得組件之間更松散的耦合成為了可能。
二、Spring簡介
Spring框架由一個容器,一個配置和組織組件的框架,和一組內(nèi)置的為事務(wù)、持久化和Web用戶接口提供的服務(wù)組成。作為一種輕量級的J2EE框架,Spring提供了一種有效的方式來建立和組織J2EE應(yīng)用程序。
Spring IoC,借助于依賴注入設(shè)計模式,使得開發(fā)者不用理會對象自身的生命周期極其關(guān)系,而且能夠改善開發(fā)者對模式的使用。IoC(Inversion of Control;控制反轉(zhuǎn)),又稱DI(Dependency Injection;依賴注入),是面向?qū)ο箢I(lǐng)域新興的編程思想,也是Spring的精髓所在。簡單地說,IoC就是指程序之間的關(guān)系由容器來控制,而不是傳統(tǒng)實現(xiàn)中由程序代碼直接操控。這也就是所謂IoC的概念所在:控制權(quán)由應(yīng)用代碼轉(zhuǎn)到外部容器,控制權(quán)的轉(zhuǎn)移,也就是所謂的反轉(zhuǎn)。IoC將控制創(chuàng)建的職責(zé)搬進(jìn)了框架中,并把它從應(yīng)用代碼脫離開來。當(dāng)使用Spring的IoC容器時只需指出組件需要的對象,在運行時Spring的IoC容器會根據(jù)XML配置數(shù)據(jù)提供給它。
Spring AOP,借助于Spring實現(xiàn)攔截器,開發(fā)者能夠?qū)崿F(xiàn)以聲名方式使用企業(yè)級服務(wù),比如安全性服務(wù)、事務(wù)服務(wù)。AOP合理地補(bǔ)充了OOP,借助于Spring AOP,開發(fā)者能夠高效地使用J2EE服務(wù)。
Spring服務(wù)抽象,借助于各種J2EE API抽象,使得開發(fā)者能夠一致地使用J2EE技術(shù),而不管具體是使用什么J2EE API,借助于Spring服務(wù)抽象,使代碼大大減少,滿足“更少代碼,更少BUG”的軟件設(shè)計原則。
Spring IoC+Spring AOP+Spring服務(wù)抽象,一起形成Spring,這樣一個有機(jī)體,使得構(gòu)建輕量級J2EE成為可能。
三、Spring MVC簡介
大部分Java應(yīng)用都是Web應(yīng)用,Spring框架提供了構(gòu)建Web的框架。和眾多其它Web框架一樣,它基于MVC設(shè)計理念。此外,由于它采用了松散耦合可插拔組件結(jié)構(gòu),因此具有比其它MVC框架更多的擴(kuò)展性和靈活性。
Spring MVC框架圍繞DispatcherServlet這個核心展開,DispatcherServlet的作用是截獲請求并組織一系列組件共同完成請求的處理工作。
Spring MVC是基于Model 2實現(xiàn)的技術(shù)框架,Model 2是經(jīng)典的MVC(Model View Control)模型的Web應(yīng)用變體,這個改變主要源于HTTP協(xié)議的無狀態(tài)性。Model 2的目的和MVC一樣,也是利用處理器分離模型、視圖和控制,達(dá)到不同技術(shù)層級間松散耦合的效果,提高系統(tǒng)靈活性、復(fù)用性和可維護(hù)性。在多數(shù)情況下,你可以將Model 2與MVC等同起來。
四、用Spring MVC進(jìn)行開發(fā)的處理過程
?。?)整個過程開始于客戶端發(fā)送一個HTTP請求。
?。?)Dispatcher Servlet接收這個請求后,并將請求的處理工作委托給具體的處理器(Handler),后者負(fù)責(zé)處理請求執(zhí)行相應(yīng)的業(yè)務(wù)邏輯。在這之前,Dispatcher Servlet必須能夠憑借請求信息(URL或請求參數(shù)等)按照某種機(jī)制找到請求對應(yīng)的處理器,Dispatcher Servlet是通過垂詢Handler Mapping完成這一工作的。
?。?)當(dāng)Dispatcher Servlet從Handler Mapping中得到當(dāng)前請求對應(yīng)的處理器后,它就將請求分派給這個處理器。處理器根據(jù)請求的信息執(zhí)行相應(yīng)的業(yè)務(wù)邏輯,一個設(shè)計良好的處理器應(yīng)該通過調(diào)用Service層的業(yè)務(wù)對象完成業(yè)務(wù)處理。
Spring提供了豐富的處理器類型,在真正處理業(yè)務(wù)邏輯前,有些處理器會事先執(zhí)行兩項預(yù)處理工作:
第一項:將HttpServletRequest請求參數(shù)綁定到一個POJO對象中;
第二項:對綁定了請求參數(shù)的POJO對象進(jìn)行數(shù)據(jù)合法性校驗;
?。?)處理器完成業(yè)務(wù)邏輯的處理后將返回一個Model And View給Dispatcher Servlet,Model And View包含了視圖邏輯名和渲染視圖時需要用到的模型數(shù)據(jù)對象。
?。?)由于Model and View中包含的是視圖邏輯名,DispatcherServlet必須知道這個邏輯名對應(yīng)的真實視圖對象,這項視圖解析的工作通過調(diào)用ViewResolver來完成。
(6)當(dāng)?shù)玫秸鎸嵉囊晥D對象后,DispatcherServlet將請求分派給這個View對象,由其完成Model數(shù)據(jù)的渲染工作。
?。?)最終客戶端得到返回的響應(yīng),這可能是一個普通的HTML頁面,也可能是一個Excel電子表格,甚至是一個PDF文檔等不一而足的視圖形式,Spring的視圖類型異常豐富和靈活。
參考文獻(xiàn):
?。?]王福強(qiáng).Spring揭秘.人民郵電出版社,2009.
?。?]羅時飛.精通Spirng.電子工業(yè)出版社,2007.