源碼及springmvc e學(xué)習(xí)收集_第1頁(yè)
源碼及springmvc e學(xué)習(xí)收集_第2頁(yè)
源碼及springmvc e學(xué)習(xí)收集_第3頁(yè)
源碼及springmvc e學(xué)習(xí)收集_第4頁(yè)
源碼及springmvc e學(xué)習(xí)收集_第5頁(yè)
已閱讀5頁(yè),還剩134頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

???????????????????????1.SpringMVC概異常處SpringMVC運(yùn)行流程??SpringMVC使用@RequestMapping映射請(qǐng)映射請(qǐng)求參數(shù)&請(qǐng)求處理模型數(shù)視圖和視圖RESTfulSpringMVC表單標(biāo)簽&處理靜態(tài)資?對(duì)處JSON:使用國(guó)際文件的上使用攔截???????????????????????SpringMVC概SpringMVC使用@RequestMapping映射請(qǐng)求映射請(qǐng)求參數(shù)&請(qǐng)求頭處理模型數(shù)視圖和視圖RESTfulSpringMVC表單標(biāo)簽&處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換&數(shù)據(jù)格式化&數(shù)據(jù)校驗(yàn)處JSON:使用國(guó)際使用攔異常處SpringMVC運(yùn)行流程?對(duì)比SpringMVCSpringMVCWeb框架,是目前最主流MVCSpring3.0Struts2,成為最優(yōu)MVC框架SpringMVC通過(guò)MVC注解,POJO成為處理請(qǐng)REST風(fēng)格URL請(qǐng)???????–––––SpringMVCjarjar?jarspring-core-spring-web-?配置?配置DispatcherServlet:DispatcherServlet默認(rèn)加/WEB-INF/<servletName-servlet>.xmlSpring配置文件,WEB層的Spring容器??梢酝ㄟ^(guò)contextConfigLocation初始化參數(shù)自定義配置文件的位置和名HelloWorld:創(chuàng)SpringMVCHelloWorld:創(chuàng)SpringMVC??名解析為WEB-publicclasspublicclasspublicStringhelloWolrd(){return}}<bean<propertyname=“prefix”value=“/WEB-<propertyname="suffix"?????????????????????????概異常處SpringMVC運(yùn)行流程使用@RequestMapping映射請(qǐng)映射請(qǐng)求參數(shù)&請(qǐng)求頭視圖和視圖RESTfulSpringMVC表單標(biāo)簽&處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換&數(shù)據(jù)格式化&數(shù)據(jù)校驗(yàn)處JSON:使用國(guó)際使用攔?對(duì)比使用映射請(qǐng)?SpringMVC使用映射請(qǐng)?SpringMVC@RequestMapping注解為控制器指定可以處理哪些URL請(qǐng)求在控制器的類定義及方法定義處都可標(biāo)?––類定義處:提供初步的請(qǐng)求映射信息。相對(duì)于WEB應(yīng)用的根目方法處:提供進(jìn)一步的細(xì)分映射信息。相對(duì)于類定義處的URL。類定義處未標(biāo)注@RequestMapping,則方法處標(biāo)記的WEB應(yīng)用的根目錄URL相對(duì)?DispatcherServlet截獲請(qǐng)求后,就通過(guò)控制器上映射請(qǐng)求映射請(qǐng)求示?①請(qǐng)求方②請(qǐng)求③HTTP協(xié)議頭體@RequestMapping除了可以使用請(qǐng)URL映射請(qǐng)求外,@RequestMappingvalue、method、paramsheadsparamsheaders支持簡(jiǎn)單的表達(dá)式???–––param1:表示請(qǐng)求必須包含名為param1的請(qǐng)求參!param1:表示請(qǐng)求不能包含名為param1的請(qǐng)求參param1value1:表示請(qǐng)求包含名param1的請(qǐng)求參數(shù),但其值不能為value1{“param1=value1”param2請(qǐng)求必須包含名param1和param2的兩個(gè)請(qǐng)求參數(shù),且param1參數(shù)的值必須為value1–使用Ant風(fēng)格資3種匹配符映射請(qǐng)?–––?使用Ant風(fēng)格資3種匹配符映射請(qǐng)?–––?:匹配文件名中的一個(gè)字符*:匹配文件名中的任意字符**:**匹配多層路?@RequestMapping還支持Ant風(fēng)格–/user/*/createUser:匹/user/aaa/createUser、/user/**/createUser:匹/user/createUser、等–等–匹/user/createUseraa、等URL綁?帶URLURL綁?帶URLSpring3.0新增的功能,該SpringMVCREST目標(biāo)挺進(jìn)發(fā)展過(guò)程中具有里程碑的?可以將URL中占位符參數(shù)綁定到通制器處理方法的入?yún)⒅校篣RL{xxx占位符可以通@PathVariable("xxx綁RESTRepresentationalRESTRepresentationalStateTransfer。(資源)表現(xiàn)層狀態(tài)轉(zhuǎn)化。是目前可以用一個(gè)URI(統(tǒng)一資源定位符)指向它,每種資源對(duì)應(yīng)URI。要獲取這個(gè)資源,訪問(wèn)它的URIURI即為每一個(gè)資源的獨(dú)一無(wú)二的識(shí)表現(xiàn)層(Representation):把資源具體呈現(xiàn)出來(lái)的形式,叫做它的表現(xiàn)式、XML格式、JSON格式表現(xiàn),甚至可以采用二進(jìn)制格式。狀態(tài)轉(zhuǎn)化(StateTransfer):每發(fā)出一個(gè)請(qǐng)求,就代表了客戶端和服務(wù)器的一“狀態(tài)轉(zhuǎn)化”(StateTransfer)。而這種轉(zhuǎn)化是建立在表現(xiàn)層之上的,所以就是“表現(xiàn)層狀態(tài)轉(zhuǎn)化”。具體說(shuō),就是HTTP協(xié)議里面,四個(gè)表示操作方式的動(dòng)取資源,POST用來(lái)新建資源,PUT用來(lái)更新資源,DELETE用來(lái)刪除資源。?????––––?––––HTTPGETid1HTTPDELETE:刪id=1HTTPPUT:更新id1orderHTTPPOST:新增orderHiddenHttpMethodFilter:瀏覽器form表單只支?POST請(qǐng)求,而DELETE、PUTmethod并不支為標(biāo)http方法,使得支持GET、POST、PUT與DELETE請(qǐng)求。@PathVariable綁URL?帶URL@PathVariable綁URL?帶URLSpring3.0新增的功能,該SpringMVCREST目標(biāo)挺進(jìn)發(fā)展過(guò)程中具有里程碑的?可以將URL中占位符參數(shù)綁定到通制器處理方法的入?yún)⒅校篣RL{xxx}占位符可以通@PathVariable("xxx綁?????????????????????????概異常處SpringMVC運(yùn)行流程使用@RequestMapping映射請(qǐng)映射請(qǐng)求參數(shù)&請(qǐng)求參數(shù)視圖和視圖RESTfulSpringMVC表單標(biāo)簽&處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換&數(shù)據(jù)格式化&數(shù)據(jù)校驗(yàn)處JSON:使用國(guó)際使用攔?對(duì)比?SpringMVC通過(guò)分析處理方法的簽HTTP請(qǐng)求信SpringMVC對(duì)控制器處理方法簽名的限制是很寬松的,必要時(shí)可以對(duì)方法及方法入?yún)?biāo)注相應(yīng)的注解、@RequestParam、@RequestHeader等)、MVCHTTP請(qǐng)求的信息綁定到相應(yīng)的方法入?yún)??使綁定請(qǐng)使綁定請(qǐng)求參數(shù)?value:參數(shù)required:是否必須。默認(rèn)為true,表示請(qǐng)求參數(shù)中必須包含對(duì)應(yīng)使用綁定請(qǐng)使用綁定請(qǐng)求報(bào)頭的屬性?息,通@RequestHeader即可將請(qǐng)求頭中的屬性綁定請(qǐng)綁定請(qǐng)值?POJO對(duì)POJO對(duì)象綁定請(qǐng)求參數(shù)如:dept.deptId、dept.address.tel?ServletServletAPI作為哪ServletAPI類??????????????????????????????????概異常處SpringMVC運(yùn)行流程使用@RequestMapping映射請(qǐng)映射請(qǐng)求參數(shù)&請(qǐng)求頭RESTful視圖和視圖SpringMVC表單標(biāo)簽&處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換&數(shù)據(jù)格式化&數(shù)據(jù)校驗(yàn)處JSON:使用國(guó)際使用攔?對(duì)比SpringMVC提供了以下幾種途徑SpringMVC提供了以下幾種途徑輸–ModelAndView處理方法返回值類型時(shí)方法體即可通過(guò)該對(duì)?–MapModel入?yún)odelMap或java.uti.Map時(shí),處理方法返回時(shí),Map@SessionAttributes將模型中的某個(gè)屬性暫–中,以便多個(gè)請(qǐng)求之間可以共享這個(gè)屬–@ModelAttribute方法入?yún)?biāo)注該注解后入?yún)⒌膶?duì)象??添加模型數(shù)據(jù)MoelAndViewaddObject(StringattributeName,ObjectModelAndViewaddAllObject(Map<String,?>設(shè)置視圖voidsetView(View??MapMapSpringMVC在內(nèi)部使用了一個(gè)SpringMVC在調(diào)用方法前會(huì)創(chuàng)建一個(gè)隱如果方法的入?yún)apModel型,SpringMVC會(huì)將隱含模型的引用傳??MapMapModel??控制器類上標(biāo)@SessionAttributesSpringMVC將在模型中對(duì)應(yīng)的屬性暫存到HttpSession中。@SessionAttributes除了可以通過(guò)屬性名指定需要放到會(huì)?–User.class的屬性添加到會(huì)話中。@SessionAttributes(value={“user1”,“user2”})@SessionAttributes(types={User.class,Dept.class})會(huì)將隱含模型中所有類–––@SessionAttributes@SessionAttributes③.傳遞給目標(biāo)方法,執(zhí)update操②.表單參數(shù)賦new一個(gè)新的對(duì)③.傳遞給目標(biāo)方法,執(zhí)update操②.表單參數(shù)賦new一個(gè)新的對(duì)③.傳遞給目標(biāo)方法,執(zhí)update操②.表單參數(shù)賦③.傳遞給目標(biāo)方法,執(zhí)update操②.表單參數(shù)賦在方法定義在方法定義@ModelAttribute注解:SpringMVC@ModelAttribute的方法。–可以從隱含對(duì)象中獲取隱含的模型數(shù)據(jù)中獲取對(duì)象,再將請(qǐng)綁定到對(duì)象中,再傳–將方法入?yún)?duì)象添加到模型??由@SessionAttributes引發(fā)的異由@SessionAttributes引發(fā)的異?請(qǐng)求消息填充該入?yún)?duì)象。如果在會(huì)話中找不到對(duì)應(yīng)性,則HttpSessionRequiredException異如何避免@SessionAttributes如何避免@SessionAttributes引發(fā)的異}}?????????????????????????概異常處SpringMVC運(yùn)行流程使用@RequestMapping映射請(qǐng)映射請(qǐng)求參數(shù)&請(qǐng)求頭視圖和視圖RESTfulSpringMVC表單標(biāo)簽&處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換&數(shù)據(jù)格式化&數(shù)據(jù)校驗(yàn)處JSON:使用國(guó)際使用攔?對(duì)比SpringMVC如何解析請(qǐng)求處理方法返回值類視圖對(duì)SpringMVC如何解析請(qǐng)求處理方法返回值類視圖對(duì)2:3:4:5:6:7:8:9:10:11:2:3:4:5:6:7:8:9:10:11:?請(qǐng)求處?請(qǐng)求處理方法執(zhí)行完成后,最終返回一個(gè)ModelAndView對(duì)象。對(duì)String,ViewModeMap等類型的處理方法,SpringMVC也會(huì)在內(nèi)部將它們裝配成一個(gè)ModelAndView對(duì)象,它包含了邏輯名和模型對(duì)象的SpringMVC借助視圖解析器(ViewResolver)得到最終??作上,從而實(shí)現(xiàn)MVC的充分解耦?的作用是渲種現(xiàn)給?的作用是渲種現(xiàn)給。為了實(shí)現(xiàn)視圖模型和具體實(shí)現(xiàn)技術(shù)的解耦,Spring?org.springframework.web.servlet包中定義了一個(gè)高度抽象的?視圖對(duì)象由視圖解析器負(fù)責(zé)實(shí)例化。由于視圖是無(wú)狀態(tài)的,所以他不會(huì)有線程安全的問(wèn)SpringMVC為邏輯視圖名的解析提供了不同的策略,可SpringMVC為邏輯視圖名的解析提供了不同的策略,可SpringWEB上下文中配置一種或多種解析策略,并??????程序員可以選擇一種視圖解析器或混用多種視圖每個(gè)視圖解析器都實(shí)現(xiàn)Ordered接口并開order屬性,可以通order屬性指定解析器的優(yōu)先順序,order越小優(yōu)先級(jí)越高。SpringMVC會(huì)按視圖解析器順序的優(yōu)先順序?qū)壿嬕晥D名進(jìn)行解析,直到解析成功并返回視圖對(duì)象,否則將拋出ServletException常?JSP是最常見(jiàn)的JSP是最常見(jiàn)的視圖技術(shù)?作為視圖解析器若項(xiàng)目中使用了若項(xiàng)目中使用了JSTL,則SpringMVC會(huì)自動(dòng)把視圖InternalResourceView轉(zhuǎn)為???若希望直接響應(yīng)通過(guò)SpringMVC渲染的頁(yè)面controller標(biāo)簽Excel若希望使用ExcelExcel若希望使用Excel展示數(shù)據(jù)列表,僅需要擴(kuò)展SpringMVC提供的AbstractExcelView或AbstractJExcelView即可。實(shí)現(xiàn)buildExcelDocument()AbstractExcelViewPOIAPIBeanNameViewResolver作為視圖解析器即可響應(yīng)頭Content-Disposition的值為??????如果返回的字符串中forwardredirect:前redirect:當(dāng)成指示符,其后的字符串作URL來(lái)處redirect:success.jsp:會(huì)完成一個(gè)到success.jsp的重定向的操forward:success.jsp:會(huì)完成一個(gè)到success.jsp的轉(zhuǎn)發(fā)操??????????????????????????概異常處SpringMVC運(yùn)行流程使用@RequestMapping映射請(qǐng)映射請(qǐng)求參數(shù)&請(qǐng)求頭視圖和視圖RESTfulSpringMVC表單標(biāo)簽&處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換&數(shù)據(jù)格式化&數(shù)據(jù)校驗(yàn)處JSON:使用國(guó)際使用攔?對(duì)比RESTfulSpringMVC?RESTfulSpringMVC?1顯示所有員–––請(qǐng)求方式顯示效RESTfulSpringMVC?2添加所有員RESTfulSpringMVC?2添加所有員–顯示添加頁(yè)面–添加員工信息??????RESTfulSpringMVC3刪?––––RESTfulSpringMVC3刪?––––請(qǐng)求方式刪除后效果:對(duì)應(yīng)記錄從數(shù)據(jù)表中刪?顯示修改頁(yè)面不可修改???–修改員工信息???list頁(yè)RESTfulSpringMVC?RESTfulSpringMVC?–––?③.傳遞給目標(biāo)方②.表單參數(shù)賦③.傳遞給目標(biāo)方②.表單參數(shù)賦?????????????????????????概異常處SpringMVC運(yùn)行流程使用@RequestMapping映射請(qǐng)映射請(qǐng)求參數(shù)&請(qǐng)求頭視圖和視圖RESTful數(shù)據(jù)&數(shù)據(jù)格式化&數(shù)據(jù)校驗(yàn)處JSON:使用國(guó)際使用攔?對(duì)比SpringSpring的表HTML表單元素相綁定,以實(shí)現(xiàn)表單?formform一般情況下,通過(guò)GET請(qǐng)求獲取表單頁(yè)面,而通過(guò)頁(yè)面的URL是相同的。只要滿足該最佳條件的契約,<form:form>標(biāo)簽就無(wú)需通action屬性指定表單提交的URL沒(méi)有指定該屬性,則默認(rèn)從request域?qū)ο笾凶x取command的表bean,如果該屬性值也不存在,則會(huì)???提供了多個(gè)表單組件標(biāo)簽?提供了多個(gè)表單組件標(biāo)簽––path:表單字段,對(duì)應(yīng)html元素的name屬性,支持級(jí)聯(lián)屬htmlEscape:是否對(duì)表單值的HTML特殊字符進(jìn)行轉(zhuǎn)換,默認(rèn)值為true––cssClass:表單組件對(duì)應(yīng)樣式類cssErrorClass:表單組件的數(shù)據(jù)存在錯(cuò)誤時(shí),采樣屬性值和value值相等時(shí),單選框被選中???––items:可以是一個(gè)List、String[]itemLabel:指定radiolabeldelimiter:多個(gè)單選框可以通過(guò)delimiter指定分隔––form:radiobuttons標(biāo)簽form:radiobuttons標(biāo)簽form:radiobuttons標(biāo)簽–<form:errorspath*:顯示表單所有的錯(cuò)?????<form:errorspathuser*:顯示所user為前綴的屬性對(duì)的錯(cuò)––<form:errorspathusername:顯示特定表單對(duì)象屬性的錯(cuò)?????????????????????????概異常處SpringMVC運(yùn)行流程使用@RequestMapping映射請(qǐng)映射請(qǐng)求參數(shù)&請(qǐng)求頭視圖和視圖RESTfulSpringMVC表&處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換&數(shù)據(jù)格式化&數(shù)據(jù)校驗(yàn)處JSON:使用國(guó)際使用攔?對(duì)比??優(yōu)??優(yōu)雅的REST風(fēng)格的資源URL不希望.html.do等后DispatcherServlet請(qǐng)求映射配置/,SpringMVC將捕獲WEB容器的所有請(qǐng)求,包括靜態(tài)資源的請(qǐng)求,SpringMVC會(huì)將他handler/>的方式解決靜態(tài)資源的問(wèn)題:?–<mvc:default-servlet-handler/>將在SpringMVC上下文中定義一個(gè)請(qǐng)求進(jìn)行篩查,如果發(fā)現(xiàn)是沒(méi)有經(jīng)過(guò)映射的請(qǐng)求,就將該請(qǐng)WEB應(yīng)用服務(wù)器默認(rèn)的Servlet處理,如果不是靜態(tài)資源的請(qǐng)求,才由DispatcherServlet繼續(xù)處理WEB服務(wù)器的默Servlet名稱不是default,則需要通default-servlet-name屬性顯式指定–?????????????????????????概異常處SpringMVC運(yùn)行流程使用@RequestMapping映射請(qǐng)映射請(qǐng)求參數(shù)&請(qǐng)求頭視圖和視圖RESTfulSpringMVC表單標(biāo)簽&處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換&數(shù)據(jù)格&數(shù)據(jù)校驗(yàn)處JSON:使用國(guó)際使用攔?對(duì)比?1Spring?1SpringMVC對(duì)象及目標(biāo)DataBinder實(shí)例對(duì)DataBinder調(diào)用裝配在SpringMVC上下文中的化工作。將Servlet中的請(qǐng)求信息填充到入?yún)?duì)象中BindingData對(duì)象SpringMVCBindingResult中的入?yún)?duì)象和校驗(yàn)???SpringMVC通過(guò)反射機(jī)制對(duì)目標(biāo)處理方法進(jìn)行解析,將請(qǐng)?DataBinderSpringMVC通過(guò)反射機(jī)制對(duì)目標(biāo)處理方法進(jìn)行解析,將請(qǐng)?DataBinder,運(yùn)行機(jī)制如下 數(shù)據(jù)類型轉(zhuǎn)換/格式31數(shù)據(jù)校452??Spring??SpringMVC上下文中內(nèi)建了很多轉(zhuǎn)換Java類型的轉(zhuǎn)換ConversionServiceconverters–––––––––––––––––java.lang.Boolean->java.lang.String:java.lang.Character->java.lang.Number:CharacterToNumberFactory@f004c9java.lang.Character->java.lang.String:ObjectToStringConverter@68a961java.lang.Enum->java.lang.String:EnumToStringConverter@12f060ajava.lang.Number->java.lang.Character:NumberToCharacterConverter@1482ac5java.lang.Number->java.lang.Number:NumberToNumberConverterFactory@126c6fjava.lang.Number->java.lang.String:ObjectToStringConverter@14888e8java.lang.String->java.lang.Boolean:StringToBooleanConverter@1ca6626java.lang.String->java.lang.Character:StringToCharacterConverter@1143800java.lang.String->java.lang.Enum:StringToEnumConverterFactory@1bba86ejava.lang.String->java.lang.Number:StringToNumberConverterFactory@18d2c12java.lang.String->java.util.Locale:StringToLocaleConverter@3598e1java.lang.String->java.util.Properties:StringToPropertiesConverter@c90828java.lang.String->java.util.UUID:StringToUUIDConverter@a42f23java.util.Locale->java.lang.String:ObjectToStringConverter@c7e20ajava.util.Properties->java.lang.String:PropertiesToStringConverter@367a7fjava.util.UUID->java.lang.String:ObjectToStringConverter@112b07f……ConversionService是Spring類型轉(zhuǎn)換體系的核心接口。ConversionServiceFactoryBeanSpringIOC容器中定義一個(gè)ConversionService.Spring將自動(dòng)識(shí)別出IOCConversionServiceBean屬性配置及SpringMVC處理方法入?yún)⒔壎ǖ葓?chǎng)合使用它進(jìn)行數(shù)據(jù)的轉(zhuǎn)換可通ConversionServiceFactoryBeanconverters屬性???Spring支持的轉(zhuǎn)換Spring支持的轉(zhuǎn)換Spring定義3種類型的轉(zhuǎn)換器接口,實(shí)現(xiàn)任意一個(gè)轉(zhuǎn)換ConversionServiceFactroyBean中:?––Converter<S,T>:將S類型對(duì)象轉(zhuǎn)為T類型對(duì)ContFtoy“同質(zhì)”Covter封裝在一起。如果希望將一種類型的對(duì)象轉(zhuǎn)換為另一種類型及其子類的對(duì)象(trngNumbr及Numr子類(Integer、Long、Double等)對(duì)象)可使用該轉(zhuǎn)換器工廠GenericConverter:會(huì)根據(jù)源類對(duì)象及目標(biāo)類對(duì)象所在的宿主中的上下文信息進(jìn)行類型轉(zhuǎn)–<mvc:annotation-drivenconversion-service=“conversionService<mvc:annotation-drivenconversion-service=“conversionService會(huì)將自定義ConversionService注冊(cè)到SpringMVC的上下文中?<mvc:annotation-driven/>會(huì)自動(dòng)<mvc:annotation-driven/>會(huì)自動(dòng)注、RequestMappingHandlerAdapterExceptionHandlerExceptionResolver三個(gè)bean??––支持使用ConversionService實(shí)例對(duì)表單參數(shù)進(jìn)行類型轉(zhuǎn)支持使用@NumberFormatannotation、注解完成數(shù)據(jù)類型的格式支持使用@RequestBody@ResponseBody注––/>/>?@InitBinder標(biāo)識(shí)?@InitBinder標(biāo)識(shí)的方法,可以WebDataBinder對(duì)象進(jìn)行初始化。WebDataBinderDataBinder的子類,用于完成由表單字段到JavaBean屬性的綁定@InitBinder方法的參數(shù)通常是是WebDataBinder??SpringMVC通過(guò)反射機(jī)制對(duì)目標(biāo)處理方法進(jìn)行解析,將請(qǐng)?DataBinderSpringMVC通過(guò)反射機(jī)制對(duì)目標(biāo)處理方法進(jìn)行解析,將請(qǐng)?DataBinder,運(yùn)行機(jī)制如下 數(shù)據(jù)類型轉(zhuǎn)換/格式31數(shù)據(jù)校452?????????????????????????概異常處SpringMVC運(yùn)行流程使用@RequestMapping映射請(qǐng)映射請(qǐng)求參數(shù)&請(qǐng)求頭視圖和視圖RESTfulSpringMVC表單標(biāo)簽&處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換&數(shù)據(jù)格式化&數(shù)據(jù)校驗(yàn)處JSON:使用國(guó)際使用攔?對(duì)比??屬于“類型轉(zhuǎn)換”的范疇。Spring在格式化模塊中定義了一個(gè)實(shí)現(xiàn)ConversionService接口的FormattingConversionService實(shí)現(xiàn)類,該實(shí)現(xiàn)類擴(kuò)展FormattingConversionService擁有一個(gè)FormattingConversionServiceFactroyBean工廠類,后者用于在Spring上下文中構(gòu)造前者????–NumberFormatAnnotationFormatterFactroy:支持對(duì)數(shù)字類型的屬@NubFot注解JteTmFFrmttFtry對(duì)日期類型@Datmot–?SpringMVC入?yún)⒔壎澳P蛿?shù)據(jù)輸出時(shí)使用注解驅(qū)動(dòng)了。<mvc:annotation-driven/>默認(rèn)創(chuàng)建的ConversionService實(shí)例即為@DateTimeFormat注解可@DateTimeFormat注解可?–pattern屬性:類型為字符串。指定解析/格式化字段數(shù)據(jù)的模式,如:”yyyy-MM-ddhh:mm:ss”iso屬性:類型為DateTimeFormat.ISO。指定解析/格式化字段數(shù)據(jù)的ISO模式,包括四種:ISO.NONE(不使用)--默–認(rèn)、ISO.DATE(yyyy-MM-、ISO.TIME(hh:mm:ss.SSSZ)ISO.DATE_TIME(yyyy-MM-dd–stye屬性:字符串類型。通過(guò)樣式指定日期時(shí)間的格式,由兩位字符組成,第一位表示日期的格式,第二位表示時(shí)間的格式:S:短日/時(shí)間格式、:中日期/時(shí)間格式、:長(zhǎng)日期/時(shí)間格式、F:完整日期時(shí)間-時(shí)間格式?@NumberFormat可對(duì)類似數(shù)字類型的屬性進(jìn)行標(biāo)style:類型NumberFormat.Style。用于指定樣式類Style.CURRENCY(貨幣類型)Style.PERCENT?????????????????????????概異常處SpringMVC運(yùn)行流程使用@RequestMapping映射請(qǐng)映射請(qǐng)求參數(shù)&請(qǐng)求頭視圖和視圖RESTfulSpringMVC表單標(biāo)簽&處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換&數(shù)據(jù)格式化&數(shù)據(jù)校驗(yàn)處JSON:使用國(guó)際使用攔?對(duì)比JSRJSRJSRJSR303JavaBean數(shù)據(jù)合法性校驗(yàn)提供的標(biāo)準(zhǔn)框架,它已經(jīng)包含在JavaEE6.0.等標(biāo)準(zhǔn)的注解指定校驗(yàn)規(guī)則,并通過(guò)標(biāo)準(zhǔn)的驗(yàn)證接口對(duì)Bean???HibernateValidatorJSR303的一個(gè)參考實(shí)現(xiàn),除支持SpringMVC數(shù)據(jù)校SpringMVC數(shù)據(jù)校?303標(biāo)準(zhǔn)的校驗(yàn)框架。驗(yàn)工作。在SpringMVC中,可直接通過(guò)注解驅(qū)動(dòng)的方式SpringLocalValidatorFactroyBean既實(shí)現(xiàn)Spring的Validator接口,也實(shí)現(xiàn)JSR303Validator接口。只要在Spring容器中定義了一個(gè)驗(yàn)的Bean中。JSR303的實(shí)現(xiàn)jar包放到類路徑下???SpringMVCSpringMVC數(shù)據(jù)校<mvc:annotation-driven/>會(huì)默認(rèn)裝配好一個(gè)@valid注解即可SpringMVC在完成數(shù)據(jù)綁定后執(zhí)行在已經(jīng)標(biāo)注了JSR303注解的表單/命令對(duì)象前標(biāo)注一個(gè)@Valid,SpringMVC框架在將請(qǐng)求參數(shù)綁定到該入?yún)?duì)象SpringMVC是通過(guò)對(duì)處理方法簽名的規(guī)約來(lái)保存校驗(yàn)結(jié)果中,這個(gè)保存校驗(yàn)結(jié)果的入?yún)⒈仨毷荁indingResult或Errors類型,這兩個(gè)類都位于org.springframework.validation包中???SpringMVC數(shù)據(jù)校?需校驗(yàn)的SpringMVC數(shù)據(jù)校?需校驗(yàn)的Bean對(duì)象和其綁定結(jié)果對(duì)象或錯(cuò)誤對(duì)象時(shí)成對(duì)出現(xiàn)的,它之間不允許聲明其他的入Errors接口提供了獲取錯(cuò)誤信息的方法,如getErrorCount()getFieldErrors(StringBindingResult擴(kuò)Errors??publicStringhandle91(@ValidUseruser,BindingResultuserBindingResult,StringsessionId,ModelMapmm,@ValidDeptdept,Errors?驗(yàn)結(jié)果保存在被校驗(yàn)入?yún)?duì)象之后的BindingResult或Errors入?yún)⒅小?––––List<FieldError>getFieldErrors()ObjectgetFieldValue(Stringfield)Int?SpringMVC除了會(huì)將表?SpringMVC除了會(huì)將表單/命令對(duì)象的校驗(yàn)結(jié)果保存到應(yīng)的或?qū)ο笾型?,還會(huì)將所有校結(jié)“隱含模型?入?yún)?,校?yàn)結(jié)果也會(huì)保存在“隱含對(duì)象”中。隱含模型中的所有數(shù)據(jù)最終將通過(guò)HttpServletRequest的屬性列表暴露JSP視圖對(duì)JSP中可以獲取JSP頁(yè)面上可通<form:errors??個(gè)對(duì)應(yīng)的FieldError對(duì)象。解,當(dāng)該屬性值不滿@Pattern所定義的規(guī)則時(shí),就會(huì)產(chǎn)生以下4 ??–––?當(dāng)使SpringMVC標(biāo)簽顯示錯(cuò)誤消息時(shí)SpringMVC會(huì)查看WEB上下文是否裝配了對(duì)應(yīng)的國(guó)際化消息,如果沒(méi)有,則顯示默認(rèn)數(shù)不存在,或調(diào)用處理方法時(shí)發(fā)生錯(cuò)誤,都會(huì)在隱?–required:必要的參數(shù)不存在。如標(biāo)注了一個(gè)入?yún)?,但是該參?shù)不存typeMismatch:在數(shù)據(jù)綁定時(shí),發(fā)生數(shù)據(jù)類型不匹配的問(wèn)methodInvocation:SpringMVC在調(diào)用處理方法時(shí)發(fā)生了錯(cuò)––?????????????????????SpringMVCSpringMVC使用@RequestMapping映射請(qǐng)求映射請(qǐng)求參數(shù)&請(qǐng)求頭處理模型數(shù)視圖和視圖RESTfulSpringMVC表單標(biāo)簽&處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換&數(shù)據(jù)格式化&數(shù)據(jù)校驗(yàn)處JSON:使用國(guó)際使用攔???異常處SpringMVC運(yùn)行流程?對(duì)比處理?處理???編寫目標(biāo)方法,使其返回JSON對(duì)應(yīng)的對(duì)象或集在方法上添加@ResponseBody注HttpMessageConverter<T>Spring3.0新添加的一個(gè)接口,負(fù)責(zé)將HttpMessageConverter<T>Spring3.0新添加的一個(gè)接口,負(fù)責(zé)將請(qǐng)求信息轉(zhuǎn)換為一個(gè)對(duì)象(類型T),將對(duì)象(類型T)輸出為響應(yīng)HttpMessageConverter<T>接口定義??–BooleancanRead(Class<?>clazz,MediaTypemediaType):指定轉(zhuǎn)換器象,同時(shí)指定支持MIME類型(text/html,applaiction/json等)BooleancanWrite(Classclazz,MediaTypemediaType):指定轉(zhuǎn)換器是否可將clazz類型的對(duì)象寫到響應(yīng)流中,響應(yīng)流支持的媒體類型在MediaType中定義>Tread(ClassextendsT>clazz,HttpInputMessageinputMessage):將請(qǐng)求信息流轉(zhuǎn)換為T類型的對(duì)象。voidwrite(Tt,MediaTypecontnetType,HttpOutputMessgae型為contentType。––––的實(shí)的實(shí)現(xiàn)DispatcherServlet默DispatcherServlet默認(rèn)裝配RequestMappingHandlerAdapter,而???使用HttpMessageConverter<T>將使用HttpMessageConverter<T>將請(qǐng)求信息轉(zhuǎn)化并綁定到處理方法的入?yún)⒅谢驅(qū)㈨憫?yīng)結(jié)果轉(zhuǎn)為對(duì)應(yīng)類型的響應(yīng)信息,Spring提供了兩種途徑:?––@RequestBody@ResponseBody對(duì)處理方法進(jìn)行標(biāo)HttpEntity<TResponseEntity<T>作為處理方法的入?yún)⒒蚍祷?當(dāng)控制器處理方法使用到@RequestBody/@ResponseBody或HttpEntity<T>/ResponseEntity<T時(shí)Spring首先根據(jù)請(qǐng)求頭或響應(yīng)頭的Accept屬性選擇匹配的HttpMessageConverter,進(jìn)而根據(jù)參數(shù)類型或泛型類型的過(guò)濾得到匹配的HttpMessageConverter,若找不到可用的HttpMessageConverter將報(bào)錯(cuò)@RequestBody和@ResponseBody不需要成對(duì)出?@RequestBody、@RequestBody、HttpEntity、HttpEntity、示?????????????????????????概異常處SpringMVC運(yùn)行流程使用@RequestMapping映射請(qǐng)映射請(qǐng)求參數(shù)&請(qǐng)求頭視圖和視圖RESTfulSpringMVC表單標(biāo)簽&處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換&數(shù)據(jù)格式化&數(shù)據(jù)校驗(yàn)處JSON:使用國(guó)際使用攔?對(duì)比?默認(rèn)?默認(rèn)當(dāng)接受到請(qǐng)求時(shí),SpringMVC會(huì)在上下文中查找一個(gè)本SpringMVC還允許裝配一個(gè)動(dòng)態(tài)更改本地化類型的攔截??SessionLocaleResolver&獲獲對(duì)Locale對(duì)Session使用Locale對(duì)SessionLocaleResolver&獲獲對(duì)Locale對(duì)Session使用Locale對(duì)?AcceptHeaderLocaleResolver:根據(jù)?AcceptHeaderLocaleResolver:根據(jù)HTTP請(qǐng)求頭的Accept-Language參數(shù)確定本地化類型,如果沒(méi)有顯式定義本地化解析器,SpringMVC使用該解析器。????????????????????????????概異常處SpringMVC運(yùn)行流程使用@RequestMapping映射請(qǐng)映射請(qǐng)求參數(shù)&請(qǐng)求頭視圖和視圖RESTfulSpringMVC表單標(biāo)簽&處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換&數(shù)據(jù)格式化&數(shù)據(jù)校驗(yàn)處JSON:使用國(guó)際使用攔?對(duì)比?Spring?SpringMVC為文件上傳提供了直接的支持,這種支持是通過(guò)即插即用的MultipartResolver實(shí)現(xiàn)的。Spring用JakartaCommonsFileUpload技術(shù)實(shí)現(xiàn)了一個(gè)MultipartResolver實(shí)現(xiàn)類:CommonsMultipartResovlerSpringMVC上下文中默認(rèn)MultipartResovler,因的文件上傳功能,需現(xiàn)在上下文中配置MultipartResolver?為了CommonsMultipartResovler正確工作,必須先將JakartaCommonsFileUpload及JakartaCommons???????????????????????????概異常處SpringMVC運(yùn)行流程使用@RequestMapping映射請(qǐng)映射請(qǐng)求參數(shù)&請(qǐng)求頭視圖和視圖RESTfulSpringMVC表單標(biāo)簽&處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換&數(shù)據(jù)格式化&數(shù)據(jù)校驗(yàn)處JSON:使用國(guó)際使用攔?對(duì)比??–pdl:這業(yè)務(wù)處理器處理請(qǐng)調(diào)用,在該方法中對(duì)用戶請(qǐng)求rst進(jìn)行處理。如果程序員決定該攔截器對(duì)求進(jìn)行攔截處理后還要用其他的攔截器,或者是理器去行處理,則返回tue員決定不需要再調(diào)組件處理請(qǐng)求,則f。postHandle():這個(gè)方法在業(yè)務(wù)處理器處理完請(qǐng)求后,是DispatcherServlet向客戶端返回響應(yīng)前被調(diào)用,在該方法中對(duì)afterCompletion():這個(gè)方法在DispatcherServlet完全處理完請(qǐng)––returnreturn?????????????????????????概異常處SpringMVC運(yùn)行流程使用@RequestMapping映射請(qǐng)映射請(qǐng)求參數(shù)&請(qǐng)求頭視圖和視圖RESTfulSpringMVC表單標(biāo)簽&處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換&數(shù)據(jù)格式化&數(shù)據(jù)校驗(yàn)處JSON:使用國(guó)際使用攔?

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論