Web應(yīng)用開(kāi)發(fā)-第17章-基于注解的控制器課件_第1頁(yè)
Web應(yīng)用開(kāi)發(fā)-第17章-基于注解的控制器課件_第2頁(yè)
Web應(yīng)用開(kāi)發(fā)-第17章-基于注解的控制器課件_第3頁(yè)
Web應(yīng)用開(kāi)發(fā)-第17章-基于注解的控制器課件_第4頁(yè)
Web應(yīng)用開(kāi)發(fā)-第17章-基于注解的控制器課件_第5頁(yè)
已閱讀5頁(yè),還剩45頁(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)介

第17章基于注解的控制器第17章基于注解的控制器10117.1SpringMVC常用注解02030417.2在SpringMVC中處理模型數(shù)據(jù)17.3基于注解的控制器示例117.4基于注解的控制器示例20117.1SpringMVC常用注解020304172本章導(dǎo)讀從Spring2.5開(kāi)始引入注解,使用注解的方式可以減少XML的配置,也提供了自動(dòng)裝配的功能,使得開(kāi)發(fā)工作變得更為輕松,這實(shí)際上是“約定優(yōu)于配置”的開(kāi)發(fā)原則。本章導(dǎo)讀從Spring2.5開(kāi)始引入注解,使用注解的方30117.1SpringMVC常用注解使用基于注解的控制器有以下兩個(gè)優(yōu)點(diǎn):(1)一個(gè)使用基于注解的控制器可以處理多個(gè)動(dòng)作,而一個(gè)實(shí)現(xiàn)了Controller接口的控制器只能處理一個(gè)動(dòng)作。這就允許將相關(guān)的操作寫(xiě)在同一個(gè)控制器類(lèi)中,從而減少應(yīng)用程序中類(lèi)的數(shù)量。(2)基于注解的控制器的請(qǐng)求映射不需要存儲(chǔ)在配置文件中。使用RequestMapping注解類(lèi)型,可以對(duì)一個(gè)方法進(jìn)行請(qǐng)求處理。0117.1SpringMVC常用注解使用基于注解的控40117.1SpringMVC常用注解org.springframework.stereotype.Controller

注解類(lèi)型用于指示Spring類(lèi)的實(shí)例是一個(gè)控制器,其注解形式是@Controller,SpringMVC使用掃描機(jī)制查找應(yīng)用程序中所有基于注解的控制器類(lèi)(使用@Controller標(biāo)記的類(lèi))。分發(fā)處理器會(huì)掃描使用了該注解的類(lèi)的方法,并檢測(cè)該方法是否使用了@RequestMapping注解,而使用@RequestMapping注解的方法才是真正處理請(qǐng)求的處理器。為了保證Spring能找到你的控制器,需要在SpringMVC的配置文件中添加相應(yīng)的掃描配置信息。17.1.1@Controller和@RequestMapping0117.1SpringMVC常用注解org.spri50117.1SpringMVC常用注解@RequestMapping注解可以在控制器類(lèi)的級(jí)別和(或)控制器類(lèi)中的方法的級(jí)別上使用。在類(lèi)的級(jí)別上的注解會(huì)將一個(gè)特定請(qǐng)求或者請(qǐng)求模式映射到一個(gè)控制器之上。之后還可以另外添加方法級(jí)別的注解來(lái)進(jìn)一步指定到處理方法的映射關(guān)系。17.1.1@Controller和@RequestMapping0117.1SpringMVC常用注解@Request60117.1SpringMVC常用注解

SpringMVC還定義了處理器的攔截器,當(dāng)啟動(dòng)SpringMVC的時(shí)候,SpringMVC就會(huì)解析@Controller中的@RequestMapping的配置,再結(jié)合所配置的攔截器,這樣它就會(huì)組成多個(gè)攔截器和一個(gè)控制器的形式,存放到一個(gè)HandlerMapping中去。當(dāng)請(qǐng)求來(lái)到服務(wù)器,首先是通過(guò)請(qǐng)求信息找到對(duì)應(yīng)的HandlerMapping,進(jìn)而可以找到對(duì)應(yīng)的攔截器和處理器,這樣就能夠運(yùn)行對(duì)應(yīng)的控制器和攔截器。17.1.1@Controller和@RequestMapping0117.1SpringMVC常用注解Spring70117.1SpringMVC常用注解

將依賴注入到SpringMVC控制器的最簡(jiǎn)單方法是通過(guò)注解@Autowired到字段(屬性)或方法。Autowired注解類(lèi)型屬于org.springframework.beans.factory.annotation包。被定位于實(shí)現(xiàn)業(yè)務(wù)邏輯功能的Service,為了能被作為依賴注入,類(lèi)必須要聲明為@Service,該類(lèi)型是org.springframework.stereotype的成員。Service注解類(lèi)型指示類(lèi)是一個(gè)服務(wù)。此外,在SpringMVC配置文件中,還需要添加自動(dòng)掃描控制器(Contoller)所在的包以及服務(wù)(Service)所在的包的代碼。17.1.2@Autowired和@Service0117.1SpringMVC常用注解將依賴注入到80117.1SpringMVC常用注解

@RequestParam用于將請(qǐng)求參數(shù)區(qū)數(shù)據(jù)映射到功能處理方法的參數(shù)上。例如下面的示例代碼:17.1.3@RequestParam和@PathVariable

這里@RequestParam注解可以用來(lái)提取請(qǐng)求參數(shù)區(qū)數(shù)據(jù)名為“num”的String類(lèi)型的參數(shù),并將之作為輸入?yún)?shù)傳給number。0117.1SpringMVC常用注解@Reques90117.1SpringMVC常用注解

這里請(qǐng)求參數(shù)區(qū)數(shù)據(jù)可以是URL請(qǐng)求中的參數(shù),也可以是提交表單中的參數(shù)。例如針對(duì)前一種可假設(shè)URL請(qǐng)求如下:http://localhost:8080/context/accounts/show?num=168針對(duì)后一種可假設(shè)提交表單如下:17.1.3@RequestParam和@PathVariable0117.1SpringMVC常用注解這里請(qǐng)求參數(shù)區(qū)100117.1SpringMVC常用注解

@PathVariable可以用來(lái)映射URL中的占位符到目標(biāo)方法的參數(shù)中。例如有以下的代碼:17.1.3@RequestParam和@PathVariable

如請(qǐng)求的URL為“控制器URL/users/123/topics/456”,則自動(dòng)將URL中模板變量{userId}和{topicId}綁定到通過(guò)@PathVariable注解的同名參數(shù)上,即入?yún)⒑髐serId=123、topicId=456。0117.1SpringMVC常用注解@PathVa110117.1SpringMVC常用注解

