W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Spring的模型-視圖-控制器(MVC)框架是圍繞一個(gè)DispatcherServlet
來設(shè)計(jì)的,這個(gè)Servlet會(huì)把請(qǐng)求分發(fā)給各個(gè)處理器,并支持可配置的處理器映射、視圖渲染、本地化、時(shí)區(qū)與主題渲染等,甚至還能支持文件上傳。處理器是你的應(yīng)用中注解了@Controller
和@RequestMapping
的類和方法,Spring為處理器方法提供了極其多樣靈活的配置。Spring 3.0以后提供了@Controller
注解機(jī)制、@PathVariable
注解以及一些其他的特性,你可以使用它們來進(jìn)行RESTful web站點(diǎn)和應(yīng)用的開發(fā)。
“對(duì)擴(kuò)展開放”是Spring Web MVC框架一個(gè)重要的設(shè)計(jì)原則,而對(duì)于Spring的整個(gè)完整框架來說,其設(shè)計(jì)原則則是“對(duì)擴(kuò)展開放,對(duì)修改閉合”。
Spring Web MVC核心類庫(kù)中的一些方法被定義為
final
方法。作為開發(fā)人員,你不能覆寫這些方法以定制其行為。當(dāng)然,不是說絕對(duì)不行,但請(qǐng)記住這條原則,絕大多數(shù)情況下不是好的實(shí)踐。關(guān)于該原則的詳細(xì)解釋,你可以參考Seth Ladd等人所著的“深入解析Spring Web MVC與Web Flow”一書。相關(guān)信息在第117頁,“設(shè)計(jì)初探(A Look At Design)”一節(jié)?;蛘?,你可以參考:
你無法增強(qiáng)Spring MVC中的
final
方法,比如AbstractController.setSynchronizeOnSession()
方法等。請(qǐng)參考10.6.1 理解AOP代理一節(jié),其中解釋了AOP代理的相關(guān)知識(shí),論述了為什么你不能對(duì)final
方法進(jìn)行增強(qiáng)。
在Spring Web MVC中,你可以使用任何對(duì)象來作為命令對(duì)象或表單返回對(duì)象,而無須實(shí)現(xiàn)一個(gè)框架相關(guān)的接口或基類。Spring的數(shù)據(jù)綁定非常靈活:比如,它會(huì)把數(shù)據(jù)類型不匹配當(dāng)成可由應(yīng)用自行處理的運(yùn)行時(shí)驗(yàn)證錯(cuò)誤,而非系統(tǒng)錯(cuò)誤。你可能會(huì)為了避免非法的類型轉(zhuǎn)換在表單對(duì)象中使用字符串來存儲(chǔ)數(shù)據(jù),但無類型的字符串無法描述業(yè)務(wù)數(shù)據(jù)的真正含義,并且你還需要把它們轉(zhuǎn)換成對(duì)應(yīng)的業(yè)務(wù)對(duì)象類型。有了Spring的驗(yàn)證機(jī)制,意味著你再也不需這么做了,并且直接將業(yè)務(wù)對(duì)象綁定到表單對(duì)象上通常是更好的選擇。
Spring的視圖解析也是設(shè)計(jì)得異常靈活。控制器一般負(fù)責(zé)準(zhǔn)備一個(gè)Map
模型、填充數(shù)據(jù)、返回一個(gè)合適的視圖名等,同時(shí)它也可以直接將數(shù)據(jù)寫到響應(yīng)流中。視圖名的解析高度靈活,支持多種配置,包括通過文件擴(kuò)展名、Accept
內(nèi)容頭、bean、配置文件等的配置,甚至你還可以自己實(shí)現(xiàn)一個(gè)視圖解析器ViewResolver
。模型(MVC中的M,model)其實(shí)是一個(gè)Map
類型的接口,徹底地把數(shù)據(jù)從視圖技術(shù)中抽象分離了出來。你可以與基于模板的渲染技術(shù)直接整合,如JSP、Velocity和Freemarker等,或者你還可以直接生成XML、JSON、Atom以及其他多種類型的內(nèi)容。Map
模型會(huì)簡(jiǎn)單地被轉(zhuǎn)換成合適的格式,比如JSP的請(qǐng)求屬性(attribute),一個(gè)Velocity模板的模型等。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: