SpringMVC4教程超權(quán)威__超詳細(xì)分析_第1頁
SpringMVC4教程超權(quán)威__超詳細(xì)分析_第2頁
SpringMVC4教程超權(quán)威__超詳細(xì)分析_第3頁
SpringMVC4教程超權(quán)威__超詳細(xì)分析_第4頁
SpringMVC4教程超權(quán)威__超詳細(xì)分析_第5頁
已閱讀5頁,還剩133頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Spring MVC4教程超級超級權(quán)威權(quán)威, , 超級詳細(xì)超級詳細(xì)目前最好的中文教程基于最新的Spring4.x內(nèi)容概要1.SpringMVC 概述2.SpringMVC 的 HelloWorld3.使用 RequestMapping 映射請求4.映射請求參數(shù) & 請求頭5.處理模型數(shù)據(jù)6.視圖和視圖解析器7.RESTful CRUD8.SpringMVC 表單標(biāo)簽 &處理靜態(tài)資源9.數(shù)據(jù)轉(zhuǎn)換 & 數(shù)據(jù)格式化 & 數(shù)據(jù)校驗10.處理 JSON:使用 HttpMessageConverter 11.國際化12.文件的上傳13.使用攔截器14.異常處理15.Spri

2、ngMVC 運(yùn)行流程16.在 Spring 的環(huán)境下使用SpringMVC17.SpringMVC 對比 Struts2內(nèi)容概要SpringMVC 概述概述SpringMVC 的的 HelloWorld使用 RequestMapping 映射請求映射請求參數(shù) & 請求頭處理模型數(shù)據(jù)視圖和視圖解析器RESTful CRUDSpringMVC 表單標(biāo)簽 &處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換 & 數(shù)據(jù)格式化 & 數(shù)據(jù)校驗處理 JSON:使用 HttpMessageConverter國際化文件的上傳使用攔截器異常處理SpringMVC 運(yùn)行流程在 Spring 的環(huán)境下使用Sprin

3、gMVCSpringMVC 對比 Struts2SpringMVC 概述Spring 為為展展現(xiàn)層現(xiàn)層提供的基于提供的基于 MVC 設(shè)計設(shè)計理念理念的優(yōu)秀的Web 框架,是目前目前最主流最主流的的 MVC 框架之一框架之一 Spring3.0 后全面超越 Struts2,成為最最優(yōu)優(yōu)秀的秀的 MVC 框架框架 Spring MVC 通通過過一套一套 MVC 注解注解,讓 POJO 成為處理請 求的控制器,而無須實現(xiàn)任何接口。 支持支持 REST 風(fēng)風(fēng)格格的的 URL 請請求求 采用了松散耦合可插拔組件結(jié)構(gòu),比其他 MVC 框架更具擴(kuò)展性和靈活性HelloWorld 步驟: 加入 jar 包 在

4、 web.xml 中配置 DispatcherServlet 加入 Spring MVC 的配置文件 編寫處理請求的處理器,并標(biāo)識為處理器 編寫視圖HelloWorld:加入 jar 包 jar 包: commons-logging-1.1.3.jar spring-aop-4.0.0.RELEASE.jar spring-beans-4.0.0.RELEASE.jar spring-context-4.0.0.RELEASE.jar spring-core-4.0.0.RELEASE.jar spring-expression-4.0.0.RELEASE.jar spring-web-4.0

5、.0.RELEASE.jar spring-webmvc-4.0.0.RELEASE.jarHelloWorld:配置 web.xml配置 DispatcherServlet :DispatcherServlet 默默認(rèn)認(rèn)加加載載 /WEB- INF/.xml 的 Spring 配置文件, 啟動啟動 WEB 層層 的的 Spring 容器容器??梢酝ㄟ^ contextConfigLocation 初始化參數(shù)自定 義配置文件的位置和名稱HelloWorld:創(chuàng)建 Spring MVC 配置文件 配置自動掃描的包配置配置視圖視圖解析器解析器:視圖名稱解析器:將視圖邏輯 名解析為: /WEB-INF

6、/pages/.jspHelloWorld:創(chuàng)建請求處理器類*. action springmvc-1/helloWorld.actionurldispatcherServletControllerpublic class HelloWorldController RequestMapping(/helloWorld) public String helloWolrd()System.out.println(HelloWorld SpringMVC);return success;/WEB-INF/view/success.jspweb.xmlHandlerSpringMVC 配置文件實際的物

7、理視圖內(nèi)容概要SpringMVC 概述SpringMVC 的 HelloWorld使用使用 RequestMapping 映射映射請請求求映射請求參數(shù) & 請求頭處理模型數(shù)據(jù)視圖和視圖解析器RESTful CRUDSpringMVC 表單標(biāo)簽 &處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換 & 數(shù)據(jù)格式化 & 數(shù)據(jù)校驗處理 JSON:使用 HttpMessageConverter國際化文件的上傳使用攔截器異常處理SpringMVC 運(yùn)行流程在 Spring 的環(huán)境下使用SpringMVCSpringMVC 對比 Struts2使用 RequestMapping 映射請求 Spring

8、MVC 使用 RequestMapping 注解為控制器指定可 以處理哪些 URL 請求在控制器的類類定定義義及方法定及方法定義處義處都可標(biāo)注RequestMapping類類定定義處義處:提供初步的請求映射信息。相對于 WEB 應(yīng)用的根目錄 方法方法處處:提供進(jìn)一步的細(xì)分映射信息。相對于類定義處的 URL。若 類定義處未標(biāo)注 RequestMapping,則方法處標(biāo)記的 URL 相對于 WEB 應(yīng)用的根目錄 DispatcherServlet 截獲請求后,就通過控制器上RequestMapping 提供的映射信息確定請求所對應(yīng)的處理 方法。使用 RequestMapping 映射請求示例類定義