考慮瀏覽器和服務(wù)器之間的交互。當(dāng)用戶第1次訪問(wèn)服務(wù)器時(shí),服務(wù)器會(huì)在響應(yīng)消息中增加Set-Cookie頭字段,將用戶信息以Cookie的形式發(fā)送給瀏覽器。一旦用戶瀏覽器接受了服務(wù)器發(fā)送的Cookie信息,就會(huì)將它保存在瀏覽器的緩沖區(qū)中。這樣,當(dāng)瀏覽器后續(xù)訪問(wèn)該服務(wù)器時(shí),都會(huì)在請(qǐng)求信息中將用戶信息以Cookie的形式發(fā)送給Web服務(wù)器,從而使服務(wù)器端分辨出當(dāng)前請(qǐng)求是由哪個(gè)用戶發(fā)出的。使用@Cookie注解可以將請(qǐng)求的Cookie數(shù)據(jù)映射到功能處理方法的參數(shù)上。17.1.4@CookieValue和@RequestHeader0117.1SpringMVC常用注解考慮瀏覽器和服120117.1SpringMVC常用注解org.springframework.web.bind.annotation.RequestHeader注解類(lèi)型用于將請(qǐng)求的頭信息區(qū)數(shù)據(jù)映射到功能處理方法的參數(shù)上。在控制器的方法參數(shù)中使用@RequestHeader注解,能夠從Http請(qǐng)求頭中提取指定的某個(gè)請(qǐng)求頭,可以說(shuō)等價(jià)于HttpServletRequest.getHeader(String)。17.1.4@CookieValue和@RequestHeader0117.1SpringMVC常用注解org.spri130217.2在SpringMVC中處理模型數(shù)據(jù)ModelAndView有一個(gè)類(lèi)型為ModelMap的屬性model,而ModelMap繼承了LinkedHashMap<String,Object>,因此可以存放各種鍵值對(duì)。為了進(jìn)一步定義數(shù)據(jù)模型功能,Spring還創(chuàng)建了類(lèi)ExtendedModelMap,這個(gè)類(lèi)實(shí)現(xiàn)了數(shù)據(jù)模型定義的Model接口,如圖17-1所示,并且還在此基礎(chǔ)上派生了關(guān)于數(shù)據(jù)綁定的類(lèi)BindingAwareModelMap。17.2.1數(shù)據(jù)模型0217.2在SpringMVC中處理模型數(shù)據(jù)Mod140217.2在SpringMVC中處理模型數(shù)據(jù)在控制器的方法中,可以把ModelAndView、Model、ModelMap作為參數(shù)。在SpringMVC運(yùn)行的時(shí)候,會(huì)自動(dòng)初始化它們,因此可以選擇ModelMap或者M(jìn)odel作為數(shù)據(jù)模型。事實(shí)上SpringMVC創(chuàng)建的是一個(gè)BindingAwareModelMap實(shí)例。ModelAndView初始化后,model屬性為空,當(dāng)調(diào)用它增加數(shù)據(jù)模型的方法后,會(huì)自動(dòng)創(chuàng)建一個(gè)ModelMap實(shí)例,用以保存數(shù)據(jù)模型。17.2.1數(shù)據(jù)模型0217.2在SpringMVC中處理模型數(shù)據(jù)在控制150217.2在SpringMVC中處理模型數(shù)據(jù)SpringMVC提供了以下幾種途徑輸出模型數(shù)據(jù):17.2.1數(shù)據(jù)模型0217.2在SpringMVC中處理模型數(shù)據(jù)Spr160217.2在SpringMVC中處理模型數(shù)據(jù)可將控制器處理方法的返回值設(shè)為ModelAndView,ModelAndView中既可存放視圖信息,也可存放模型數(shù)據(jù)信息。SpringMVC會(huì)把ModelAndView的model中數(shù)據(jù)放入到request域?qū)ο笾小?7.2.2ModelAndView0217.2在SpringMVC中處理模型數(shù)據(jù)可將控170217.2在SpringMVC中處理模型數(shù)據(jù)SpringMVC在調(diào)用方法前會(huì)創(chuàng)建一個(gè)隱含的模型對(duì)象作為模型數(shù)據(jù)的存儲(chǔ)容器(事實(shí)上這個(gè)隱含的模型對(duì)象是一個(gè)BindingAwareModelMap類(lèi)型的對(duì)象,通過(guò)后面的例子我們可以驗(yàn)證),如果方法的入?yún)镸ap、Model或者M(jìn)odelMap類(lèi)型,SpringMVC會(huì)將隱含模型的引用傳遞給這些入?yún)ⅲㄒ驗(yàn)锽indingAwareModelMap繼承或?qū)崿F(xiàn)了Map、Model或者M(jìn)odelMap)。在方法體內(nèi),開(kāi)發(fā)者可以通過(guò)這個(gè)入?yún)?duì)象訪問(wèn)到模型中的所有數(shù)據(jù),也可以向模型中添加新的屬性數(shù)據(jù),SpringMVC也會(huì)把Map中數(shù)據(jù)放入到request域?qū)ο笾小?7.2.3Map及Model0217.2在SpringMVC中處理模型數(shù)據(jù)Spr180217.2在SpringMVC中處理模型數(shù)據(jù)上面介紹的兩種方式,SpringMVC都是將數(shù)據(jù)存放在request域?qū)ο笾?,若希望在多個(gè)請(qǐng)求之間共用某個(gè)模型屬性數(shù)據(jù),則可以在控制器類(lèi)上標(biāo)注一個(gè)@SessionAttributes注解(該注解只能放在類(lèi)的上面,而不能修飾放方法),SpringMVC將把模型中對(duì)應(yīng)的屬性暫存到HttpSession中。@SessionAttributes除了可以通過(guò)屬性名指定需要放到會(huì)話中的屬性外,還可以通過(guò)模型屬性的對(duì)象類(lèi)型指定哪些模型屬性需要放到會(huì)話中。17.2.4@SessionAttributes0217.2在SpringMVC中處理模型數(shù)據(jù)上面介190217.2在SpringMVC中處理模型數(shù)據(jù)SpringMVC在每次調(diào)用請(qǐng)求處理方法時(shí),都會(huì)創(chuàng)建Model類(lèi)型的一個(gè)實(shí)例。若打算使用該實(shí)例,則可以在方法中添加一個(gè)Model類(lèi)型的參數(shù)。除此之外,我們還可以使用在方法中添加org.springframework.web.bind.annotation.ModelAttribute注解類(lèi)型將請(qǐng)求參數(shù)綁定到Model對(duì)象。17.2.5@ModelAttribute0217.2在SpringMVC中處理模型數(shù)據(jù)Spr200217.2在SpringMVC中處理模型數(shù)據(jù)@ModelAttribute注解只支持一個(gè)屬性value,類(lèi)型為String,表示綁定的屬性名稱??梢杂聾ModelAttribute來(lái)注解方法參數(shù)或方法。帶@ModelAttribute注解的方法(請(qǐng)求方法),會(huì)將其輸入的或創(chuàng)建的參數(shù)對(duì)象添加到Model對(duì)象中(若方法中沒(méi)有顯式地增加)。17.2.5@ModelAttribute0217.2在SpringMVC中處理模型數(shù)據(jù)@Mo210217.2在SpringMVC中處理模型數(shù)據(jù)@ModelAttribute還可以標(biāo)注一個(gè)非請(qǐng)求的處理方法。被@ModelAttribute注解的方法,會(huì)在每次調(diào)用該控制器類(lèi)的請(qǐng)求處理方法時(shí)被調(diào)用。SpringMVC會(huì)在調(diào)用請(qǐng)求處理方法之前調(diào)用帶有@ModelAttribute注解的方法。帶@ModelAttribute注解的方法可以返回一個(gè)對(duì)象或一個(gè)void類(lèi)型。如果返回一個(gè)對(duì)象,則返回對(duì)象會(huì)自動(dòng)添加到Model中;若方法返回void,則還必須添加一個(gè)Model類(lèi)型的參數(shù),并自行將實(shí)例添加到Model中。17.2.5@ModelAttribute0217.2在SpringMVC中處理模型數(shù)據(jù)@Mo220317.3基于注解的控制器示例1本示例著是對(duì)前面章節(jié)中SpringMVC_Basic_Demo2工程的改寫(xiě)。由于使用注解類(lèi)型來(lái)開(kāi)發(fā),一個(gè)控制器類(lèi)可以包含多個(gè)請(qǐng)求處理方法。原本在SpringMVC_Basic_Demo2工程中的兩個(gè)控制器AddBookController和SaveBookController,這里用一個(gè)控制器替代就可以了,這個(gè)控制器是BookController。而控制器BookController包含了兩個(gè)請(qǐng)求方法,其請(qǐng)求映射分別是/book_add和/book_save。0317.3基于注解的控制器示例1本示例著是對(duì)前面章節(jié)中230417.4基于注解的控制器示例2本示例著重說(shuō)明:①如何使用@Autowired和@Service進(jìn)行依賴注入;②Spring如何通過(guò)Flash屬性進(jìn)行重定向傳值;③@PathVariable使用;④Spring組件自動(dòng)掃描機(jī)制。0417.4基于注解的控制器示例2本示例著重說(shuō)明:24本章小結(jié)本章主要介紹了SpringMVC中的一些常用注解的使用,這里包括@Controller和@RequestMapping、@Autowired和@Service、@RequestParam和@PathVariable、@CookieValue和@RequestHeader、@SessionAttributes和@ModelAttribute、@Resource和@Qualifier、@Repository和@Component,以及SpringMVC中如何處理模型數(shù)據(jù)和重定向等內(nèi)容。。本章小結(jié)本章主要介紹了SpringMVC中的一些常用注25第17章基于注解的控制器第17章基于注解的控制器260117.1SpringMVC常用注解02030417.2在SpringMVC中處理模型數(shù)據(jù)17.3基于注解的控制器示例117.4基于注解的控制器示例20117.1SpringMVC常用注解0203041727本章導(dǎo)讀從Spring2.5開(kāi)始引入注解,使用注解的方式可以減少XML的配置,也提供了自動(dòng)裝配的功能,使得開(kāi)發(fā)工作變得更為輕松,這實(shí)際上是“約定優(yōu)于配置”的開(kāi)發(fā)原則。本章導(dǎo)讀從Spring2.5開(kāi)始引入注解,使用注解的方280117.1SpringMVC常用注解使用基于注解的控制器有以下兩個(gè)優(yōu)點(diǎn):(1)一個(gè)使用基于注解的控制器可以處理多個(gè)動(dòng)作,而一個(gè)實(shí)現(xiàn)了Controller接口的控制器只能處理一個(gè)動(dòng)作。這就允許將相關(guān)的操作寫(xiě)在同一個(gè)控制器類(lèi)中,從而減少應(yīng)用程序中類(lèi)的數(shù)量。(2)基于注解的控制器的請(qǐng)求映射不需要存儲(chǔ)在配置文件中。使用RequestMapping注解類(lèi)型,可以對(duì)一個(gè)方法進(jìn)行請(qǐng)求處理。0117.1SpringMVC常用注解使用基于注解的控290117.1SpringMVC常用注解org.springframework.stereotype.Controller

