久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

SpringMVC架構(gòu)淺析

 太極混元天尊 2018-05-21

作者:Pickle

出處:cnblogs.com/wxisme/p/4926266.html

知音專欄

 

關(guān)于資源視頻下載的說(shuō)明

常用設(shè)計(jì)模式完整系列篇

【強(qiáng)化編程功底】算法文摘


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)

  • 清晰的角色劃分:控制器(controller),、驗(yàn)證器(validator),、 命令對(duì)象(command object)、表單對(duì)象(form object),、模型對(duì)象(model object),、 Servlet分發(fā)器(DispatcherServlet)、 處理器映射(handler mapping),、視圖解析器(view resolver)等等,。 每一個(gè)角色都可以由一個(gè)專門的對(duì)象來(lái)實(shí)現(xiàn),。

  • 強(qiáng)大而直接的配置方式:將框架類和應(yīng)用程序類都能作為JavaBean配置,支持跨多個(gè)context的引用,,例如,,在web控制器中對(duì)業(yè)務(wù)對(duì)象和驗(yàn)證器(validator)的引用。

  • 可適配,、非侵入:可以根據(jù)不同的應(yīng)用場(chǎng)景,,選擇合適的控制器子類 (simple型、command型,、form型,、wizard型、multi-action型或者自定義),,而不是從單一控制器 (比如Action/ActionForm)繼承,。

  • 可重用的業(yè)務(wù)代碼:可以使用現(xiàn)有的業(yè)務(wù)對(duì)象作為命令或表單對(duì)象,而不需要去擴(kuò)展某個(gè)特定框架的基類,。

  • 可定制的綁定(binding) 和驗(yàn)證(validation):比如將類型不匹配作為應(yīng)用級(jí)的驗(yàn)證錯(cuò)誤,, 這可以保存錯(cuò)誤的值。再比如本地化的日期和數(shù)字綁定等等,。在其他某些框架中,,你只能使用字符串表單對(duì)象, 需要手動(dòng)解析它并轉(zhuǎn)換到業(yè)務(wù)對(duì)象,。

  • 可定制的handler mapping和view resolution:Spring提供從最簡(jiǎn)單的URL映射,, 到復(fù)雜的、專用的定制策略,。與某些web MVC框架強(qiáng)制開(kāi)發(fā)人員使用單一特定技術(shù)相比,,Spring顯得更加靈活。

  • 靈活的model轉(zhuǎn)換:在Springweb框架中,,使用基于Map的 鍵/值對(duì)來(lái)達(dá)到輕易地與各種視圖技術(shù)的集成。

  • 可定制的本地化和主題(theme)解析:支持在JSP中可選擇地使用Spring標(biāo)簽庫(kù),、支持JSTL,、支持Velocity(不需要額外的中間層)等等。

  • 簡(jiǎn)單而強(qiáng)大的JSP標(biāo)簽庫(kù)(Spring Tag Library):支持包括諸如數(shù)據(jù)綁定和主題(theme) 之類的許多功能,。它提供在標(biāo)記方面的最大靈活性,。

  • JSP表單標(biāo)簽庫(kù):在Spring2.0中引入的表單標(biāo)簽庫(kù),使得在JSP中編寫(xiě) 表單更加容易,。


Spring Bean的生命周期可以被限制在當(dāng)前的HTTP Request或者HTTP Session,。 準(zhǔn)確的說(shuō),這并非Spring MVC框架本身特性,,而應(yīng)歸屬于Sping MVC使用的WebApplicationContext容器,。


對(duì)SpringMVC的介紹參考自官方文檔:http://docs./spring/docs/current/spring-framework-reference/html/mvc.html


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)解釋一下:

  • 用戶在客戶端向DispatcherServlet發(fā)送請(qǐng)求,。

  • DispatcherServlet接受到請(qǐng)求后調(diào)用處理器映射器映射對(duì)應(yīng)的Controller,。

  • 處理器映射器返回映射到的Controller給DispatcherServlet。

  • DispatcherServlet通過(guò)得到的Controller來(lái)調(diào)用處理器,。

  • Controller根據(jù)請(qǐng)求調(diào)用相應(yīng)的業(yè)務(wù)邏輯Service,。

  • Service調(diào)用數(shù)據(jù)訪問(wèn)層。

  • Service抽取數(shù)據(jù)模型,。

  • Service把數(shù)據(jù)模型返回給Controller,。

  • Controller包裝數(shù)據(jù)返回給DispatcherServlet一個(gè)ModelAndView。

  • DispatcherServlet根據(jù)得到的ModelAndView調(diào)用視圖解析器,。

  • 視圖解析器返回一個(gè)指定格式的視圖,。

  • DispatcherServlet把得到的視圖forward到JSP頁(yè)面。

  • JSP頁(yè)面響應(yīng)用戶的請(qǐng)求并顯示到客戶端,。


以上就是SpringMVC的大體架構(gòu)和工作原理,。


Spring框架的源碼中使用了非常多的經(jīng)典設(shè)計(jì)模式和設(shè)計(jì)原則。是不可多得的代碼大餐,。找個(gè)時(shí)間研究一下,。


更多關(guān)于SpringMVC的介紹請(qǐng)參考官方文檔:http://docs./spring/docs/current/spring-framework-reference/html/mvc.html




送書(shū)活動(dòng)欄

輕量級(jí)JavaEE企業(yè)應(yīng)用實(shí)戰(zhàn)


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多