9、處標(biāo)記的RequestMapping 限定了處理 器類可以處理所有 URI 為 /hello 的請求,它相相對對于于 WEB 容器部容器部 署的根路徑署的根路徑處理器類可以定義多個處理方法,處理來 自/hello 下的請求映射映射請請求參數(shù)、求參數(shù)、請請求方法或求方法或請請求求頭頭 標(biāo)準(zhǔn)的 HTTP 請求報頭請求方法請求URLHTTP協(xié)議及版本 報 文 頭 報 文 體映射映射請請求參數(shù)、求參數(shù)、請請求方法或求方法或請請求求頭頭 RequestMapping 除了可以使用請請求求 URL 映射請求外,還還可以使用可以使用請請求方法、求方法、請請求參數(shù)及求參數(shù)及請請求求頭頭映射映射請請求求 Req

10、uestMapping 的 value、method、params 及 heads 分別表示請請求求 URL、請請求方法、求方法、請請求參數(shù)及求參數(shù)及請請求求頭頭的映射條 件,他們之間是與與的關(guān)系,聯(lián)聯(lián)合使用多個條件可合使用多個條件可讓請讓請求求映射映射 更加精更加精確確化?;?。 params 和 headers支持支持簡單簡單的表的表達(dá)達(dá)式式:param1: 表示請求必須包含名為 param1 的請求參數(shù) !param1: 表示請求不能包含名為 param1 的請求參數(shù) param1 != value1: 表示請求包含名為 param1 的請求參數(shù),但其值 不能為 value1 “param

11、1=value1”, “param2”: 請求必須包含名為 param1 和param2 的兩個請求參數(shù),且 param1 參數(shù)的值必須為 value1映射映射請請求參數(shù)、求參數(shù)、請請求方法或求方法或請請求求頭頭使用 RequestMapping 映射請求 Ant 風(fēng)風(fēng)格格資資源地址支持源地址支持 3 種種匹配符匹配符: ?:匹配文件名中的一個字符 *:匹配文件名中的任意字符 *:* 匹配多層路徑 RequestMapping 還支持支持 Ant 風(fēng)風(fēng)格的格的 URL: /user/*/createUser: 匹配/user/aaa/createUser、/user/bbb/createUse

12、r 等 URL /user/*/createUser: 匹配/user/createUser、/user/aaa/bbb/createUser 等 URL /user/createUser?: 匹配/user/createUseraa、/user/createUserbb 等 URLPathVariable 映射 URL 綁定的占位符 帶帶占位符的占位符的 URL 是是 Spring3.0 新增的新增的功能功能,該功能在 SpringMVC 向 REST 目標(biāo)挺進(jìn)發(fā)展過程中具有里程碑的 意義 通通過過 PathVariable 可以將可以將 URL 中占中占位符參數(shù)位符參數(shù)綁綁定到控定到控 制

13、器制器處處理方法的入?yún)⒅欣矸椒ǖ娜雲(yún)⒅校篣RL 中的 xxx 占位符可以通過 PathVariable(xxx) 綁定到操作方法的入?yún)⒅?。RESTREST:即 Representational State Transfer。(資資源)表源)表現(xiàn)層現(xiàn)層狀狀態(tài)轉(zhuǎn)態(tài)轉(zhuǎn)化。是目前化。是目前 最流行的一最流行的一種種互互聯(lián)聯(lián)網(wǎng)網(wǎng)軟軟件架件架構(gòu)構(gòu)。它結(jié)構(gòu)清晰、符合標(biāo)準(zhǔn)、易于理解、擴(kuò)展方便, 所以正得到越來越多網(wǎng)站的采用 資資源(源(Resources):網(wǎng)網(wǎng)絡(luò)絡(luò)上的一個上的一個實實體,或者體,或者說說是網(wǎng)是網(wǎng)絡(luò)絡(luò)上的一個具體信息上的一個具體信息。它 可以是一段文本、一張圖片、一首歌曲、一種服務(wù),總之就是一

14、個具體的存在。 可以用一個URI(統(tǒng)一資源定位符)指向它,每種資種資源源對應(yīng)對應(yīng)一個特定的一個特定的 URI 。要 獲取這個資源,訪問它的URI就可以,因此 URI 即即為為每一個一個資資源的獨源的獨一無二的一無二的識識 別別符符。表表現(xiàn)層現(xiàn)層(Representation):把把資資源具體呈源具體呈現(xiàn)現(xiàn)出來的形式出來的形式,叫做它的表,叫做它的表現(xiàn)層現(xiàn)層(Representation)。比如,文本可以用 txt 格式表現(xiàn),也可以用 HTML 格 式、XML 格式、JSON 格式表現(xiàn),甚至可以采用二進(jìn)制格式。狀狀態(tài)轉(zhuǎn)態(tài)轉(zhuǎn)化(化(State Transfer):每發(fā)出一個請求,就代表了客戶端和服

15、務(wù)器的一 次交互過程。HTTP協(xié)議,是一個無狀態(tài)協(xié)議,即所有的狀態(tài)都保存在服務(wù)器 端。因此,如果客如果客戶戶端想要操作服端想要操作服務(wù)務(wù)器,必器,必須須通通過過某某種種手段,手段,讓讓服服務(wù)務(wù)器端器端發(fā)發(fā)生生“ 狀狀態(tài)態(tài)轉(zhuǎn)轉(zhuǎn)化化”(State Transfer)。而)。而這種轉(zhuǎn)這種轉(zhuǎn)化是建立在表化是建立在表現(xiàn)層現(xiàn)層之上的,所以就是之上的,所以就是 “ 表表現(xiàn)層現(xiàn)層狀狀態(tài)轉(zhuǎn)態(tài)轉(zhuǎn)化化”。具體說,就是 HTTP 協(xié)議協(xié)議里面,四個表示操作方式的里面,四個表示操作方式的動動 詞詞:GET、POST、PUT、DELETE。它。它們們分分別對應(yīng)別對應(yīng)四四種種基本操作:基本操作:GET 用來用來獲獲 取取資

16、資源,源,POST 用來新建用來新建資資源,源,PUT 用來更新用來更新資資源,源,DELETE 用來用來刪刪除除資資源。源。REST 示例: /order/1 HTTP GET :得到 id = 1 的 order /order/1 HTTP DELETE:刪除 id = 1的 order /order/1 HTTP PUT:更新id = 1的 order /orderHTTP POST:新增 order HiddenHttpMethodFilter:瀏覽器 form 表單只支持 GET 與 POST 請求,而DELETE、PUT 等 method 并不支 持,Spring3.0 添加了一個

17、過濾器,可以將這些請求轉(zhuǎn)換 為標(biāo)準(zhǔn)的 http 方法,使得支持 GET、POST、PUT 與 DELETE 請求。PathVariable 綁定 URL 占位符到入?yún)?帶帶占位符的占位符的 URL 是是 Spring3.0 新增的新增的功能功能,該功能在 SpringMVC 向 REST 目標(biāo)挺進(jìn)發(fā)展過程中具有里程碑的 意義 通通過過 PathVariable 可以將可以將 URL 中占中占位符參數(shù)位符參數(shù)綁綁定到控定到控 制器制器處處理方法的入?yún)⒅欣矸椒ǖ娜雲(yún)⒅校篣RL 中的 xxx 占位符可以通過 PathVariable(xxx) 綁定到操作方法的入?yún)⒅?。?nèi)容概要SpringMVC 概述

