學(xué)習(xí)SpringMVC系列教程(一)Spring MVC入門(共40頁)_第1頁
學(xué)習(xí)SpringMVC系列教程(一)Spring MVC入門(共40頁)_第2頁
學(xué)習(xí)SpringMVC系列教程(一)Spring MVC入門(共40頁)_第3頁
學(xué)習(xí)SpringMVC系列教程(一)Spring MVC入門(共40頁)_第4頁
學(xué)習(xí)SpringMVC系列教程(一)Spring MVC入門(共40頁)_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、21、Spring Web MVC是什么(shn me)Spring Web MVC是一種基于Java的實現(xiàn)了Web MVC設(shè)計模式的請求驅(qū)動類型的輕量級Web框架,即使用了MVC架構(gòu)模式的思想,將web層進行職責(zé)解耦,基于請求驅(qū)動指的就是使用請求-響應(yīng)模型,框架的目的就是幫助(bngzh)我們簡化開發(fā),Spring Web MVC也是要簡化我們?nèi)粘eb開發(fā)的。另外還有一種基于(jy)組件的、事件驅(qū)動的Web框架在此就不介紹了,如Tapestry、JSF等。Spring Web MVC也是服務(wù)到工作者模式的實現(xiàn),但進行可優(yōu)化。前端控制器是DispatcherServlet;應(yīng)用控制器其實拆為

2、處理器映射器(Handler Mapping)進行處理器管理和視圖解析器(View Resolver)進行視圖管理;頁面控制器/動作/處理器為Controller接口(僅包含ModelAndView handleRequest(request, response)方法)的實現(xiàn)(也可以是任何的POJO類);支持本地化(Locale)解析、主題(Theme)解析及文件上傳等;提供了非常靈活的數(shù)據(jù)驗證、格式化和數(shù)據(jù)綁定機制;提供了強大的約定大于配置(慣例優(yōu)先原則)的契約式編程支持。22、Spring Web MVC能幫我們做什么讓我們能非常簡單的設(shè)計(shj)出干凈的Web層和薄薄的Web層;進行更

3、簡潔(jinji)的Web層的開發(fā);天生與Spring框架集成(j chn)(如IoC容器、AOP等);提供強大的約定大于配置的契約式編程支持;能簡單的進行Web層的單元測試;支持靈活的URL到頁面控制器的映射;非常容易與其他視圖技術(shù)集成,如Velocity、FreeMarker等等,因為模型數(shù)據(jù)不放在特定的API里,而是放在一個Model里(Map數(shù)據(jù)結(jié)構(gòu)實現(xiàn),因此很容易被其他框架使用);非常靈活的數(shù)據(jù)驗證、格式化和數(shù)據(jù)綁定機制,能使用任何對象進行數(shù)據(jù)綁定,不必實現(xiàn)特定框架的API;提供一套強大的JSP標(biāo)簽庫,簡化JSP開發(fā);支持靈活的本地化、主題等解析;更加簡單的異常處理;對靜態(tài)資源的支持

4、;支持(zhch)Restful風(fēng)格。23、Spring Web MVC架構(gòu)(ji u)Spring Web MVC框架也是一個基于請求驅(qū)動的Web框架,并且也使用了前端控制器模式來進行設(shè)計,再根據(jù)請求映射規(guī)則分發(fā)給(f i)相應(yīng)的頁面控制器(動作/處理器)進行處理。首先讓我們整體看一下Spring Web MVC處理請求的流程:2.3.1、Spring Web MVC處理請求的流程如圖2-1圖2-1具體(jt)執(zhí)行步驟如下:1、 首先用戶發(fā)送(f sn)請求前端控制器,前端控制器根據(jù)請求信息(如URL)來決定選擇哪一個頁面控制器進行處理(chl)并把請求委托給它,即以前的控制器的控制邏輯部分