注解類(lèi)型用于指示Spring類(lèi)的實(shí)例是一個(gè)控制器,其注解形式是@Controller,SpringMVC使用掃描機(jī)制查找應(yīng)用程序中所有基于注解的控制器類(lèi)(使用@Controller標(biāo)記的類(lèi))。分發(fā)處理器會(huì)掃描使用了該注解的類(lèi)的方法,并檢測(cè)該方法是否使用了@RequestMapping注解,而使用@RequestMapping注解的方法才是真正處理請(qǐng)求的處理器。為了保證Spring能找到你的控制器,需要在SpringMVC的配置文件中添加相應(yīng)的掃描配置信息。17.1.1@Controller和@RequestMapping0117.1SpringMVC常用注解org.spri300117.1SpringMVC常用注解@RequestMapping注解可以在控制器類(lèi)的級(jí)別和(或)控制器類(lèi)中的方法的級(jí)別上使用。在類(lèi)的級(jí)別上的注解會(huì)將一個(gè)特定請(qǐng)求或者請(qǐng)求模式映射到一個(gè)控制器之上。之后還可以另外添加方法級(jí)別的注解來(lái)進(jìn)一步指定到處理方法的映射關(guān)系。17.1.1@Controller和@RequestMapping0117.1SpringMVC常用注解@Request310117.1SpringMVC常用注解