18、SpringMVC 的 HelloWorld使用 RequestMapping 映射請求映射映射請請求參數(shù)求參數(shù) & 請請求參數(shù)求參數(shù)處理模型數(shù)據(jù)視圖和視圖解析器RESTful CRUDSpringMVC 表單標(biāo)簽 &處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換 & 數(shù)據(jù)格式化 & 數(shù)據(jù)校驗處理 JSON:使用 HttpMessageConverter國際化文件的上傳使用攔截器異常處理SpringMVC 運(yùn)行流程在 Spring 的環(huán)境下使用SpringMVCSpringMVC 對比 Struts2請求處理方法簽名 Spring MVC 通通過過分析分析處處理方法的理方法的簽簽名,將名

19、,將 HTTP 請請求求信信 息息綁綁定到定到處處理方法的相理方法的相應(yīng)應(yīng)人參人參中中。 Spring MVC 對控制器處理方法簽名的限制是很寬松的, 幾乎可以按喜歡的任何方式對方法進(jìn)行簽名。 必要時可以可以對對方法及方法入?yún)⒎椒胺椒ㄈ雲(yún)?biāo)標(biāo)注相注相應(yīng)應(yīng)的注解的注解(PathVariable、RequestParam、RequestHeader 等等)、Spring MVC 框架會將 HTTP 請求的信息綁定到相應(yīng)的方法入?yún)?中,并根據(jù)方法的返回值類型做出相應(yīng)的后續(xù)處理。使用 RequestParam 綁定請求參數(shù)值在處理方法入?yún)⑻幨褂檬褂?RequestParam 可以把可以把請請求參求參

20、 數(shù)數(shù)傳遞給請傳遞給請求方法求方法 value:參數(shù)名 required:是否必須。默認(rèn)為 true, 表示請求參數(shù)中必須包含對應(yīng) 的參數(shù),若不存在,將拋出異常使用 RequestHeader 綁定請求報頭的屬性值 請求頭包含了若干個屬性,服務(wù)器可據(jù)此獲知客戶端的信 息,通通過過 RequestHeader 即可將即可將請請求求頭頭中的屬性中的屬性值綁值綁 定到定到處處理方法的入?yún)⒅欣矸椒ǖ娜雲(yún)⒅惺褂?CookieValue 綁定請求中的 Cookie 值 CookieValue 可讓處理方法入?yún)⒔壎硞€ Cookie 值使用 POJO 對象綁定請求參數(shù)值 Spring MVC 會按會按請請求

21、參數(shù)名和求參數(shù)名和 POJO 屬性名屬性名進(jìn)進(jìn)行自行自動動匹匹 配,自配,自動為該對動為該對象填充屬性象填充屬性值值。支持支持級聯(lián)級聯(lián)屬性屬性。 如:dept.deptId、dept.address.tel 等使用使用 Servlet API 作作為為入?yún)⑷雲(yún)VC 的 Handler 方法可以接受哪些 ServletAPI 類型的參數(shù) HttpServletRequest HttpServletResponse HttpSession java.security.Principal Locale InputStream OutputStream Reader Writer內(nèi)容概要Spring

