知音專欄 SpringMVC概述 Spring的web框架圍繞DispatcherServlet設(shè)計(jì),。 DispatcherServlet的作用是將請(qǐng)求分發(fā)到不同的處理器。 Spring的web框架包括可配置的處理器(handler)映射,、視圖(view)解析,、本地化(local)解析、 主題(theme)解析以及對(duì)文件上傳的支持,。 Spring的Web框架中缺省的處理器是Controller 接口,,這是一個(gè)非常簡(jiǎn)單的接口,僅包含ModelAndView handleRequest(request, response) 方法,??梢酝ㄟ^(guò)實(shí)現(xiàn)這個(gè)接口來(lái)創(chuàng)建自己的控制器(也可以稱之為處理器),但是更推薦繼承Spring提供的一系列控制器,, 比如AbstractController、AbstractCommandController 和SimpleFormController,。 注意,,需要選擇正確的基類:如果沒(méi)有表單,就不需要一個(gè)FormController,。 這是和Struts的一個(gè)主要區(qū)別,。 Spring Web MVC允許使用任何對(duì)象作為命令對(duì)象(或表單對(duì)象)- 不必實(shí)現(xiàn)某個(gè)特定于框架的接口或從某個(gè)基類繼承。 Spring的數(shù)據(jù)綁定相當(dāng)靈活,,例如,,它認(rèn)為類型不匹配這樣的錯(cuò)誤應(yīng)該是應(yīng)用級(jí)的驗(yàn)證錯(cuò)誤,而不是系統(tǒng)錯(cuò)誤,。 所以你不需要為了保證表單內(nèi)容的正確提交,,而重復(fù)定義一個(gè)和業(yè)務(wù)對(duì)象有相同屬性的表單對(duì)象來(lái)處理簡(jiǎn)單的無(wú) 類型字符串或者對(duì)字符串進(jìn)行轉(zhuǎn)換。這也是和Struts相比的另一個(gè)重要區(qū)別,,Struts是圍繞 Action和ActionForm等基類構(gòu)建的,。 和WebWork相比,Spring將對(duì)象細(xì)分成更多不同的角色:控制器( Controller),、可選的命令對(duì)象(Command Object)或表單對(duì)象(Form Object),, 以及傳遞到視圖的模型(Model)。模型不僅包含命令對(duì)象或表單對(duì)象,而且也可以包含任何引用數(shù)據(jù),。 相比之下,,WebWork的Action將所有的這些角色都合并在一個(gè)單獨(dú)的對(duì)象里。 雖然WebWork的確允許在表單中使用現(xiàn)有的業(yè)務(wù)對(duì)象,,但是必須把它們定義成相應(yīng)的Action 類的bean屬性,。更重要的是,在進(jìn)行視圖層(View)運(yùn)算和表單賦值時(shí),,WebWork使用的是同一個(gè)處理請(qǐng)求的 Action實(shí)例,。因此,引用數(shù)據(jù)也需要被定義成Action 的bean屬性,。這樣一個(gè)對(duì)象就承擔(dān)了太多的角色(當(dāng)然,,對(duì)于這個(gè)觀點(diǎn)仍有爭(zhēng)議)。 Spring的視圖解析相當(dāng)靈活,。一個(gè)控制器甚至可以直接向response輸出一個(gè)視圖 (此時(shí)控制器返回ModelAndView的值必須是null),。在一般的情況下,一個(gè)ModelAndView 實(shí)例包含一個(gè)視圖名字和一個(gè)類型為Map的model,, 一個(gè)model是一些以bean的名字為key,,以bean對(duì)象(可以是命令或form,也可以是其他的JavaBean) 為value的鍵值對(duì),。 對(duì)視圖名稱的解析處理也是高度可配置的,,可以通過(guò)bean的名字、屬性文件或者自定義的 ViewResolver實(shí)現(xiàn)來(lái)進(jìn)行解析,。實(shí)際上基于 Map的model(也就是MVC中的M)是高度抽象的,,適用于各種表現(xiàn)層技術(shù)。 也就是說(shuō),,任何表現(xiàn)層都可以直接和Spring集成,,無(wú)論是JSP、Velocity還是其它表現(xiàn)層技術(shù),。 Map model可以被轉(zhuǎn)換成合適的格式,,比如JSP request attribute或者Velocity template model。 Spring MVC框架的特點(diǎn)
Spring Bean的生命周期可以被限制在當(dāng)前的HTTP Request或者HTTP Session,。 準(zhǔn)確的說(shuō),這并非Spring MVC框架本身特性,,而應(yīng)歸屬于Sping MVC使用的WebApplicationContext容器,。
Spring MVC工作原理 就我自己對(duì)Spring MVC的理解來(lái)談?wù)勂涔ぷ髟怼?/span>Spring MVC的工作是要依賴整個(gè)Spring的,。 DispatcherServlet是調(diào)度的核心,處理器映射器,,視圖解析器,,業(yè)務(wù)處理器都要被前端控制器所調(diào)配,畫(huà)了一張簡(jiǎn)單架構(gòu)圖: 分步驟來(lái)解釋一下:
以上就是SpringMVC的大體架構(gòu)和工作原理,。 Spring框架的源碼中使用了非常多的經(jīng)典設(shè)計(jì)模式和設(shè)計(jì)原則。是不可多得的代碼大餐,。找個(gè)時(shí)間研究一下,。
送書(shū)活動(dòng)欄 輕量級(jí)JavaEE企業(yè)應(yīng)用實(shí)戰(zhàn) |
|
來(lái)自: 太極混元天尊 > 《學(xué)習(xí)資料》