SpringMVC還定義了處理器的攔截器,當(dāng)啟動(dòng)SpringMVC的時(shí)候,SpringMVC就會(huì)解析@Controller中的@RequestMapping的配置,再結(jié)合所配置的攔截器,這樣它就會(huì)組成多個(gè)攔截器和一個(gè)控制器的形式,存放到一個(gè)HandlerMapping中去。當(dāng)請(qǐng)求來(lái)到服務(wù)器,首先是通過(guò)請(qǐng)求信息找到對(duì)應(yīng)的HandlerMapping,進(jìn)而可以找到對(duì)應(yīng)的攔截器和處理器,這樣就能夠運(yùn)行對(duì)應(yīng)的控制器和攔截器。17.1.1@Controller和@RequestMapping0117.1SpringMVC常用注解Spring320117.1SpringMVC常用注解

將依賴注入到SpringMVC控制器的最簡(jiǎn)單方法是通過(guò)注解@Autowired到字段(屬性)或方法。Autowired注解類(lèi)型屬于org.springframework.beans.factory.annotation包。被定位于實(shí)現(xiàn)業(yè)務(wù)邏輯功能的Service,為了能被作為依賴注入,類(lèi)必須要聲明為@Service,該類(lèi)型是org.springframework.stereotype的成員。Service注解類(lèi)型指示類(lèi)是一個(gè)服務(wù)。此外,在SpringMVC配置文件中,還需要添加自動(dòng)掃描控制器(Contoller)所在的包以及服務(wù)(Service)所在的包的代碼。17.1.2@Autowired和@Service0117.1SpringMVC常用注解將依賴注入到330117.1SpringMVC常用注解