22、MVC 概述SpringMVC 的 HelloWorld使用 RequestMapping 映射請求映射請求參數(shù) & 請求頭處處理模型數(shù)據(jù)理模型數(shù)據(jù)RESTful CRUD視圖和視圖解析器SpringMVC 表單標(biāo)簽 &處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換 & 數(shù)據(jù)格式化 & 數(shù)據(jù)校驗處理 JSON:使用 HttpMessageConverter國際化文件的上傳使用攔截器異常處理SpringMVC 運(yùn)行流程在 Spring 的環(huán)境下使用SpringMVCSpringMVC 對比 Struts2處理模型數(shù)據(jù) Spring MVC 提供了以下幾種途徑輸出模型數(shù)據(jù): ModelAnd

23、View: 處理方法返回值類型為 ModelAndView時, 方法體即可通過該對象添加模型數(shù)據(jù) Map 及及 Model: 入?yún)?org.springframework.ui.Model、org.springframework.ui. ModelMap 或 java.uti.Map 時,處理方法返回時,Map 中的數(shù)據(jù)會自動添加到模型中。 SessionAttributes: 將模型中的某個屬性暫存到HttpSession 中,以便多個請求之間可以共享這個屬性 ModelAttribute: 方法入?yún)?biāo)注該注解后, 入?yún)⒌膶ο?就會放到數(shù)據(jù)模型中ModelAndView控制器處理方法的返回

24、值如果為 ModelAndView, 則其既既 包含包含視圖視圖信息,也包含模型數(shù)據(jù)信息信息,也包含模型數(shù)據(jù)信息。 添加模型數(shù)據(jù): MoelAndView addObject(String attributeName, Object attributeValue) ModelAndView addAllObject(Map modelMap) 設(shè)置視圖: void setView(View view) void setViewName(String viewName)jMap 及 Model Spring MVC 在內(nèi)部使用了一個 org.springframework.ui.Model 接口

25、存 儲模型數(shù)據(jù) 具體步驟 Spring MVC 在在調(diào)調(diào)用方法前會用方法前會創(chuàng)創(chuàng)建一個建一個隱隱 含的模型含的模型對對象作象作為為模型數(shù)據(jù)的存模型數(shù)據(jù)的存儲儲容器容器。如果方法的入?yún)⑷绻椒ǖ娜雲(yún)闉?Map 或或 Model 類類 型型,Spring MVC 會將隱含模型的引用傳 遞給這些入?yún)?。在方法體內(nèi),開發(fā)者可以 通過這個入?yún)ο笤L問到模型中的所有數(shù) 據(jù),也可以向模型中添加新的屬性數(shù)據(jù)Map 及 Model 示例SessionAttributes 若希望在多個若希望在多個請請求之求之間間共用某個模型屬性數(shù)據(jù)共用某個模型屬性數(shù)據(jù),則可以在 控制器類上標(biāo)注一個 SessionAttribut

26、es, Spring MVC 將在模型中對應(yīng)的屬性暫存到 HttpSession 中。 SessionAttributes 除了可以通過屬性名屬性名指定需要放到會 話中的屬性外,還可以通過模型屬性的對對象象類類型型指定哪些 模型屬性需要放到會話中 SessionAttributes(types=User.class) 會將隱含模型中所有類型為 User.class 的屬性添加到會話中。 SessionAttributes(value=“user1”, “user2”) SessionAttributes(types=User.class, Dept.class) SessionAttribut

27、es(value=“user1”, “user2”, types=Dept.class)SessionAttributes 示例update(). 表表單單參數(shù)參數(shù)賦值賦值 new 一個新的一個新的對對象象. 傳遞給傳遞給目目標(biāo)標(biāo)方法,方法,執(zhí)執(zhí)行行 update 操操作作dbupdate()db 從數(shù)據(jù)從數(shù)據(jù)庫庫中中 取出數(shù)據(jù)取出數(shù)據(jù). 表表單單參數(shù)參數(shù)賦值賦值. 傳遞給傳遞給目目標(biāo)標(biāo)方法,方法,執(zhí)執(zhí)行行 update 操操作作dbModelAttribute 在方法定在方法定義義上使用上使用 ModelAttribute 注解注解:Spring MVC在在調(diào)調(diào)用目用目標(biāo)處標(biāo)處理方法前,會先

28、逐個理方法前,會先逐個調(diào)調(diào)用在方法用在方法級級上上標(biāo)標(biāo)注了注了ModelAttribute 的方法。的方法。 在方法的在方法的入?yún)⑶笆褂萌雲(yún)⑶笆褂?ModelAttribute 注解注解: 可以從可以從隱隱含含對對象中象中獲獲取取隱隱含的模型數(shù)據(jù)中含的模型數(shù)據(jù)中獲獲取取對對象,再將象,再將請請求參求參數(shù)數(shù)綁綁定到定到對對象中,再象中,再傳傳入入?yún)⑷肴雲(yún)?將方法入?yún)⒎椒ㄈ雲(yún)ο筇砑拥侥P椭邢筇砑拥侥P椭杏蒘essionAttributes引發(fā)的異常org.springframework.web.HttpSessionRequiredException: Session attribute u

29、ser required - not found in session 如果在處理類定義處標(biāo)注了SessionAttributes(“xxx”),則 嘗試從會話中獲取該屬性,并將其賦給該入?yún)?,然后再?請求消息填充該入?yún)ο?。如果在會如果在會話話中找不到中找不到對?yīng)對應(yīng)的屬的屬 性,性,則則拋出拋出 HttpSessionRequiredException 異異常常如何避免SessionAttributes引發(fā)的異常ControllerRequestMapping(/user)SessionAttributes(“user”) public class UserController Model

30、Attribute(user) public User getUser()User user = new User(); return user;RequestMapping(value = /handle71)public String handle71(ModelAttribute(“user”) User user).RequestMapping(value = /handle72)public String handle72(ModelMap modelMap,SessionStatus sessionStatus).該該方法會往方法會往隱隱含模型中添加含模型中添加一一個名個名為為us

31、er的模型屬性的模型屬性內(nèi)容概要SpringMVC 概述SpringMVC 的 HelloWorld使用 RequestMapping 映射請求映射請求參數(shù) & 請求頭處理模型數(shù)據(jù)視圖視圖和和視圖視圖解析器解析器RESTful CRUDSpringMVC 表單標(biāo)簽 &處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換 & 數(shù)據(jù)格式化 & 數(shù)據(jù)校驗處理 JSON:使用 HttpMessageConverter國際化文件的上傳使用攔截器異常處理SpringMVC 運(yùn)行流程在 Spring 的環(huán)境下使用SpringMVCSpringMVC 對比 Struts2SpringMVC如何解析視圖View

32、ViewResolver視圖對視圖對象象JSP/JSTL/PDF.請請求求處處理方法返回理方法返回值類值類型型StringModelAndViewModelAndViewherServletherServletAnnotationMethodHandlerAdapterAnnotationMethodHandlerAdapterServletHandlerMethodInvokerServletHandlerMethodInvokerUserHandlerUserHandlerInternalResourceViewResolverInternalResourceViewResolverInt

33、ernalResourceViewInternalResourceView2: handle3: invokeHandlerMethod4: loginModelAndView 對象5: getModelAndView6: processDispatchResult7: resolveViewName8: resolveViewName渲染視圖9: render10: exp11: for調(diào)用目標(biāo)處理器的目標(biāo)方法由視圖解析器解析邏輯視圖到物理視圖把目標(biāo)方法返回值轉(zhuǎn)為視圖和視圖解析器請求處理方法執(zhí)行完成后,最終返回一個 ModelAndView 對象。對于那些返回 String,View 或 M

34、odeMap 等類型的 處理方法,Spring MVC 也會在內(nèi)部將它也會在內(nèi)部將它們們裝配成一個裝配成一個 ModelAndView 對對象象,它包含了邏輯名和模型對象的視圖 Spring MVC 借助視圖視圖解析器解析器(ViewResolver)得到最終 的視圖對象(View),最終的視圖可以是 JSP ,也可能是 Excel、JFreeChart等各種表現(xiàn)形式的視圖 對于最終究竟采取何種視圖對象對模型數(shù)據(jù)進(jìn)行渲染,處 理器并不關(guān)心,處理器工作重點聚焦在生產(chǎn)模型數(shù)據(jù)的工 作上,從而實現(xiàn) MVC 的充分解耦視圖視圖視圖的作用是渲染模型數(shù)據(jù),將模型里的數(shù)據(jù)以某種形式呈現(xiàn)給客戶。為了實現(xiàn)視圖模

35、型和具體實現(xiàn)技術(shù)的解耦,Spring 在 org.springframework.web.servlet 包中定義了一個高度抽象的 View 接口:視圖對視圖對象由象由視圖視圖解析器解析器負(fù)責(zé)實負(fù)責(zé)實例化例化。由于視圖是無狀無狀態(tài)態(tài)的,所以他們不會有線線程安全程安全的問題常用的視圖實現(xiàn)類視圖解析器SpringMVC 為邏輯視圖名的解析提供了不同的策略,可 以在 Spring WEB 上下文中配置一配置一種種或多或多種種解析策略解析策略,并并 指定他指定他們們之之間間的先后的先后順順序序。每一種映射策略對應(yīng)一個具體 的視圖解析器實現(xiàn)類。視圖解析器的作用比較單一:將邏輯視圖解析為一個具體 的視圖對

36、象。所有的視圖解析器都必須實現(xiàn) ViewResolver 接口:常用的視圖解析器實現(xiàn)類程序員可以選擇一種視圖解析器或混用多種視圖解析器每個視圖解析器都實現(xiàn)了 Ordered 接口并開放出一個 order 屬性,可可 以通以通過過 order 屬性指定解析器的屬性指定解析器的優(yōu)優(yōu)先先順順序序,order越小越小優(yōu)優(yōu)先先級級越高越高。SpringMVC 會按視圖解析器順序的優(yōu)先順序?qū)壿嬕晥D名進(jìn)行解 析,直到解析成功并返回視圖對象,否則將拋出 ServletException 異 常InternalResourceViewResolverJSP 是最常見的視圖技術(shù),可以使用InternalReso

37、urceViewResolver 作為視圖解析器:/WEB-INF/pages/user/createSucess.jspInternalResourceViewResolver若項目中使用了 JSTL,則 SpringMVC 會自動把視圖由InternalResourceView 轉(zhuǎn)為 JstlView若使用 JSTL 的 fmt 標(biāo)簽則需要在 SpringMVC 的配置文件中配置國配置國際際 化化資資源文件源文件若希望直接響應(yīng)通過 SpringMVC 渲染的頁面,可以使用 mvc:view- controller 標(biāo)簽實現(xiàn)Excel 視圖若希望使用 Excel 展示數(shù)據(jù)列表,僅需要擴(kuò)展 S

