spring mvc基本概念和原理_第1頁
spring mvc基本概念和原理_第2頁
spring mvc基本概念和原理_第3頁
spring mvc基本概念和原理_第4頁
spring mvc基本概念和原理_第5頁
免費預(yù)覽已結(jié)束,剩余64頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Spring

MVC基本概念和原理URL根據(jù)請求信息到處理類的某個方法數(shù)據(jù)處理請求參數(shù)的綁定,校驗,格式化器、異常處理請求處理的增強(qiáng)基本概念基于請求驅(qū)動->使用請求-響應(yīng)模型使用MVC架構(gòu)模式的思想約定優(yōu)于配置(慣例優(yōu)先原則)靈活的URL易于集成其他視圖技術(shù)(Velocity,FreeMarker)靈活的數(shù)據(jù)綁定,驗證,格式化機(jī)制,綁定任何對象簡單的異常處理對靜態(tài)資源的支持對restful風(fēng)格的支持強(qiáng)大的JSP

庫使開發(fā)者著重于自己的業(yè)務(wù)邏輯MVC基于MVC編寫一個web項目①如何靈活的處理一個請求?通過請求參數(shù)匹配,請求方法匹配,請求頭參數(shù)匹配,通配符支持,重定向支持②請求參數(shù)怎么組裝成對象,請求參數(shù)的驗證和格式化怎么做?分散在每個servlet里面?哦③在每個請求前后需要記錄日志怎么辦?④在請求完成后需要 資源怎么辦?請求中間出現(xiàn)了異常也要保證資源的⑤頁面前端需要從JSP轉(zhuǎn)換為JSON數(shù)據(jù)怎么辦?使用spring

mvc

這些問題都是浮云,而且經(jīng)過了實踐的檢驗,大大簡化開發(fā)體系結(jié)構(gòu)和流程體系結(jié)構(gòu)和流程①客戶端發(fā)出一個http請求,Web服務(wù)器接收到這個請求,如果匹配DispatcherServlet的請求 路徑(在web.xml指定),web服務(wù)器將請求轉(zhuǎn)交給DispatcherServlet處理②DispatcherServlet根據(jù)請求信息(URL,METHOD,HEADER等)從的

HandlerMap

中找到最合適的Handler(自己寫的Controller)。連同的器集合構(gòu)成一個執(zhí)行鏈。③DispatcherServlet根據(jù)Handler從的HandlerAdaptor中找出第一個支持當(dāng)前

Handler的適配器,并調(diào)用handler,返回ModelAndView。調(diào)用Handler之前做了參數(shù)的綁定,校驗和格式化等處理④Handler根據(jù)請求參數(shù)處理業(yè)務(wù),并可將業(yè)務(wù)結(jié)果設(shè)置在Model中,也可指定視圖名稱,控制重定向等。⑤Handler完成業(yè)務(wù)邏輯的處理后返回一個ModelAndView給DispatcherServlet.ModelAndView包含視圖邏輯名和模型數(shù)據(jù)信息⑥ModelAndView中的邏輯視圖名并非真正的視圖對象(View),無法直接應(yīng)用數(shù)據(jù),所以,DispatcherServlet通過ViewResolver解析邏輯視圖名到真正的視圖對象⑦得到View后,調(diào)用render方法渲染頁面,向response中寫入特定格式的流⑧客戶端得到響應(yīng)信息,可能是html頁面也可能是json字符串。默認(rèn)實現(xiàn)默認(rèn)實現(xiàn):源代碼配置Spring的配置文件,默認(rèn)DispatcherServlet會加載WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml配置文件第一步:將請求到處理方法第二步:將Http請求的參數(shù)(String類型)綁定到處理方法的對應(yīng)參數(shù)(多種類型)第三步:匹配類型-類型轉(zhuǎn)換第四步:數(shù)據(jù)校驗-指定@valid注第五步:對請求結(jié)果的渲染解依據(jù):通過URL:通過URL-示例:通過請求方法①請求方法是請求的不同方式,標(biāo)準(zhǔn)的請求方法集合中除GET,POST請求外,還包含PUT,DELETE,HEAD,OPTIONS等方法。OPTIONS詢問可以執(zhí)行哪些方法;HEAD類似于GET,