@RequestParam用于將請(qǐng)求參數(shù)區(qū)數(shù)據(jù)映射到功能處理方法的參數(shù)上。例如下面的示例代碼:17.1.3@RequestParam和@PathVariable

這里@RequestParam注解可以用來(lái)提取請(qǐng)求參數(shù)區(qū)數(shù)據(jù)名為“num”的String類(lèi)型的參數(shù),并將之作為輸入?yún)?shù)傳給number。0117.1SpringMVC常用注解@Reques340117.1SpringMVC常用注解

這里請(qǐng)求參數(shù)區(qū)數(shù)據(jù)可以是URL請(qǐng)求中的參數(shù),也可以是提交表單中的參數(shù)。例如針對(duì)前一種可假設(shè)URL請(qǐng)求如下:http://localhost:8080/context/accounts/show?num=168針對(duì)后一種可假設(shè)提交表單如下:17.1.3@RequestParam和@PathVariable0117.1SpringMVC常用注解這里請(qǐng)求參數(shù)區(qū)350117.1SpringMVC常用注解

@PathVariable可以用來(lái)映射URL中的占位符到目標(biāo)方法的參數(shù)中。例如有以下的代碼:17.1.3@RequestParam和@PathVariable

如請(qǐng)求的URL為“控制器URL/users/123/topics/456”,則自動(dòng)將URL中模板變量{userId}和{topicId}綁定到通過(guò)@PathVariable注解的同名參數(shù)上,即入?yún)⒑髐serId=123、topicId=456。0117.1SpringMVC常用注解@PathVa360117.1SpringMVC常用注解

