![軟件架構(gòu)設(shè)計實踐- 基于SSM框架 課件 第8章 Spring MVC高級功能_第1頁](http://file4.renrendoc.com/view4/M00/0D/27/wKhkGGaOTQCAUB4GAAC6JNVbXDA915.jpg)
![軟件架構(gòu)設(shè)計實踐- 基于SSM框架 課件 第8章 Spring MVC高級功能_第2頁](http://file4.renrendoc.com/view4/M00/0D/27/wKhkGGaOTQCAUB4GAAC6JNVbXDA9152.jpg)
![軟件架構(gòu)設(shè)計實踐- 基于SSM框架 課件 第8章 Spring MVC高級功能_第3頁](http://file4.renrendoc.com/view4/M00/0D/27/wKhkGGaOTQCAUB4GAAC6JNVbXDA9153.jpg)
![軟件架構(gòu)設(shè)計實踐- 基于SSM框架 課件 第8章 Spring MVC高級功能_第4頁](http://file4.renrendoc.com/view4/M00/0D/27/wKhkGGaOTQCAUB4GAAC6JNVbXDA9154.jpg)
![軟件架構(gòu)設(shè)計實踐- 基于SSM框架 課件 第8章 Spring MVC高級功能_第5頁](http://file4.renrendoc.com/view4/M00/0D/27/wKhkGGaOTQCAUB4GAAC6JNVbXDA9155.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
基于SSM框架的軟件架構(gòu)設(shè)計實戰(zhàn)Software
Architecture
Design
Practice
Based
on
SSM
Framework第8章Spring
MVC高級功能12345攔截器異常處理文件上傳下載靜態(tài)資源訪問JSON數(shù)據(jù)交換和RESTful應(yīng)用攔截器攔截器攔截器的概念攔截器(Interceptor)可以攔截對處理器的調(diào)用,并允許在處理器執(zhí)行前和(或)執(zhí)行后進(jìn)行一些操作攔截器可以為所有處理器提供統(tǒng)一的可插拔功能,可以讓處理器專注于業(yè)務(wù)邏輯從作用看,攔截器與Servlet的過濾器有相似之處,它們的區(qū)別主要體現(xiàn)在過濾器會攔截<url-pattern>中配置的所有請求資源,攔截器只攔截對處理器的調(diào)用攔截器Spring
MVC中的攔截器需要實現(xiàn)HandlerInterceptor接口,它允許在三個時機(jī)插入處理代碼,對應(yīng)三個攔截器方法:處理器執(zhí)行前(preHandle)處理器執(zhí)行完畢(postHandle)視圖渲染完成(afterCompletion)攔截器攔截器方法的執(zhí)行順序攔截器攔截器要點:preHandle中定義執(zhí)行處理器代碼之前要執(zhí)行的操作,postHandle中定義執(zhí)行處理器代碼之后要執(zhí)行的操作,afterCompletion中定義視圖渲染完畢之后要執(zhí)行的操作preHandle返回值是布爾類型,返回true表示放行,如果后面還有攔截器,則執(zhí)行下一個攔截器的preHandle,如果沒有其它攔截器,則執(zhí)行處理器代碼;返回false表示攔截,不再執(zhí)行后面的代碼三個方法中的Object類型參數(shù),表示被攔截的處理器postHandle中的ModelAndView類型參數(shù),代表處理器返回的ModelAndView攔截器配置攔截器要想攔截器起作用,還需要在配置文件中進(jìn)行配置,也就是要告訴Spring
MVC要攔截哪些處理器。攔截器攔截器配置要點:<mvc:mapping>一定要有,并且要在<mvc:exclude-mapping>之前<mvc:mapping>和<mvc:exclude-mapping>都可以有多個**代表多層路徑,*代表單層路徑要想使用mvc命名空間,需要先聲明攔截器攔截器鏈SpringMVC允許同時在一個處理器上配置多個攔截器,作用在一個處理器上的多個攔截器就形成了攔截器鏈。在配置攔截器鏈時,只需在<mvc:interceptors></mvc:interceptors>標(biāo)簽中使用多個<mvc:interceptor></mvc:interceptor>標(biāo)簽進(jìn)行配置即可。攔截器多個攔截器的執(zhí)行順序異常處理異常處理Spring
MVC異常處理概述提供了一個統(tǒng)一的異常處理手段,這樣一方面可以使程序員專注于業(yè)務(wù)邏輯,另一方面也可以提供一個相對友好的出錯界面。SpringMVC提供了一系列的異常處理機(jī)制,它們基于一個統(tǒng)一的接口HandlerExceptionResolver,這一接口有多個實現(xiàn)類,它們以不同的方式處理不同的異常。異常處理自定義全局異常處理器:使用方法自定義異常處理類裝配異常處理類異常處理異常處理類異常處理說明異常處理類里重寫resolveException()方法。Exception類入?yún)⑹切枰幚淼漠惓!bject類入?yún)⑹怯|發(fā)異常的處理器,其具體類型是HandlerMethod。方法返回ModelAndView,這個ModelAndView類的對象會代替產(chǎn)生異常的處理器返回的ModelAndView類對象返回給前端控制器,可以在這里指定產(chǎn)生異常時需要渲染給客戶端的視圖。文件上傳下載文件上傳下載文件上傳SpringMVC提供了MultipartResolver接口,專門用于處理文件上傳。當(dāng)收到請求時,前端控制器的checkMultipart()方法會調(diào)用MultipartResolver的isMultipart()方法判斷請求中是否包含文件。如果請求數(shù)據(jù)中包含文件,則調(diào)用MultipartResolver的resolveMultipart()方法對請求的數(shù)據(jù)進(jìn)行解析,同時將HttpServletRequest類對象封裝為MultipartHttpServletRequest類對象,并將文件數(shù)據(jù)封裝到MultipartFile類的對象中,傳遞給處理器。文件上傳下載MultipartResolver接口有兩個實現(xiàn)類:StandardServletMultipartResolver:基于Servlet實現(xiàn)文件上傳,不需要額外的依賴項,但對容器支持的Servlet版本有要求,需要在web.xml中配置文件上傳相關(guān)信息,是Spring
6推薦使用的。CommonsMultipartResolver:基于ApacheCommonsFileUpload組件,需要額外的依賴項,需要在Spring配置文件中配置相關(guān)信息。文件上傳下載使用步驟:在Spring配置文件中裝配多部件解析器在web.xml的前端控制器中配置multipart文件上傳下載裝配多部件解析器StandardServletMultipartResolver配置multipart文件上傳下載上傳頁面文件上傳下載處理器代碼文件上傳下載說明處理器的第一個入?yún)㈩愋褪荕ultipartFile,參數(shù)名file要與表單中的file表單域的name屬性相同。處理器第二個入?yún)⒌念愋褪荋ttpServletRequest,這里是為了在處理器中獲取保存文件的物理路徑。getOriginalFilename()方法作用是獲取上傳文件的原始文件名。transferTo()方法用于將MultipartFile中的文件數(shù)據(jù)轉(zhuǎn)移到File對象中UUID類的randomUUID()方法作用是生產(chǎn)一個通用唯一識別碼(UniversallyUniqueIdentifier),防止文件重名。文件上傳下載文件下載一般來說,在瀏覽器中直接請求文件地址就可以下載了,但這樣做有很多缺點,如:沒辦法獲取下載狀態(tài),比如一共多少,傳輸了多少,傳輸是否出錯等沒辦法控制下載過程一個更好的方法是,通過服務(wù)器的文件系統(tǒng),先從磁盤上把文件讀取進(jìn)緩沖區(qū),然后再通過程序發(fā)送給客戶端,這樣就可以控制整個下載過程了。文件下載使用ResponseEntity<>實現(xiàn)文件下載ResponseEntity<>類可以讓處理器返回一個經(jīng)序列化的實體對象,除此之外,ResponseEntity還支持設(shè)置響應(yīng)頭和狀態(tài)碼,使用ResponseEntity類,可以實現(xiàn)文件下載。文件下載處理器代碼文件上傳下載說明返回類型ReponseEntity<>的泛型為byte[],這樣文件的字節(jié)流會被直接寫入響應(yīng)體內(nèi)。HttpHeaders的setContentType()方法的參數(shù)是枚舉類型MediaType.APPLICATION_OCTET_STREAM,它能將響應(yīng)頭中的ContentType設(shè)置為application/octet-stream。setContentDispositionFormData()方法的作用是將響應(yīng)頭中的ContentDisposition設(shè)置為“attachment;filename=xxx:”。靜態(tài)資源訪問靜態(tài)資源訪問問題的提出在配置前端控制器的Servlt映射時,將對網(wǎng)站的所有請求都交給前端控制器處理。前端控制器會攔截對網(wǎng)站的所有請求,然后調(diào)用處理器映射器對請求路徑進(jìn)行解析,并最終映射為對處理器方法的調(diào)用。這一過程中,對靜態(tài)資源,如圖片、HTML頁面、CSS文件、JS文件等的請求也會進(jìn)行映射,這顯然是找不到對應(yīng)的處理器方法的,因此會返回404錯誤。靜態(tài)資源訪問靜態(tài)資源訪問方法一:配置默認(rèn)Servlet原理:在web.xml中配置名為default的Servlet映射,當(dāng)請求以該映射路徑開頭的路徑時,會交由Web容器的默認(rèn)Servlet(即名為default的Servlet)處理,而不是由SpringMVC的前端控制器處理。靜態(tài)資源訪問靜態(tài)資源訪問方法二:注冊DefaultServletHttpRequestHandler原理:在Spring配置文件中裝配一個DefaultServletHttpRequestHandler,它是SpringMVC預(yù)定義的一個處理器,它的作用就是將所有請求轉(zhuǎn)發(fā)到Web容器的默認(rèn)Servlet去處理。由于它具有最低的映射優(yōu)先級,因此不會影響前端控制器DispatcherServlet。靜態(tài)資源訪問靜態(tài)資源訪問方法三:配置資源映射原理:在Spring配置文件中配置資源映射,可將特定路徑下的文件視為靜態(tài)文件,對其的請求不再交給處理器映射器處理。location屬性指明靜態(tài)文件的實際路徑,mapping屬性指明靜態(tài)文件的映射路徑,其含義是將以“/img”開頭的路徑的請求視為對靜態(tài)文件的請求,并將其映射到“/static/assets/img/”路徑下,而不再交給處理器映射器進(jìn)行處理。JSON數(shù)據(jù)交換
和RESTful應(yīng)用JSON數(shù)據(jù)交換和RESTful應(yīng)用概述最理想的Web應(yīng)用程序:前后端分離,即前端和后端只存在數(shù)據(jù)耦合,這樣的后端程序也稱為Web
API。數(shù)據(jù)交換涉及到的最重要問題就是數(shù)據(jù)的格式,需要有一種規(guī)范的格式,確保多數(shù)后臺和前臺技術(shù)都能解析。目前最流行的數(shù)據(jù)交換格式就是JSON。JSON數(shù)據(jù)交換和RESTful應(yīng)用JSON(JavaScriptObjectNotation,JS對象標(biāo)記)是一種輕量級的數(shù)據(jù)交換格式,它獨立于編程語言,以純文本來存儲和表示數(shù)據(jù),易于閱讀和編寫,也易于程序解析和生成,相比于XML,它占用更少存儲空間,解析速度更快。JSON數(shù)據(jù)交換和RESTful應(yīng)用JSON有兩種數(shù)據(jù)結(jié)構(gòu):對象結(jié)構(gòu):以“{”開始,以“}”結(jié)束,中間是key:value形式的數(shù)據(jù)。期中,key必須為字符串,value可以是任意類型。多個key-value之間使用逗號(,)分割數(shù)組結(jié)構(gòu):以“[”開始,以“]”結(jié)束,中間是值的列表,用逗號分割,元素可以是多種類型。需要注意的是,如果用JSON存儲單個數(shù)據(jù),要使用數(shù)組結(jié)構(gòu),不能使用對象結(jié)構(gòu),因為對象結(jié)構(gòu)要有keyJSON數(shù)據(jù)交換和RESTful應(yīng)用序列化/反序列化工具:Jackson庫JSON數(shù)據(jù)交換和RESTful應(yīng)用處理器返回JSON方法一:使用ResponseEntity<>類處理器返回ResponseBody<>類的對象時,不再進(jìn)行視圖渲染,而是直接將ResponseBody<>類對象中封裝的數(shù)據(jù)寫入響應(yīng)體中。如果我們在返回ResponseBody<>類對象時,直接將實體對象封裝進(jìn)去,SpringMVC就會調(diào)用相應(yīng)的序列化方法,將實體對象序列化為JSON,并寫入響應(yīng)體內(nèi),這樣就實現(xiàn)了處理器返回JSON。JSON數(shù)據(jù)交換和RESTful應(yīng)用處理器代碼JSON數(shù)據(jù)交換和RESTful應(yīng)用處理器返回JSON方法二:使用@ResponseBody注解@ResponseBody注解使用在處理器方法上,使用@ResponseBody標(biāo)記的處理器方法可以直接返回一個實體對象,SpringMVC會使用合適的序列化方法將其序列化后直接寫入響應(yīng)體。要使用@ResponseBody注解,需要在Spring配置文件中配置SpringMVC的注解驅(qū)動。JSON數(shù)據(jù)交換和RESTful應(yīng)用處理器代碼JSON數(shù)據(jù)交換和RESTful應(yīng)用還可以在控制器類上使用@RestController注解,可以方便地使一個控制器類中的所有處理器返回JSON。JSON數(shù)據(jù)交換和RESTful應(yīng)用處理器解析JSON方法一:使用RequestEntity<>類RequestEntity<>封裝了整個請求,可以通過它的getBody()方法獲取請求體數(shù)據(jù),這個過程中SpringMVC會調(diào)用反序列化工具對請求體中的數(shù)據(jù)進(jìn)行反序列化。JSON數(shù)據(jù)交換和RESTful應(yīng)用處理器解析JSON方法二:使用@RequestBody注解@RequestBody注解用于標(biāo)記處理器入?yún)?,它的作用是從請求體中讀取數(shù)據(jù),并通過適當(dāng)?shù)腍ttpMessageConverter進(jìn)行轉(zhuǎn)換后注入到其標(biāo)記的實體對象內(nèi)。JSON數(shù)據(jù)交換和RESTful應(yīng)用REST(REpresentationalStateTransfer,表現(xiàn)層狀態(tài)轉(zhuǎn)移)的概念是一種Web應(yīng)用設(shè)計風(fēng)格,它描述的是在網(wǎng)絡(luò)中客戶端和服務(wù)器的一種交互形式。它的核心思想是使用URI定位資源,使用HTTP動詞描述操作。如果一個架構(gòu)符合REST原則,就稱它為RESTful架構(gòu),相應(yīng)的應(yīng)用就稱為RESTful應(yīng)用。JSON數(shù)據(jù)交換和RESTful應(yīng)用構(gòu)造RESTful應(yīng)用LeonardRichardson分析了百余種不同的Web服務(wù),并根據(jù)它們與REST的兼容程度將它們分為四個等級,稱為Richardson成熟度模型,它可以用于識別一個Web服務(wù)的成熟度級別,也為構(gòu)建RESTfulWeb服務(wù)提供了切實可行的參考依據(jù)。JSON數(shù)據(jù)交換和RESTful應(yīng)用Richardson成熟度模型Level0:POX(PlainOldXML)。除了使用XML作為數(shù)據(jù)交換,其余跟傳統(tǒng)Web應(yīng)用沒有區(qū)別。Level1:資源。使用URL表示資源的位置,沒有使用正確的HTTP動詞。Level2:動詞。正確使用了HTTP動詞和HTTP狀態(tài)碼。Level3:超媒體。超媒體作為應(yīng)用程序的狀態(tài)引擎(HATEOAS,HypermediaAsTheEngineOfApplicationState)。包含了一些可發(fā)現(xiàn)性的自包含文檔,是REST的最理想形態(tài)。JSON數(shù)據(jù)交換和RESTful應(yīng)用構(gòu)造RESTful應(yīng)用第一步:在URL中使用資源地址,使用HTTP動詞表示對資源的操作Bad:/getProducts/deleteOrder?orderId=1/getItemsByOrder?orderId=1Good:GET/products:willreturnthelistofallproductsPOST/products:willaddaproducttothecollectionGET/products/4:willretrieveproduct#4GET/orders/4/items:willretrievethelistofallitemsoforder#4GET/orders/4/items/1:willretriev
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電競行業(yè)市場分析報告
- 兩位數(shù)減一位數(shù)退位減法練習(xí)(教案)青島版一年級下冊數(shù)學(xué)
- 環(huán)保組織在推廣綠色出行中的作用
- 太陽能采暖系統(tǒng)項目評估報告
- 痛風(fēng)的飲食治療與日常管理全解析
- 電商平臺的網(wǎng)絡(luò)營銷自動化策略研究
- 電商數(shù)據(jù)分析在運營決策中的應(yīng)用案例
- 2025年農(nóng)用車車橋項目可行性研究報告
- 紅坯陶瓷拋釉磚項目可行性研究報告立項模板
- 解剖臺項目運營指導(dǎo)方案
- 抑郁癥課件教學(xué)課件
- 關(guān)于消防安全評估設(shè)備操作說明詳解
- 2009年公務(wù)員國考《申論》真題卷及答案(地市、副?。?/a>
- 2025年高考作文專練(25道真題+審題立意+范文)- 2025年高考語文作文備考總復(fù)習(xí)
- Unit1Myfamily單詞解讀(課件)Joinin外研劍橋英語五年級上冊
- 二十屆三中全會精神應(yīng)知應(yīng)會知識測試30題(附答案)
- 《烏有先生歷險記》原文及翻譯
- 部編版道德與法治六年級下冊課程綱要
- 人員測評方案
- 簡易呼吸器的使用和心肺復(fù)蘇-3
評論
0/150
提交評論