38、pringMVC 提供的 AbstractExcelView 或 AbstractJExcel View 即可。實現(xiàn) buildExcelDocument() 方法,在方法中使用模型數(shù)據(jù)對象構(gòu)建 Excel 文檔就可以 了。 AbstractExcelView 基于基于 POI API,而AbstractJExcelView 是基于 JExcelAPI 的。視圖對視圖對象需要配置象需要配置 IOC 容器中的一個容器中的一個 Bean,使用,使用 BeanNameViewResolver 作作為視圖為視圖解析器即可解析器即可若希望直接在瀏覽器中直接下載 Excel 文檔,則可以設(shè)置 響應(yīng)頭 Co

39、ntent-Disposition 的值為 attachment;filename=xxx.xls關(guān)于重定向一般情況下,控制器方法返回字符串類型的值會被當(dāng)成邏 輯視圖名處理 如果返回的字符串中帶 forward: 或或 redirect: 前綴 時,SpringMVC 會對他們進(jìn)行特殊處理:將 forward: 和 redirect: 當(dāng)成指示符,其后的字符串作為 URL 來處理 redirect:success.jsp:會完成一個到 success.jsp 的重定向的操作 forward:success.jsp:會完成一個到 success.jsp 的轉(zhuǎn)發(fā)操作內(nèi)容概要SpringMVC 概述

40、SpringMVC 的 HelloWorld使用 RequestMapping 映射請求映射請求參數(shù) & 請求頭處理模型數(shù)據(jù)視圖和視圖解析器RESTful CRUDSpringMVC 表單標(biāo)簽 &處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換 & 數(shù)據(jù)格式化 & 數(shù)據(jù)校驗處理 JSON:使用 HttpMessageConverter國際化文件的上傳使用攔截器異常處理SpringMVC 運(yùn)行流程在 Spring 的環(huán)境下使用SpringMVCSpringMVC 對比 Struts2RESTful SpringMVC CRUD 1. 顯示所有員工信息 URI:emps 請求方式:GET 顯示

41、效果RESTful SpringMVC CRUD 2. 添加所有員工信息 顯示添加頁面: URI:emp 請求方式:GET顯示效果添加員工信息: URI:emp 請求方式:POST 顯示效果:完成添加,重定向到 list 頁面。RESTful SpringMVC CRUD 3. 刪除操作 URL:emp/id 請求方式:DELETE 刪除后效果:對應(yīng)記錄從數(shù)據(jù)表中刪除 4. 修改操作:lastName 不可修改不可修改! 顯示修改頁面: URI:emp/id 請求方式:GET 顯示效果:回顯表單。 修改員工信息: URI:emp 請求方式:PUT 顯示效果:完成修改,重定向到 list 頁面。

42、RESTful SpringMVC CRUD 相關(guān)的類: 實體類:Employee、Department Handler:EmployeeHandler Dao:EmployeeDao、DepartmentDao 相關(guān)的頁面 list.jsp input.jsp edit.jspupdate() 從數(shù)據(jù)從數(shù)據(jù)庫庫中中 取出數(shù)據(jù)取出數(shù)據(jù). 表表單單參數(shù)參數(shù)賦值賦值. 傳遞給傳遞給目目標(biāo)標(biāo)方法方法內(nèi)容概要SpringMVC 概述SpringMVC 的 HelloWorld使用 RequestMapping 映射請求映射請求參數(shù) & 請求頭處理模型數(shù)據(jù)視圖和視圖解析器RESTful CRUD

43、SpringMVC 表表單標(biāo)簽單標(biāo)簽 &處理靜態(tài)資源數(shù)據(jù)轉(zhuǎn)換 & 數(shù)據(jù)格式化 & 數(shù)據(jù)校驗處理 JSON:使用 HttpMessageConverter國際化文件的上傳使用攔截器異常處理SpringMVC 運(yùn)行流程在 Spring 的環(huán)境下使用SpringMVCSpringMVC 對比 Struts2使用 Spring 的表單標(biāo)簽 通過 SpringMVC 的表表單標(biāo)簽單標(biāo)簽可以實現(xiàn)將模型數(shù)據(jù) 中的屬性和 HTML 表單元素相綁定,以實現(xiàn)表單 數(shù)據(jù)更便捷更便捷編輯編輯和表和表單值單值的回的回顯顯form 標(biāo)簽 一般情況下,通通過過 GET 請請求求獲獲取表取表單頁單頁面

44、面,而通通過過 POST 請請求提交表求提交表單頁單頁面面,因此因此獲獲取表取表單頁單頁面和提交表面和提交表單單 頁頁面的面的 URL 是相同的是相同的。只要只要滿滿足足該該最佳條件的契最佳條件的契 約約, 標(biāo)簽標(biāo)簽就無需通就無需通過過 action 屬性指定表屬性指定表單單 提提交的交的 URL 可以通過 modelAttribute 屬性指定綁定的模型屬性,若 沒有指定該屬性,則默認(rèn)從 request 域?qū)ο笾凶x取 command 的表單 bean,如果該屬性值也不存在,則會 發(fā)生錯誤。表單標(biāo)簽 SpringMVC 提供了多個表單組件標(biāo)簽,如、 等,用以綁定表單字段的 屬性值,它們的共有屬