5、;圖2-1中的1、2步驟;2、 頁面控制器接收到請求后,進行功能處理,首先(shuxin)需要收集和綁定請求參數(shù)到一個對象,這個對象在Spring Web MVC中叫命令對象,并進行驗證,然后將命令對象委托給業(yè)務(wù)對象進行處理;處理完畢后返回一個ModelAndView(模型數(shù)據(jù)和邏輯視圖名);圖2-1中的3、4、5步驟;3、 前端控制器收回控制權(quán),然后根據(jù)返回的邏輯視圖名,選擇相應(yīng)的視圖進行渲染,并把模型(mxng)數(shù)據(jù)傳入以便視圖渲染;圖2-1中的步驟6、7;4、 前端控制器再次收回控制權(quán),將響應(yīng)返回給用戶,圖2-1中的步驟(bzhu)8;至此整個結(jié)束。問題:1、 請求如何給前端控制器?2、

6、 前端控制器如何根據(jù)請求信息選擇頁面控制器進行功能處理?3、 如何支持多種頁面控制器呢?4、 如何頁面控制器如何使用業(yè)務(wù)對象?5、 頁面控制器如何返回模型數(shù)據(jù)?6、 前端控制器如何根據(jù)頁面控制器返回的邏輯視圖名選擇具體的視圖進行渲染?7、 不同的視圖技術(shù)(jsh)如何使用相應(yīng)的模型數(shù)據(jù)?首先我們(w men)知道有如上問題,那這些問題如何解決呢?請讓我們先繼續(xù),在后邊依次回答。2.3.2、Spring Web MVC架構(gòu)(ji u)1、Spring Web MVC核心架構(gòu)圖,如圖2-2圖2-2架構(gòu)圖對應(yīng)的DispatcherServlet核心代碼(di m)如下:Java Code復(fù)制(fzh

7、)內(nèi)容到剪貼板/前端控制器分派(fnpi)方法protectedvoiddoDispatch(HttpServletRequestrequest,HttpServletResponseresponse)throwsException HttpServletRequestprocessedRequest=request; HandlerExecutionChainmappedHandler=null; intinterceptorIndex=-1; try ModelAndViewmv; booleanerrorView=false; try /檢查是否是請求是否是multipart(如文件(w

8、njin)上傳),如果是將通過MultipartResolver解析processedRequest=checkMultipart(request); /步驟2、請求到處理器(頁面控制器)的映射(yngsh),通過HandlerMapping進行映射mappedHandler=getHandler(processedRequest,false); if(mappedHandler=null|mappedHandler.getHandler()=null) noHandlerFound(processedRequest,response); return; /步驟(bzhu)3、處理器適配,即將