但是不返回body信息,用于檢查對象是否存在,以及得到對象的元數(shù)據(jù);PATCH部分文檔更改;TRACE用于 服務(wù)器.:通過請求頭或請求參數(shù)后的調(diào)用:通過反射第一步:將請求到處理方法第二步:將Http請求的參數(shù)(String類型)綁定到處理方法的對應(yīng)參數(shù)(多種類型)第三步:匹配類型-類型轉(zhuǎn)換第四步:數(shù)據(jù)校驗-指定@valid注第五步:對請求結(jié)果的渲染解參數(shù)綁定參數(shù)綁定:示例參數(shù)綁定:是否必需參數(shù)參數(shù)綁定:表單對象綁定參數(shù)綁定:不需要注解支持的其他入?yún)ⅱ貶ttpServletRequest,HttpServletResponse②Model,SessionStatus,HttpEntity,Errors,WebRequest,Map③InputStream/Reader,OutputStream/Writer④java.util.Locale,java.security.Principal參數(shù)綁定原理給交參數(shù)綁定原理第一步:將請求到處理方法第二步:將Http請求的參數(shù)(String類型)綁定到處理方法的對應(yīng)參數(shù)(多種類型)第三步:匹配類型-類型轉(zhuǎn)換和格式化第四步:數(shù)據(jù)校驗-指定@valid注第五步:對請求結(jié)果的渲染解類型轉(zhuǎn)換轉(zhuǎn)換器的

調(diào)用自定義轉(zhuǎn)換器,支持3種類型自定義轉(zhuǎn)換器:示例自定義轉(zhuǎn)換器:注入,三種注入方式格式化格式化格式化:示例第一步:將請求到處理方法第二步:將Http請求的參數(shù)(String類型)綁定到處理方法的對應(yīng)參數(shù)(多種類型)第三步:匹配類型-類型轉(zhuǎn)換第四步:數(shù)據(jù)校驗-指定@valid注解時第五步:對請求結(jié)果的渲染解數(shù)據(jù)校驗JSR303校驗示例校驗校驗結(jié)果第一步:將請求到處理方法第二步:將Http請求的參數(shù)(String類型)綁定到處理方法的對應(yīng)參數(shù)(多種類型)第三步:匹配類型-類型轉(zhuǎn)換第四步:數(shù)據(jù)校驗-指定@valid注第五步:對請求結(jié)果的渲染解時視圖視圖的作用是渲染模型數(shù)據(jù),將模型里的數(shù)據(jù)以某種形式呈現(xiàn)給客戶。視圖對象可以是常見的JSP,也可以是PDF,JSON等。為了實現(xiàn)視圖模型和具體實現(xiàn)技術(shù)的解耦,Spring定義了一個高度抽象的View接口:視圖的實現(xiàn)類:視圖和視圖解析器視圖和視圖解析器ViewResolver

中只有一個方法resolveViewName

,提供viewname

和實際view的ContentNegotiatingViewResolver協(xié)商規(guī)則:①基于后綴名解析②基于請求頭中的contentType③基于請求參數(shù)(format=json)可以配置三個屬性:mediaTypes,viewResolvers,defaultViews對消息格式轉(zhuǎn)換的支持消息轉(zhuǎn)換器HttpMessageConverter<T>HttpMessageConverter<T>是3.0新添加的一個接口,負(fù)責(zé)將請求信息轉(zhuǎn)換為一個對象(類型為T),或?qū)ο筝敵鰹轫憫?yīng)信息。啟用轉(zhuǎn)換器的2種方式示例:使用alibaba

fastjsonconverter示例:使用alibaba