45、性如下:path:表表單單字段,字段,對應(yīng)對應(yīng) html 元素的元素的 name 屬性,支持屬性,支持級聯(lián)級聯(lián)屬性屬性 htmlEscape:是否對表單值的 HTML 特殊字符進(jìn)行轉(zhuǎn)換,默認(rèn)值 為 true cssClass:表單組件對應(yīng)的 CSS 樣式類名 cssErrorClass:表單組件的數(shù)據(jù)存在錯誤時,采取的 CSS 樣式表單標(biāo)簽 form:input、form:password、form:hidden、form:textarea:對應(yīng) HTML 表單的 text、password、hidden、textarea標(biāo)簽 form:radiobutton:單選框組件標(biāo)簽,當(dāng)表單 bean

46、 對應(yīng)的 屬性值和 value 值相等時,單選框被選中 form:radiobuttons:單選框組標(biāo)簽,用于構(gòu)造多個單選框 items:可以是一個 List、String 或 Map itemValue:指定 radio 的 value 值??梢允羌现?bean 的一個 屬性值 itemLabel:指定 radio 的 label 值 delimiter:多個單選框可以通過 delimiter 指定分隔符表單標(biāo)簽 form:checkbox:復(fù)選框組件。用于構(gòu)造單個復(fù)選框 form:checkboxs:用于構(gòu)造多個復(fù)選框。使用方式同 form:radiobuttons 標(biāo)簽 form:se

47、lect:用于構(gòu)造下拉框組件。使用方式同 form:radiobuttons 標(biāo)簽 form:option:下拉框選項組件標(biāo)簽。使用方式同 form:radiobuttons 標(biāo)簽 form:errors:顯示表單組件或數(shù)據(jù)校驗所對應(yīng)的錯誤 :顯示表單所有的錯誤 :顯示所有以 user 為前綴的屬性對應(yīng)的錯誤 :顯示特定表單對象屬性的錯誤內(nèi)容概要SpringMVC 概述SpringMVC 的 HelloWorld使用 RequestMapping 映射請求映射請求參數(shù) & 請求頭處理模型數(shù)據(jù)視圖和視圖解析器RESTful CRUDSpringMVC 表單標(biāo)簽 & 處處理靜理靜態(tài)

48、資態(tài)資源源數(shù)據(jù)轉(zhuǎn)換 & 數(shù)據(jù)格式化 & 數(shù)據(jù)校驗處理 JSON:使用 HttpMessageConverter國際化文件的上傳使用攔截器異常處理SpringMVC 運(yùn)行流程在 Spring 的環(huán)境下使用SpringMVCSpringMVC 對比 Struts2處理靜態(tài)資源優(yōu)雅的 REST 風(fēng)格的資源URL 不希望帶 .html 或 .do 等后綴若將 DispatcherServlet 請求映射配置為 /,則 Spring MVC 將捕獲 WEB 容器的所有請求,包括靜包括靜態(tài)資態(tài)資源的源的請請求,求, SpringMVC 會將他會將他 們們當(dāng)成一個普通當(dāng)成一個普通請請求求處處

49、理,因找不到理,因找不到對應(yīng)處對應(yīng)處理器將理器將導(dǎo)導(dǎo)致致錯誤錯誤??梢栽?SpringMVC 的配置文件中配置 的方式解決靜態(tài)資源的問題: 將在 SpringMVC 上下文中定義一個 DefaultServletHttpRequestHandler,它會對進(jìn)入 DispatcherServlet 的 請求進(jìn)行篩查,如果發(fā)現(xiàn)是沒有經(jīng)過映射的請求,就將該請求交由 WEB 應(yīng)用服務(wù)器默認(rèn)的 Servlet 處理,如果不是靜態(tài)資源的請求,才由 DispatcherServlet 繼續(xù)處理一般 WEB 應(yīng)用服務(wù)器默認(rèn)的 Servlet 的名稱都是 default。若所使用的 WEB 服務(wù)器的默認(rèn) Ser

50、vlet 名稱不是 default,則需要通過 default- servlet-name 屬性顯式指定內(nèi)容概要SpringMVC 概述SpringMVC 的 HelloWorld使用 RequestMapping 映射請求映射請求參數(shù) & 請求頭處理模型數(shù)據(jù)視圖和視圖解析器RESTful CRUDSpringMVC 表單標(biāo)簽 &處理靜態(tài)資源數(shù)據(jù)數(shù)據(jù)轉(zhuǎn)換轉(zhuǎn)換 & 數(shù)據(jù)格式化 & 數(shù)據(jù)校驗處理 JSON:使用 HttpMessageConverter國際化文件的上傳使用攔截器異常處理SpringMVC 運(yùn)行流程在 Spring 的環(huán)境下使用SpringMVCSpr

51、ingMVC 對比 Struts2數(shù)據(jù)綁定流程 1. Spring MVC 主框架將 ServletRequest對象及目標(biāo)方 法的入?yún)嵗齻鬟f給 WebDataBinderFactory 實例,以創(chuàng) 建 DataBinder 實例對象 2. DataBinder 調(diào)用裝配在 Spring MVC 上下文中的 ConversionService 組件進(jìn)行數(shù)據(jù)數(shù)據(jù)類類型型轉(zhuǎn)換轉(zhuǎn)換、數(shù)據(jù)格式、數(shù)據(jù)格式 化化工作。將 Servlet 中的請求信息填充到入?yún)ο笾?3. 調(diào)用 Validator 組件對已經(jīng)綁定了請求消息的入?yún)ο?進(jìn)行數(shù)據(jù)合法性校驗,并最終生成數(shù)據(jù)綁定結(jié)果 BindingData 對