9、我們的處理器包裝成相應(yīng)的適配器(從而支持多種類型的處理器)HandlerAdapterha=getHandlerAdapter(mappedHandler.getHandler(); /304NotModified緩存支持/此處省略具體代碼 /執(zhí)行(zhxng)處理器相關(guān)的攔截器的預(yù)處理(HandlerInterceptor.preHandle)/此處省略(shngl)具體代碼 /步驟(bzhu)4、由適配器執(zhí)行處理器(調(diào)用處理器相應(yīng)功能處理方法)mv=ha.handle(processedRequest,response,mappedHandler.getHandler(); /Dowene

10、edviewnametranslation?if(mv!=null&!mv.hasView() mv.setViewName(getDefaultViewName(request); /執(zhí)行處理器相關(guān)的攔截器的后處理(HandlerInterceptor.postHandle)/此處省略(shngl)具體代碼 catch(ModelAndViewDefiningExceptionex) logger.debug(ModelAndViewDefiningExceptionencountered,ex); mv=ex.getModelAndView(); catch(Exceptionex) Ob

11、jecthandler=(mappedHandler!=null?mappedHandler.getHandler():null); mv=processHandlerException(processedRequest,response,handler,ex); errorView=(mv!=null); /步驟(bzhu)5步驟6、解析視圖并進行(jnxng)視圖的渲染/步驟(bzhu)5由ViewResolver解析(ji x)View(viewResolver.resolveViewName(viewName,locale))/步驟(bzhu)6視圖在渲染時會把Model傳入(view

12、.render(mv.getModelInternal(),request,response);)if(mv!=null&!mv.wasCleared() render(mv,processedRequest,response); if(errorView) WebUtils.clearErrorRequestAttributes(request); else if(logger.isDebugEnabled() logger.debug(NullModelAndViewreturnedtoDispatcherServletwithname+getServletName()+ :assumin

13、gHandlerAdaptercompletedrequesthandling); /執(zhí)行處理器相關(guān)(xinggun)的攔截器的完成后處理(HandlerInterceptor.afterCompletion)/此處省略(shngl)具體代碼 catch(Exceptionex) /Triggerafter-completionforthrownexception.triggerAfterCompletion(mappedHandler,interceptorIndex,processedRequest,response,ex); throwex; catch(Errorerr) Servle

14、tExceptionex=newNestedServletException(Handlerprocessingfailed,err); /Triggerafter-completionforthrownexception.triggerAfterCompletion(mappedHandler,interceptorIndex,processedRequest,response,ex); throwex; finally /Cleanupanyresourcesusedbyamultipartrequest.if(processedRequest!=request) cleanupMulti

15、part(processedRequest); 核心架構(gòu)的具體流程步驟(bzhu)如下:1、 首先用戶發(fā)送(f sn)請求DispatcherServlet,前端控制器收到請求后自己(zj)不進行處理,而是委托給其他的解析器進行處理,作為統(tǒng)一訪問點,進行全局的流程控制;2、 DispatcherServletHandlerMapping, HandlerMapping將會把請求映射為HandlerExecutionChain對象(包含一個Handler處理器(頁面控制器)對象、多個HandlerInterceptor攔截器)對象,通過這種策略模式,很容易添加新的映射策略;3、 Dispatch

16、erServletHandlerAdapter,HandlerAdapter將會把處理器包裝為適配器,從而支持多種類型的處理器,即適配器設(shè)計模式的應(yīng)用,從而很容易支持很多類型的處理器;4、 HandlerAdapter處理器功能處理方法的調(diào)用,HandlerAdapter將會根據(jù)適配的結(jié)果調(diào)用真正的處理器的功能處理方法,完成功能處理;并返回一個ModelAndView對象(包含模型數(shù)據(jù)、邏輯視圖名);5、 ModelAndView的邏輯(lu j)視圖名 ViewResolver, ViewResolver將把邏輯視圖名解析為具體的View,通過(tnggu)這種策略模式,很容易更換其他視圖技

17、術(shù);6、 View渲染,View會根據(jù)傳進來的Model模型數(shù)據(jù)(shj)進行渲染,此處的Model實際是一個Map數(shù)據(jù)結(jié)構(gòu),因此很容易支持其他視圖技術(shù);7、返回控制權(quán)給DispatcherServlet,由DispatcherServlet返回響應(yīng)給用戶,到此一個流程結(jié)束。此處我們只是講了核心流程,沒有考慮攔截器、本地解析、文件上傳解析等,后邊再細述。到此,再來看我們前邊提出的問題:1、 請求如何給前端控制器?這個應(yīng)該在web.xml中進行部署描述,在HelloWorld中詳細講解。2、 前端控制器如何根據(jù)請求信息選擇頁面控制器進行功能處理? 我們需要配置HandlerMapping進行映射

18、3、 如何支持多種頁面控制器呢?配置HandlerAdapter從而支持多種類型的頁面控制器4、 如何頁面(y min)控制器如何使用業(yè)務(wù)對象?可以預(yù)料到,肯定利用Spring IoC容器的依賴注入功能5、 頁面控制器如何返回模型數(shù)據(jù)(shj)?使用ModelAndView返回6、 前端控制器如何根據(jù)頁面控制器返回(fnhu)的邏輯視圖名選擇具體的視圖進行渲染? 使用ViewResolver進行解析7、 不同的視圖技術(shù)如何使用相應(yīng)的模型數(shù)據(jù)? 因為Model是一個Map數(shù)據(jù)結(jié)構(gòu),很容易支持其他視圖技術(shù)在此我們可以看出具體的核心開發(fā)步驟:1、 DispatcherServlet在web.xml中

19、的部署描述,從而攔截請求到Spring Web MVC2、 HandlerMapping的配置,從而將請求映射到處理器3、 HandlerAdapter的配置,從而支持多種類型的處理器4、 ViewResolver的配置,從而將邏輯視圖名解析為具體視圖技術(shù)5、處理器(頁面控制器)的配置,從而進行功能處理上邊的開發(fā)步驟我們會在Hello World中詳細驗證。24、Spring Web MVC優(yōu)勢(yush)1、清晰(qngx)的角色劃分:前端控制器(DispatcherServlet)、請求到處理器映射(HandlerMapping)、處理器適配器(HandlerAdapter)、視圖解析器(

20、ViewResolver)、處理器或頁面控制器(Controller)、驗證器( Validator)、命令對象(duxing)(Command 請求參數(shù)綁定到的對象就叫命令對象)、表單對象(Form Object 提供給表單展示和提交到的對象就叫表單對象)。2、分工明確,而且擴展點相當(dāng)靈活,可以很容易擴展,雖然幾乎不需要;3、由于命令對象就是一個POJO,無需繼承框架特定API,可以使用命令對象直接作為業(yè)務(wù)對象;4、和Spring 其他框架無縫集成,是其它Web框架所不具備的;5、可適配,通過HandlerAdapter可以支持任意的類作為處理器;6、可定制性,HandlerMapping、

21、ViewResolver等能夠非常簡單的定制;7、功能強大的數(shù)據(jù)驗證、格式化、綁定機制;8、利用Spring提供的Mock對象能夠非常簡單的進行Web層單元測試;9、本地化、主題的解析的支持,使我們更容易進行國際化和主題的切換。10、強大的JSP標(biāo)簽(bioqin)庫,使JSP編寫更容易。還有比如RESTful風(fēng)格的支持、簡單的文件(wnjin)上傳、約定大于配置的契約式編程支持、基于注解的零配置支持等等。到此我們已經(jīng)(y jing)簡單的了解了Spring Web MVC,接下來讓我們來個實例來具體使用下這個框架。25、Hello World HYPERLINK /rumen/ t /web

22、/spring/20130204/_blank 入門2.5.1、準備開發(fā)環(huán)境和運行環(huán)境:開發(fā)工具:eclipse運行環(huán)境:tomcat6.0.20工程:動態(tài)web工程(springmvc-chapter2)spring框架下載:spring-framework-3.1.1.RELEASE-with-docs.zip依賴jar包:1、 Spring框架jar包:為了簡單,將spring-framework-3.1.1.RELEASE-with-docs.zip/dist/下的所有(suyu)jar包拷貝到項目的WEB-INF/lib目錄下;2、 Spring框架(kun ji)依賴的jar包:需

23、要添加Apache commons logging日志(rzh),此處使用的是commons.logging-1.1.1.jar;需要添加jstl標(biāo)簽庫支持,此處使用的是jstl-1.1.2.jar和standard-1.1.2.jar;2.5.2、前端控制器的配置在我們的web.xml中添加如下配置:XML/HTML Code復(fù)制內(nèi)容到剪貼板 chapter2 org.springframework.web.servlet.DispatcherServlet 1 chapter2 / load-on-startup:表示(biosh)啟動容器時初始化該Servlet;url-pattern:

24、表示哪些請求(qngqi)交給Spring Web MVC處理, “/” 是用來定義默認(mrn)servlet映射的。也可以如“*.html”表示攔截所有以html為擴展名的請求。自此請求已交給Spring Web MVC框架處理,因此我們需要配置Spring的配置文件,默認DispatcherServlet會加載WEB-INF/DispatcherServlet的Servlet名字-servlet.xml配置文件。本示例為WEB-INF/ chapter2-servlet.xml。2.5.3、在Spring配置文件中配置HandlerMapping、HandlerAdapter具體配置在W

25、EB-INF/ chapter2-servlet.xml文件中:XML/HTML Code復(fù)制(fzh)內(nèi)容到剪貼板 BeanNameUrlHandlerMapping:表示將請求(qngqi)的URL和Bean名字映射,如URL為 “上下文/hello”,則Spring配置文件必須(bx)有一個名字為“/hello”的Bean,上下文默認忽略。SimpleControllerHandlerAdapter:表示所有實現(xiàn)了org.springframework.web.servlet.mvc.Controller接口的Bean可以作為Spring Web MVC中的處理器。如果需要其他類型的處理

26、器可以通過實現(xiàn)HadlerAdapter來解決。2.5.4、在Spring配置文件中配置ViewResolver具體配置在WEB-INF/ chapter2-servlet.xml文件中:XML/HTML Code復(fù)制(fzh)內(nèi)容到剪貼板 InternalResourceViewResolver:用于支持Servlet、JSP視圖(sht)解析;viewClass:JstlView表示JSP模板頁面需要使用(shyng)JSTL標(biāo)簽庫,classpath中必須包含jstl的相關(guān)jar包;prefix和suffix:查找視圖頁面的前綴和后綴(前綴邏輯視圖名后綴),比如傳進來的邏輯視圖名為hel

27、lo,則該該jsp視圖頁面應(yīng)該存放在“WEB-INF/jsp/hello.jsp”;2.5.5、開發(fā)(kif)處理器/頁面控制器Java Code復(fù)制(fzh)內(nèi)容到剪貼板packagecn.javass.chapter2.web.controller; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importorg.springframework.web.servlet.ModelAndView; importorg.springframework.web

28、.servlet.mvc.Controller; publicclassHelloWorldControllerimplementsController Override publicModelAndViewhandleRequest(HttpServletRequestreq,HttpServletResponseresp)throwsException /1、收集(shuj)參數(shù)、驗證參數(shù)/2、綁定參數(shù)到命令對象/3、將命令對象傳入業(yè)務(wù)對象進行業(yè)務(wù)處理/4、選擇(xunz)下一個頁面ModelAndViewmv=newModelAndView(); /添加(tin ji)模型數(shù)據(jù)可以是任意

29、(rny)的POJO對象mv.addObject(message,HelloWorld!); /設(shè)置邏輯視圖名,視圖解析器會根據(jù)該名字解析到具體的視圖頁面mv.setViewName(hello); returnmv; org.springframework.web.servlet.mvc.Controller:頁面控制器/處理器必須實現(xiàn)Controller接口,注意別選錯了;后邊我們會學(xué)習(xí)其他的處理器實現(xiàn)方式;public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) :功能處理方法,

30、實現(xiàn)相應(yīng)的功能處理,比如(br)收集參數(shù)、驗證參數(shù)、綁定參數(shù)到命令對象、將命令對象傳入業(yè)務(wù)對象進行業(yè)務(wù)處理、最后返回ModelAndView對象;ModelAndView:包含了視圖要實現(xiàn)的模型數(shù)據(jù)(shj)和邏輯視圖名;“mv.addObject(message, Hello World!);”表示添加模型(mxng)數(shù)據(jù),此處可以是任意POJO對象;“mv.setViewName(hello);”表示設(shè)置邏輯視圖名為“hello”,視圖解析器會將其解析為具體的視圖,如前邊的視圖解析器InternalResourceVi。wResolver會將其解析為“WEB-INF/jsp/hello.j

31、sp”。我們需要將其添加到Spring配置文件(WEB-INF/chapter2-servlet.xml),讓其接受Spring IoC容器管理:XML/HTML Code復(fù)制內(nèi)容到剪貼板 name=/hello:前邊配置的BeanNameUrlHandlerMapping,表示如過請求的URL為 “上下文/hello”,則將會交給該Bean進行處理。2.5.6、開發(fā)(kif)視圖頁面創(chuàng)建(chungjin) /WEB-INF/jsp/hello.jsp視圖頁面:XML/HTML Code復(fù)制(fzh)內(nèi)容到剪貼板 HelloWorld $message $message:表示顯示由Hello

32、WorldController處理器傳過來的模型(mxng)數(shù)據(jù)。2.5.6、啟動服務(wù)器運行(ynxng)測試通過(tnggu)請求: HYPERLINK http:/localhost:9080/springmvc-chapter2/hello http:/localhost:9080/springmvc-chapter2/hello,如果頁面輸出“Hello World! ”就表明我們成功了!2.5.7、運行流程分析如圖2-3圖2-3運行(ynxng)步驟:1、 首先(shuxin)用戶發(fā)送請求 HYPERLINK http:/localhost:9080/springmvc-chapte

33、r2/hello%E2%80%94%E2%80%94web http:/localhost:9080/springmvc-chapter2/helloweb容器(rngq),web容器根據(jù)“/hello”路徑映射到DispatcherServlet(url-pattern為/)進行(jnxng)處理;2、 DispatcherServletBeanNameUrlHandlerMapping進行請求到處理的映射,BeanNameUrlHandlerMapping將“/hello”路徑直接映射到名字為“/hello”的Bean進行處理,即HelloWorldController,BeanNameU

34、rlHandlerMapping將其包裝為HandlerExecutionChain(只包括HelloWorldController處理器,沒有攔截器);3、 DispatcherServlet SimpleControllerHandlerAdapter,SimpleControllerHandlerAdapter將HandlerExecutionChain中的處理器(HelloWorldController)適配為SimpleControllerHandlerAdapter;4、 SimpleControllerHandlerAdapter HelloWorldController處理器功

35、能處理方法的調(diào)用,SimpleControllerHandlerAdapter將會調(diào)用處理器的handleRequest方法進行功能處理,該處理方法返回一個ModelAndView給DispatcherServlet;5、 hello(ModelAndView的邏輯(lu j)視圖名)InternalResourceViewResolver, InternalResourceViewResolver使用JstlView,具體視圖(sht)頁面在/WEB-INF/jsp/hello.jsp;6、 JstlView(/WEB-INF/jsp/hello.jsp)渲染,將在處理器傳入的模型數(shù)據(jù)(sh

36、j)(message=HelloWorld!)在視圖中展示出來;7、 返回控制權(quán)給DispatcherServlet,由DispatcherServlet返回響應(yīng)給用戶,到此一個流程結(jié)束。到此HelloWorld就完成了,步驟是不是有點多?而且回憶下我們主要進行了如下配置:1、 前端控制器DispatcherServlet;2、 HandlerMapping3、 HandlerAdapter4、 ViewResolver5、 處理器/頁面控制器6、 視圖因此,接下來幾章讓我們(w men)詳細看看這些配置,先從DispatcherServlet開始吧。26、POST中文(zhngwn)亂碼解決

37、方案spring Web MVC框架提供了org.springframework.web.filter.CharacterEncodingFilter用于解決POST方式造成的中文亂碼(lun m)問題,具體配置如下:XML/HTML Code復(fù)制內(nèi)容到剪貼板 CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding utf-8 CharacterEncodingFilter /* 以后(yhu)我們項目及所有頁面的編碼均為UTF-8。2.7、Spring3.1新特性(txng

38、)一、Spring2.5之前,我們都是通過實現(xiàn)(shxin)Controller接口或其實現(xiàn)來定義我們的處理器類。二、Spring2.5引入注解式處理器支持,通過Controller 和 RequestMapping注解定義我們的處理器類。并且提供了一組強大的注解:需要通過處理器映射DefaultAnnotationHandlerMapping和處理器適配器AnnotationMethodHandlerAdapter來開啟(kiq)支持Controller 和 RequestMapping注解的處理器。Controller:用于標(biāo)識(biozh)是處理器類;RequestMapping:請求到

39、處理器功能方法的映射(yngsh)規(guī)則;RequestParam:請求參數(shù)到處理器功能處理方法的方法參數(shù)上的綁定;ModelAttribute:請求參數(shù)到命令對象的綁定;SessionAttributes:用于聲明session級別存儲的屬性,放置在處理器類上,通常列出模型屬性(如ModelAttribute)對應(yīng)的名稱,則這些屬性會透明的保存到session中;InitBinder:自定義數(shù)據(jù)綁定注冊支持,用于將請求參數(shù)轉(zhuǎn)換到命令對象屬性的對應(yīng)類型;三、Spring3.0引入RESTful架構(gòu)風(fēng)格支持(通過PathVariable注解和一些其他特性支持),且又引入了更多的注解支持:Cooki

40、eValue:cookie數(shù)據(jù)到處理器功能處理方法的方法參數(shù)上的綁定;RequestHeader:請求頭(header)數(shù)據(jù)到處理器功能處理方法(fngf)的方法參數(shù)上的綁定;RequestBody:請求的body體的綁定(通過(tnggu)HttpMessageConverter進行類型轉(zhuǎn)換);ResponseBody:處理器功能處理方法的返回值作為響應(yīng)(xingyng)體(通過HttpMessageConverter進行類型轉(zhuǎn)換);ResponseStatus:定義處理器功能處理方法/異常處理器返回的狀態(tài)碼和原因;ExceptionHandler:注解式聲明異常處理器;PathVariab

41、le:請求URI中的模板變量部分到處理器功能處理方法的方法參數(shù)上的綁定,從而支持RESTful架構(gòu)風(fēng)格的URI;四、還有比如:JSR-303驗證框架的無縫支持(通過Valid注解定義驗證元數(shù)據(jù));使用Spring 3開始的ConversionService進行類型轉(zhuǎn)換(PropertyEditor依然有效),支持使用NumberFormat 和 DateTimeFormat來進行數(shù)字和日期的格式化;HttpMessageConverter(Http輸入/輸出轉(zhuǎn)換器,比如JSON、XML等的數(shù)據(jù)輸出轉(zhuǎn)換器);ContentNegotiatingViewResolver,內(nèi)容協(xié)商視圖解析器,它還是

42、視圖解析器,只是它支持根據(jù)請求信息將同一模型數(shù)據(jù)以不同(b tn)的視圖方式展示(如json、xml、html等),RESTful架構(gòu)風(fēng)格中很重要的概念(同一資源,多種表現(xiàn)形式);Spring 3 引入 一個(y ) mvc XML的命名空間用于支持mvc配置,包括如:自動注冊基于注解風(fēng)格(fngg)的處理器需要的DefaultAnnotationHandlerMapping、AnnotationMethodHandlerAdapter支持Spring3的ConversionService自動注冊支持JSR-303驗證框架的自動探測并注冊(只需把JSR-303實現(xiàn)放置到classpath)自動

43、注冊相應(yīng)的HttpMessageConverter(用于支持RequestBody 和 ResponseBody)(如XML輸入輸出轉(zhuǎn)換器(只需將JAXP實現(xiàn)放置到classpath)、JSON輸入輸出轉(zhuǎn)換器(只需將Jackson實現(xiàn)放置到classpath)等。:注冊自定義的處理器攔截器;:和ParameterizableViewController類似,收到相應(yīng)請求后直接選擇相應(yīng)的視圖;:邏輯靜態(tài)資源路徑到物理靜態(tài)資源路徑的支持;:當(dāng)在web.xml 中DispatcherServlet使用/ 映射時,能映射靜態(tài)資源(當(dāng)Spring Web MVC框架沒有處理請求對應(yīng)的控制器時(如一些(y

44、xi)靜態(tài)資源),轉(zhuǎn)交給默認的Servlet來響應(yīng)靜態(tài)文件,否則報404找不到資源錯誤,)。等等(dn dn)。五、Spring3.1新特性(txng):對Servlet 3.0的全面支持。EnableWebMvc:用于在基于Java類定義Bean配置中開啟MVC支持,和XML中的功能一樣;新的Contoller和RequestMapping注解支持類:處理器映射RequestMappingHandlerMapping 和 處理器適配器RequestMappingHandlerAdapter組合來代替Spring2.5開始的處理器映射DefaultAnnotationHandlerMapping和處理器適配器AnnotationMethodHandlerAdapter,提供更多的擴展點,它們之間的區(qū)別我們在處理器映射一章介紹。新的ExceptionHandler 注解支持(zhch)類:ExceptionHandlerExceptionResolver來代替Spring3.0的AnnotationMethodHandlerEx

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論