考慮瀏覽器和服務(wù)器之間的交互。當(dāng)用戶第1次訪問(wèn)服務(wù)器時(shí),服務(wù)器會(huì)在響應(yīng)消息中增加Set-Cookie頭字段,將用戶信息以Cookie的形式發(fā)送給瀏覽器。一旦用戶瀏覽器接受了服務(wù)器發(fā)送的Cookie信息,就會(huì)將它保存在瀏覽器的緩沖區(qū)中。這樣,當(dāng)瀏覽器后續(xù)訪問(wèn)該服務(wù)器時(shí),都會(huì)在請(qǐng)求信息中將用戶信息以Cookie的形式發(fā)送給Web服務(wù)器,從而使服務(wù)器端分辨出當(dāng)前請(qǐng)求是由哪個(gè)用戶發(fā)出的。使用@Cookie注解可以將請(qǐng)求的Cookie數(shù)據(jù)映射到功能處理方法的參數(shù)上。17.1.4@CookieValue和@RequestHeader0117.1SpringMVC常用注解考慮瀏覽器和服370117.1SpringMVC常用注解org.springframework.web.bind.annotation.RequestHeader注解類(lèi)型用于將請(qǐng)求的頭信息區(qū)數(shù)據(jù)映射到功能處理方法的參數(shù)上。在控制器的方法參數(shù)中使用@RequestHeader注解,能夠從Http請(qǐng)求頭中提取指定的某個(gè)請(qǐng)求頭,可以說(shuō)等價(jià)于HttpServletRequest.getHeader(String)。17.1.4@CookieValue和@RequestHeader0117.1SpringMVC常用注解org.spri380217.2在SpringMVC中處理模型數(shù)據(jù)ModelAndView有一個(gè)類(lèi)型為ModelMap的屬性model,而ModelMap繼承了LinkedHashMap<String,Object>,因此可以存放各種鍵值對(duì)。為了進(jìn)一步定義數(shù)據(jù)模型功能,Spring還創(chuàng)建了類(lèi)ExtendedModelMap,這個(gè)類(lèi)實(shí)現(xiàn)了數(shù)據(jù)模型定義的Model接口,如圖17-1所示,并且還在此基礎(chǔ)上派生了關(guān)于數(shù)據(jù)綁定的類(lèi)BindingAwareModelMap。17.2.1數(shù)據(jù)模型0217.2在SpringMVC中處理模型數(shù)據(jù)Mod390217.2在SpringMVC中處理模型數(shù)據(jù)在控制器的方法中,可以把ModelAndView、Model、ModelMap作為參數(shù)。在SpringMVC運(yùn)行的時(shí)候,會(huì)自動(dòng)初始化它們,因此可以選擇ModelMap或者M(jìn)odel作為數(shù)據(jù)模型。事實(shí)上SpringMVC創(chuàng)建的是一個(gè)BindingAwareModelMap實(shí)例。ModelAndView初始化后,model屬性為空,當(dāng)調(diào)用它增加數(shù)據(jù)模型的方法后,會(huì)自動(dòng)創(chuàng)建一個(gè)ModelMap實(shí)例,用以保存數(shù)據(jù)模型。17.2.1數(shù)據(jù)模型0217.2在SpringMVC中處理模型數(shù)據(jù)在控制400217.2在SpringMVC中處理模型數(shù)據(jù)SpringMVC提供了以下幾種途徑輸出模型數(shù)據(jù):17.2.1數(shù)據(jù)模型0217.2在SpringMVC中處理模型數(shù)據(jù)Spr410217.2在SpringMVC中處理模型數(shù)據(jù)可將控制器處理方法的返回值設(shè)為ModelAndView,ModelAndView中既可存放視圖信息,也可存放模型數(shù)據(jù)信息。SpringMVC會(huì)把ModelAndView的model中數(shù)據(jù)放入到request域?qū)ο笾小?7.2.2ModelAndView0217.2在SpringMVC中處理模型數(shù)據(jù)可將控420217.2在SpringMVC中處理模型數(shù)據(jù)SpringMVC在調(diào)用方法前會(huì)創(chuàng)建一個(gè)隱含的模型對(duì)象作為模型數(shù)據(jù)的存儲(chǔ)容器(事實(shí)上這個(gè)隱含的模型對(duì)象是一個(gè)BindingAwareModelMap類(lèi)型的對(duì)象,通過(guò)后面的例子我們可以驗(yàn)證),如果方法的入?yún)镸ap、Model或者M(jìn)odelMap類(lèi)型,SpringMVC會(huì)將隱含模型的引用傳遞給這些入?yún)ⅲㄒ驗(yàn)锽indingAwareModelMap繼承或?qū)崿F(xiàn)了Map、Model或者M(jìn)odelMap)。在方法體內(nèi),開(kāi)發(fā)者可以通過(guò)這個(gè)入?yún)?duì)象訪問(wèn)到模型中的所有數(shù)據(jù),也可以向模型中添加新的屬性數(shù)據(jù),SpringMVC也會(huì)把Map中數(shù)據(jù)放入到request域?qū)ο笾小?7.2.3Map及Model0217.2在SpringMVC中處理模型數(shù)據(jù)Spr430217.2在SpringMVC中處理模型數(shù)據(jù)上面介紹的兩種方式,SpringMVC都是將數(shù)據(jù)存放在request域?qū)ο笾校粝M诙鄠€(gè)請(qǐng)求之間共用某個(gè)模型屬性數(shù)據(jù),則可以在控制器類(lèi)上標(biāo)注一個(gè)@SessionAttributes注解(該注解只能放在類(lèi)的上面,而不能修飾放方法),SpringMVC將把模型中對(duì)應(yīng)的屬性暫存到HttpSession中。@SessionAttributes除了可以通過(guò)屬性名指定需要放到會(huì)話中的屬性外,還可以通過(guò)模型屬性的對(duì)象類(lèi)型指定哪些模型屬性需要放到會(huì)話中。17.2.4@SessionAttributes0217.2在SpringMVC中處理模型數(shù)據(jù)上面介440217.2在SpringMVC中處理模型數(shù)據(jù)SpringMVC在每次調(diào)用請(qǐng)求處理方法時(shí),都會(huì)創(chuàng)建Model類(lèi)型的一個(gè)實(shí)例。若打算使用該實(shí)例,則可以在方法中添加一個(gè)Model類(lèi)型的參數(shù)。除此之外,我們還可以使用在方法中添加org.springframework.web.bind.annotation.ModelAttribute注解類(lèi)型將請(qǐng)求參數(shù)綁定到Model對(duì)象。17.2.5@ModelAttribute0217.2在SpringMVC中處理模型數(shù)據(jù)Spr450217.2在SpringMVC中處理模型數(shù)據(jù)@ModelAttribute注解只支持一個(gè)屬性value,類(lèi)型為String,表示綁定的屬性名稱??梢杂聾ModelAt

溫馨提示

  • 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)論