52、象 4. Spring MVC 抽取 BindingResult 中的入?yún)ο蠛托r?錯誤對象,將它們賦給處理方法的響應(yīng)入?yún)?shù)據(jù)綁定流程Spring MVC 通過反射機(jī)制對目標(biāo)處理方法進(jìn)行解析,將請 求消息綁定到處理方法的入?yún)⒅?。?shù)據(jù)綁定的核心部件是 DataBinder,運(yùn)行機(jī)制如下:DataBinderConversionServiceValidator345處理方法入?yún)ο筇幚矸椒ㄈ雲(yún)ο驜indingResult處理方法的簽名1ServletRequest2數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換/格式化格式化數(shù)據(jù)校驗數(shù)據(jù)校驗數(shù)據(jù)綁定流程數(shù)據(jù)綁定流程數(shù)據(jù)轉(zhuǎn)換Spring MVC 上下文中內(nèi)建了很多轉(zhuǎn)換

53、器,可完成大多數(shù) Java 類型的轉(zhuǎn)換工作。ConversionService converters =java.lang.Boolean - java.lang.String : org.springframework.core.convert.support.ObjectToStringConverterf874cajava.lang.Character - java.lang.Number : CharacterToNumberFactoryf004c9java.lang.Character - java.lang.String : ObjectToStringConverter68a9

54、61java.lang.Enum - java.lang.String : EnumToStringConverter12f060ajava.lang.Number - java.lang.Character : NumberToCharacterConverter1482ac5java.lang.Number - java.lang.Number : NumberToNumberConverterFactory126c6fjava.lang.Number - java.lang.String : ObjectToStringConverter14888e8java.lang.String -

55、 java.lang.Boolean : StringToBooleanConverter1ca6626java.lang.String - java.lang.Character : StringToCharacterConverter1143800java.lang.String - java.lang.Enum : StringToEnumConverterFactory1bba86ejava.lang.String - java.lang.Number : StringToNumberConverterFactory18d2c12java.lang.String - java.util

56、.Locale : StringToLocaleConverter3598e1java.lang.String - java.util.Properties : StringToPropertiesConverterc90828java.lang.String - java.util.UUID : StringToUUIDConvertera42f23java.util.Locale - java.lang.String : ObjectToStringConverterc7e20ajava.util.Properties - java.lang.String : PropertiesToSt

57、ringConverter367a7fjava.util.UUID - java.lang.String : ObjectToStringConverter112b07f 自定義類型轉(zhuǎn)換器 ConversionService 是 Spring 類型轉(zhuǎn)換體系的核心接口。 可以利用 ConversionServiceFactoryBean 在 Spring 的 IOC 容器中定義一個 ConversionService. Spring 將自將自動識別動識別出出 IOC 容器中的容器中的 ConversionService,并在,并在 Bean 屬性配置及屬性配置及 Spring MVC 處處理方法

58、入?yún)⒗矸椒ㄈ雲(yún)⒔壗壎ǖ榷ǖ葓鰣龊鲜褂盟鲜褂盟M(jìn)進(jìn)行數(shù)據(jù)的行數(shù)據(jù)的轉(zhuǎn)換轉(zhuǎn)換 可通可通過過 ConversionServiceFactoryBean 的的 converters 屬屬性性 注冊自定注冊自定義義的的類類型型轉(zhuǎn)換轉(zhuǎn)換器器Spring 支持的轉(zhuǎn)換器Spring 定義了 3 種類型的轉(zhuǎn)換器接口,實現(xiàn)任意一個轉(zhuǎn)換 器接口都可以作為自定義轉(zhuǎn)換器注冊到 ConversionServiceFactroyBean 中:Converter:將 S 類型對象轉(zhuǎn)為 T 類型對象 ConverterFactory:將相同系列多個 “同質(zhì)” Converter 封裝在一 起。如果希望將一種類型的對象轉(zhuǎn)換為另

59、一種類型及其子類的對 象(例如將 String 轉(zhuǎn)換為 Number 及 Number 子類(Integer、Long、Double 等)對象)可使用該轉(zhuǎn)換器工廠類 GenericConverter:會根據(jù)源類對象及目標(biāo)類對象所在的宿主類中的上下文信息進(jìn)行類型轉(zhuǎn)換自定義轉(zhuǎn)換器示例 會將自定義的 ConversionService 注冊到 Spring MVC 的上下文中關(guān)于 mvc:annotation-driven 會自動注 冊RequestMappingHandlerMapping、RequestMappingHandlerAdapter 與ExceptionHandlerExceptio

60、nResolver 三個bean。 還將提供以下支持: 支持使用 ConversionService 實例對表單參數(shù)進(jìn)行類型轉(zhuǎn)換 支持使用 NumberFormat annotation、DateTimeFormat注解完成數(shù)據(jù)類型的格式化支持使用 Valid 注解對 JavaBean 實例進(jìn)行 JSR 303 驗證 支持使用 RequestBody 和 ResponseBody 注解既沒有配置既沒有配置 也沒有配置也沒有配置 配置了配置了 但沒有配置但沒有配置 既配置了既配置了 又配置又配置 InitBinder 由 InitBinder 標(biāo)識的方法,可以可以對對 WebDataBinder 對對 象象進(jìn)進(jìn)行初始化行初始化。WebDataBinder 是 DataBinder 的子類,用 于完成由表單字段到 JavaBean 屬性的綁定InitBinder方法不能有返回方法不能有返回值值,它必須聲明為void。 InitBinder方法的參數(shù)通常是是方法的參數(shù)通常是是 WebDataBinder數(shù)據(jù)綁定流程 Spring 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論