版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1第21章 spring 的mvc框架 spring不但一個(gè)很好的集成框剪,它還提供了構(gòu)建web應(yīng)用程序的全功能mvc模塊。spring 的mvc框架非常強(qiáng)大并不遜色于其他專業(yè)的web框架,如struts、webwork。但在國內(nèi)spring mvc應(yīng)用的并不是特別多,原因可能是struts太深入人心的緣故吧。 雖然spring mvc并不是本書的重點(diǎn),但了解它的結(jié)構(gòu)和原理也是十分有好處的。221.1 spring mvc簡介 spring的mvc web 框架是高度可配置的,而且包含多種視圖技術(shù),例如jsp、velocity、tiles和itext。spring mvc 分離了控制器、模型對
2、象、分派器以及處理程序?qū)ο蟮慕巧?,這種分離讓它們更容易進(jìn)行定制。321.1.1 spring mvc的結(jié)構(gòu) spring的web框架是圍繞dispatcherservlet來進(jìn)行設(shè)計(jì)的。dispatcherservlet的作用是將請求分發(fā)到不同的處理器。spring的web框架包括可配置的處理器(handler)映射、視圖(view)解析、本地化(local)解析、主題(theme)解析以及對上傳文件解析。處理器是對controller接口的實(shí)現(xiàn),該接口僅僅定義了modelandview handlerequest(request, response)方法??梢酝ㄟ^實(shí)現(xiàn)這個(gè)接口來生成自己的控制
3、器(也可以稱之為處理器),但是從spring提供的一系列控制器繼承會更省事,比如abstractcontroller、abstractcommandcontroller和simpleformcontroller。421.1.2 spring web mvc框架的特點(diǎn)spring web mvc框架提供了大量獨(dú)特的功能,包括:清晰的角色劃分:控制器(controller)、驗(yàn)證器(validator)、命令對象(command object)、表單對象(form object)、模型對象(model object)、servlet分發(fā)器(dispatcherservlet)、處理器映射(hand
4、ler mapping)、視圖解析器(view resolver)等等。 每一個(gè)角色都可以由一個(gè)專門的對象來實(shí)現(xiàn)。強(qiáng)大而直接的配置方式:將框架類和應(yīng)用類都作為javabean配置,支持在一個(gè)context中引用其他context的中javabean,例如,在web控制器中對業(yè)務(wù)對象和驗(yàn)證器(validator)的引用。521.1.2 spring web mvc框架的特點(diǎn)可重用的業(yè)務(wù)代碼:可以使用現(xiàn)有的業(yè)務(wù)對象作為命令或表單對象,而不需要在類似actionform的子類中重復(fù)它們的定義??啥ㄖ频慕壎ǎ╞inding) 和驗(yàn)證(validation):比如將類型不匹配作為應(yīng)用級的驗(yàn)證錯(cuò)誤,這可以
5、保存錯(cuò)誤的值。再比如本地化的日期和數(shù)字綁定等等。在其他某些框架中,只能使用字符串表單對象,需要手動解析它并轉(zhuǎn)換到業(yè)務(wù)對象??啥ㄖ频膆andler mapping和view resolution:spring提供從最簡單的的url映射,到復(fù)雜的、專用的定制策略。與某些mvc框架強(qiáng)制開發(fā)人員使用單一特定技術(shù)相比,spring顯得更加靈活。靈活。621.1.2 spring web mvc框架的特點(diǎn) 靈活的model轉(zhuǎn)換:在springweb框架中,使用基于map的名/值對來達(dá)到輕易地與各種視圖技術(shù)的集成。 可定制的本地化和主題(theme)解析:支持在jsp中可選擇地使用spring標(biāo)簽庫、支持j
6、stl、支持velocity(不需要額外的中間層)等等。 spring bean的生命周期可以被限制在當(dāng)前的http request或者h(yuǎn)ttp session。準(zhǔn)確的說,這并非spring mvc框架本身特性,而應(yīng)歸屬于sping mvc使用的webapplicationcontext容器。721.2 dispatcherservlet的功能和其它web框架一樣,spring的web框架是一個(gè)請求驅(qū)動的web框架,其設(shè)計(jì)圍繞一個(gè)中心的servlet進(jìn)行,它能將請求分發(fā)給控制器,并提供其它功能幫助web應(yīng)用開發(fā)。然而,spring的dispatcherservlet所做的不僅僅是這些,它和sp
7、ring的ioc容器完全集成在一起,從而允許使用spring的其它功能。821.2.1 在web服務(wù)器中配置dispatcherservlet dispatcherservlet顧名思義實(shí)際上還是一個(gè)servlet。和其它servlet一樣,dispatcherservlet定義在web應(yīng)用的web.xml文件里。dispatcherservlet處理的請求必須在同一個(gè)web.xml文件里使用url-mapping定義映射。如代碼21-1所示演示了如何配置dispatcherservlet。921.2.2 加載bean配置文件當(dāng)dispatcherservlet配置好以后,dispatcher
8、servlet接收到與其對應(yīng)的請求之時(shí),處理就開始了。下面的列表描述了dispatcherservlet處理請求的全過程:(1)找到webapplicationcontext并將其綁定到請求的一個(gè)屬性上,以便控制器和處理鏈上的其它處理器能使用webapplicationcontext。默認(rèn)的屬性名為dispatcherservlet.web_application_context_attribute。(2)將本地化解析器(localresolver)綁定到請求上,這樣使得處理鏈上的處理器在處理請求(準(zhǔn)備數(shù)據(jù)、顯示視圖等等)時(shí)能進(jìn)行本地化處理。若不使用本地化解析器,也不會有任何副作用,因此如果不
9、需要本地化解析,忽略它就可以了。1021.2.2 加載bean配置文件(3)如果上傳文件解析器被指定,spring會檢查每個(gè)接收到的請求是否存在上傳文件,如果是,這個(gè)請求將被封裝成multiparthttpservletrequest以便被處理鏈中的其它處理器使用。(4)找到合適的處理器,執(zhí)行和這個(gè)處理器相關(guān)的執(zhí)行鏈(預(yù)處理器,后處理器,控制器),以便為視圖準(zhǔn)備模型數(shù)據(jù)。(5)如果模型數(shù)據(jù)被返回,就使用配置在webapplicationcontext中的視圖解析器顯示視圖,否則視圖不會被顯示。有多種原因可以導(dǎo)致返回的數(shù)據(jù)模型為空,比如預(yù)處理器或后處理器可能截取了請求,這可能是出于安全原因,也可
10、能是請求已經(jīng)被處理過,沒有必要再處理一次。1121.2.3 spring web應(yīng)用的上下文webapplicationcontext僅僅是一個(gè)擁有web應(yīng)用必要功能的普通applicationcontext。它與一個(gè)標(biāo)準(zhǔn)的applicationcontext的不同之處在于,它能夠解析加載主題,并且它知道自己與哪個(gè)servlet相關(guān)聯(lián)(通過servletcontext)。webapplicationcontext被綁定在servletcontext上,當(dāng)需要的時(shí)候,可以使用requestcontextutils提供的靜態(tài)方法找到webapplicationcontext。spring的disp
11、atcherservlet有一組特殊的bean,用來處理請求和渲染相應(yīng)的視圖。這些bean包含在spring的框架里,可以在webapplicationcontext中配置,配置方式與配置其它bean相同。這些bean中的每一個(gè)都在下文作詳細(xì)描述。此刻讀者只需知道它們的存在,便繼續(xù)對dispatcherservlet進(jìn)行討論。對大多數(shù)bean,spring都提供了合理的缺省值,所以在開始階段,不必?fù)?dān)心如何對其進(jìn)行配置。1221.3 控制器(controller)控制器的概念是mvc設(shè)計(jì)模式的一部分,在其他web框架中常常被稱為action,而在spring mvc中叫做controller。應(yīng)
12、用程序的行為通常被定義為服務(wù)接口,而控制器使得用戶可以訪問應(yīng)用所提供的服務(wù)??刂破鹘馕鲇脩糨斎耄⑵滢D(zhuǎn)換成合理的模型數(shù)據(jù),從而可以進(jìn)一步由視圖展示給用戶。spring以一種抽象的方式實(shí)現(xiàn)了控制器概念,這樣使得不同類型的控制器可以被創(chuàng)建。spring本身包含表單控制器、命令控制器、向?qū)涂刂破鞯榷喾N多樣的控制器??梢园l(fā)現(xiàn)controller接口僅僅聲明了一個(gè)方法,它負(fù)責(zé)處理請求并返回合適的模型和視圖。雖然controller接口是完全抽象的,controller接口僅僅定義了每個(gè)控制器都必須提供的基本功能:處理請求并返回一個(gè)模型和一個(gè)視圖。但spring也提供了許多可能會用到的控制器。可以直接
13、使用或者繼承它們來實(shí)現(xiàn)需要個(gè)功能1321.3.1 基類abstractcontroller 為了提供一套基礎(chǔ)設(shè)施,所有的spring控制器都繼承了abstractcontroller ,abstractcontroller 提供了諸如緩存支持和mimetype設(shè)置這樣的功能。如表所示累出的abstractcontroller包含的功能。1421.3.2 其他實(shí)用的控制器 除了從abstractcontroller繼承來實(shí)現(xiàn)controller外,spring還提供了一批實(shí)用的controller,供用直接使用。下面僅介紹一些比較常用。 (1)multiactioncontroller將多個(gè)行為
14、(action)合并在一個(gè)控制器里,這樣可以把相關(guān)功能組合在一起。 (2)commandcontrolle.rspring的是spring mvc的重要部分。 (3)simpleformcontroller 這是一個(gè)form cotnroller,當(dāng)需要根據(jù)命令對象來創(chuàng)建相應(yīng)的form的時(shí)候,該類可以提供更多的支持。1521.4 處理器映射(handler mapping) 通過處理器映射可以將web請求映射到正確的處理器(handler)上。handlermapping的基本功能是將請求傳遞到handlerexecutionchain上。首先,這個(gè)handlerexecutionchain必
15、須包含一個(gè)能處理該請求的處理器。其次,這個(gè)鏈也可以包含一系列可以攔截請求的攔截器。當(dāng)收到請求時(shí),dispatcherservlet將請求交給處理器映射,讓它檢查請求并找到一個(gè)適當(dāng)?shù)膆andlerexecutionchain。然后,dispatcherservlet執(zhí)行定義在鏈中的處理器和攔截器(interceptor)。1621.5 視圖解析器 視圖解析器是控制器之后的處理過程,是控制器與視圖之間的橋梁。spring web框架的所有控制器都返回一個(gè)modelandview實(shí)例。spring提供了視圖解析器供在瀏覽器顯示模型數(shù)據(jù),而不必被束縛在特定的視圖技術(shù)上。spring內(nèi)置了對jsp,ve
16、locity模版和xslt視圖的支持。 viewresolver是spring的視圖處理方式中特別重要的接口。viewresolver提供了從視圖名稱到實(shí)際視圖的映射。view處理請求的準(zhǔn)備工作,并將該請求提交給某種具體的視圖技術(shù)。spring為多種視圖都提供了不同的解析器。1721.6 spring對視圖的支持 與其他web框架一樣spring對視圖也提供了很多支持,如spring的標(biāo)簽庫、主題、支持其他模板。這些概念在本書的前一篇struts2中已經(jīng)有過介紹,相信讀者不會十分陌生。1821.6.1 spring的標(biāo)簽庫 spring的表單標(biāo)簽庫存在spring.jar中。這個(gè)庫的描述文件(
17、descriptor)是 spring-form.tld。如果想使用這些標(biāo)簽,可以在jsp代碼的起始部分加入下面這行聲明,form 是這個(gè)標(biāo)簽庫所提供標(biāo)簽的前綴名。 1921.6.2 spring的主題 主題的概念并不陌生,在本書的struts2篇已經(jīng)介紹過。在spring中為了在web應(yīng)用中使用主題,需要設(shè)置org.springframework.ui.context. themesource。webapplicationcontext是從themesource擴(kuò)展而來,但是它本身并沒有實(shí)現(xiàn)themesource定義的方法,它把這些任務(wù)轉(zhuǎn)交給別的專用模塊。如果沒有明確設(shè)置,真正實(shí)現(xiàn)theme
18、source的類是org.springframework.ui.context.support.resourcebundlethemesource。這個(gè)類在classpath的根部(比如在/web-inf/classes目錄下)尋找合適的屬性文件來完成配置。2021.7 mvc的完整實(shí)例 本節(jié)將以一個(gè)完整實(shí)例還演示spring mvc的使用方法。示例銀行應(yīng)用程序允許用戶根據(jù)惟一的 id 和口令查看帳戶信息。采用jsp 技術(shù)作為視圖頁面。這個(gè)簡單的應(yīng)用程序包含一個(gè)視圖頁用于用戶輸入,另一頁顯示用戶的帳戶信息。2121.7.1 配置web.xml 所有的web應(yīng)用都要從配置web.xml開始。st
19、ruts是如此,那么spring的web模塊也不例外,是通過一個(gè)servlet將框架啟動的。2221.7.2 創(chuàng)建controller 從loginbankcontroller 開始,它擴(kuò)展了 spring mvc 的 simpleformcontroller。simpleformcontoller 提供了顯示從 http get 請求接收到的表單的功能,以及處理從 http post 接收到的相同表單數(shù)據(jù)的功能, loginbankcontroller用authenticationservice和accountservices服務(wù)進(jìn)行驗(yàn)證,并執(zhí)行登錄活動。authenticationserv
20、ice 類處理銀行應(yīng)用程序的驗(yàn)證。accountservices 類處理典型的銀行服務(wù),例如查找交易和電匯。代碼21-9描述了如何把a(bǔ)uthenticationservice和accountservices連接到 loginbankcontroller。2321.7.3 視圖解析器spring mvc 的視圖解析器把每個(gè)邏輯名稱解析成實(shí)際的資源,即包含帳戶信息的jsp文件。這里使用的是internalresourceviewresolver,在jsp頁面中使用了jstl標(biāo)記,所以用戶的登錄名稱解析成資源/jsp/login.jsp,而viewclass成為jstlview。代碼 配置視圖解析器
21、:samplebanking-services.xml org.springframework.web.servlet.view.jstlview /jsp/ .jsp2421.7.4 jsp頁面 本實(shí)例只包含兩個(gè)jsp頁面,一個(gè)登錄界面如代碼所示,2521.7.5 發(fā)布于測試與一般的web程序一樣,需要在tomcat的發(fā)布目錄webapps下創(chuàng)建一個(gè)web目錄。本例中命名為“springbanking”,目錄中包含web-inf/classes,例子中類文件編譯后應(yīng)該在此目錄。在把spring需要的jar文件加入到web-inf/lib下。工程需要的配置文件samplebanking-ser
22、vices.xml、samplebankingservlet-servlet.xml、web.xml都應(yīng)該在web-inf目錄下。目錄結(jié)構(gòu)如圖所示。2621.8 用注釋來驅(qū)動spring mvc(2.5新增) 繼spring 2.0對spring mvc進(jìn)行重大升級后,spring 2.5又為spring mvc引入了注釋驅(qū)動功能。現(xiàn)在無須讓controller繼承任何接口,無需在 xml 配置文件中定義請求和controller的映射關(guān)系,僅僅使用注釋就可以讓一個(gè)pojo具有controller的絕大部分功能。spring mvc框架的易用性得到了進(jìn)一步的增強(qiáng).在框架靈活性、易用性和擴(kuò)展性上,伴隨著spring一路高唱猛進(jìn),可以預(yù)見spring mvc 在mvc市場上的吸引力將越來越不可低估。2721.8.1 基于注釋的controller 如前面章節(jié)中介紹的,當(dāng)創(chuàng)建一個(gè)controller時(shí),需要直接或間接地實(shí)現(xiàn) org.springframework.web.servlet.mvc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 信息技術(shù)課標(biāo)的心得體會(8篇)
- 俄語專業(yè)生求職信
- 企業(yè)停電停水的應(yīng)急預(yù)案范文(7篇)
- 中秋佳節(jié)致辭(8篇)
- 設(shè)計(jì)課件網(wǎng)站教學(xué)課件
- 諺語講解課件教學(xué)課件
- 盲目從眾課件教學(xué)課件
- 天桃實(shí)驗(yàn)學(xué)校八年級上學(xué)期語文1月月考試卷
- 環(huán)境應(yīng)急預(yù)案的編寫要點(diǎn)
- 自建房屋建筑施工合同(2篇)
- 2023年新全國《退役軍人保障法》知識競賽題庫與答案解析
- 臨床微生物學(xué)檢驗(yàn):實(shí)驗(yàn)七 腸道桿菌的檢驗(yàn)(二)
- 立冬-PPT-二十四節(jié)氣課件
- 河南省建設(shè)工程竣工驗(yàn)收報(bào)告(官方版)
- 2023版X99主板BIOS詳細(xì)設(shè)置手冊
- 信息安全技術(shù)服務(wù)施工日志
- 北師大版五年級數(shù)學(xué)上冊《平移》評課稿
- 食用油品泄露處置方案
- 小學(xué)校本課程-海上飛行家教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- GB/T 19973.1-2023醫(yī)療保健產(chǎn)品滅菌微生物學(xué)方法 第1部分:產(chǎn)品上微生物總數(shù)的確定
- 鑒賞家-教學(xué)講解課件
評論
0/150
提交評論