fastjsonconverter消息轉(zhuǎn)換器:實現(xiàn)的源碼阿里巴巴FastJsonConvertor的實現(xiàn)FastJsonHttpMessageConverter繼承了抽象類

HttpMessageConverter對請求方法的增強(qiáng)-

器Spring

MVC

器器。Spring

MVC的

器是DispatcherServlet提供的,在調(diào)用具體的請求方法前后或異常時執(zhí)行的代碼 。類似于Spring器接口的定義:Spring

MVC器器的獲?。篋ispatcherServlet調(diào)用器順序:器的配置普通的器:帶有信息的器:器與過濾器過濾器過是濾S器er和vle

3器新的增區(qū)加別的:功能,可以對請求和響應(yīng)進(jìn)行

。不同點過濾器MVC

器可用范圍Servlet規(guī)范定義的,所有Servlet容器支持spring

MVC定義的,spring框架支持控制深度只能在servlet前后使用深入到方法級別執(zhí)行順序配置順序配置順序/order排序業(yè)務(wù)處理不支持,無法注入業(yè)務(wù)實例支持器都可以做。過濾器可以做的事情,器功能更強(qiáng)大。對異常的處理異常處理SpringMVC通過HandlerExceptionResolver處理程序異常,包括:處理器

、數(shù)據(jù)綁定以及處理器執(zhí)行時發(fā)生的異常。HandlerExceptionResolver接口:DefaultHandlerExceptionResolverAnnotationMethodHandlerExceptionResolver/ExceptionHandlerExceptionResolver為什么異常處理器可以使用多個?異常處理器處理過異常之后,器還能不能處理這個異常?異常處理完成之后,器的調(diào)用代碼:對Spring

MVC測試的支持Spring

MVC的測試使用springtest框架和Junit4可以實現(xiàn)單元測試??梢詼y試整個流程,包括數(shù)據(jù)處理, 器,異常處理等。測試代碼放在src/main/test下,可以與maven集成。Spring

MVC單元,成功/失敗小結(jié)第一步:將請求到處理方法第二步:將Http請求的參數(shù)(String類型)綁定到處理方法的對應(yīng)參數(shù)(多種類型)第三步:匹配類型-類型轉(zhuǎn)換第四步:數(shù)據(jù)校驗-指定@valid注第五步:對請求結(jié)果的渲染對消息格式轉(zhuǎn)換的支持對請求方法的增強(qiáng)-

器異常處理測試支持解時Q&A1、請求如何給前端控制器?2、前端控制器如何根據(jù)請求信息選擇頁面控制器進(jìn)行功能處理?3、如何支持多種頁面控制器呢?4、如何頁面控制器如何使用業(yè)務(wù)對象?5、頁面控制器如何返回模型數(shù)據(jù)?6、前端控制器如何根據(jù)頁面控制器返回的邏輯視圖名選擇具體的視圖進(jìn)行渲染?7、不同的視圖技術(shù)如何使用相應(yīng)的模型數(shù)據(jù)?8、

如何自定義

器?9、如何使HttpMessageConverter生效?練習(xí):使用阿里巴巴FastJsonHttpMessageConverter

搭建restful形式的spring

mvc項目在聯(lián)系1中使用 器,打印請求頭中的Content-Type,看是否是application/json類型使用spring測試框架測試聯(lián)系1中的項目參考資料1、

spring

》http

/link?url=gT6ZEb2SGjkqi12QvPYBJwDIiAaYcMSXDjacX9udXMqSq3IzymcpU-mJhBsyNVNNeJwETZmkSDIZ9hNg7JiWz_2、Spring

3.x

企業(yè)應(yīng)用開發(fā)實戰(zhàn)http

/link?url=t0k-6qMdQEyiT5jSvVcMZZEmaEs18h1otW2gxY4OqfAxfohrpPHRX0NzW2hUVLfix-UsY36l8RWq/ /web/wa-restful//blogs/subjects/kaitao-springmvcxeKh-1pD3、4、

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論