Spring?MVC數(shù)據(jù)響應(yīng)處理詳解
1. 內(nèi)置視圖解析器
Spring MVC 中的視圖解析器負(fù)責(zé)解析視圖,可以通過在配置文件中定義一個(gè)ViewResolver來配置視圖解析器,配置如下:
<!--默認(rèn)的內(nèi)置視圖解析器--> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--設(shè)置前綴--> <property name="prefix" value="/WEB-INF/templates"/> <!--設(shè)置后綴--> <property name="suffix" value=".html"/> </bean>
定義了一個(gè)id為viewResolver的視圖解析器,并設(shè)置了前綴后綴,這樣設(shè)置的好處就是簡化方法中定義的路徑。在訪問視圖解析器是就會(huì)自動(dòng)的增加前綴和后綴。
2. 使用原生servlet的對(duì)象傳遞數(shù)據(jù)
HttpServletRequest:通過request對(duì)象獲取請(qǐng)求信息
控制器方法:
//使用servlet傳遞數(shù)據(jù) @RequestMapping("/testServlet") public String testRequestByServletAPI(HttpServletRequest request){ request.setAttribute("test","hello,servlet"); return "success"; }
3. 使用ModelAndView對(duì)象傳輸數(shù)據(jù)
當(dāng)使用modelAndView對(duì)象的時(shí)候,返回值的類型也必須是ModelAndView,可以將要跳轉(zhuǎn)的頁面設(shè)置成view的名稱,來完成跳轉(zhuǎn)的功能,同時(shí)數(shù)據(jù)也是放到request域中。
使用方式:
- 創(chuàng)建ModelAndView對(duì)象
- 向模型對(duì)象中添加數(shù)據(jù)
- 設(shè)置邏輯視圖名
- 返回ModelAndView對(duì)象
控制器方法:
@RequestMapping("/testModelAndView") public ModelAndView testModelAndView(){ //創(chuàng)建ModelAndView對(duì)象 ModelAndView mav = new ModelAndView(); //處理模型數(shù)據(jù),即向請(qǐng)求域request共享數(shù)據(jù) mav.addObject("test","Hello ModelAndView"); //設(shè)置視圖名稱 mav.setViewName("success"); return mav; }
ModelAndView對(duì)象的作用:
將控制器方法中處理的結(jié)果數(shù)據(jù)傳遞到結(jié)果頁面,也就是把在結(jié)果頁面上需要的數(shù)據(jù)放到ModelAndView對(duì)象中即可,其作用類似于request對(duì)象的setAttribute方法的作用,用來在一個(gè)請(qǐng)求過程中傳遞處理的數(shù)據(jù)。
4. 使用Model、Map、ModelMap傳輸數(shù)據(jù)
在SpringMVC中除了可以使用原生servlet的對(duì)象傳遞數(shù)據(jù)之外,還有什么其他的方式呢?
可以在方法的參數(shù)上傳入Model,ModelMap,Map類型,此時(shí)都能夠?qū)?shù)據(jù)傳送回頁面。
控制器方法:
@RequestMapping("/testModel") public String testModel(Model model){ model.addAttribute("test","Hello Model"); return "success"; } @RequestMapping("/testMap") public String testMap(Map<String,Object> map){ map.put("test","Hello Map"); return "success"; } @RequestMapping("/testModelMap") public String testModelMap(ModelMap modelMap){ modelMap.addAttribute("test","hello modelmap"); return "success"; }
如果方法的入?yún)镸ap,Model和ModelMap類型,Spring MVC會(huì)將隱含模型的引用傳遞給這些入?yún)?。在方法體內(nèi),開發(fā)者可以通過這個(gè)入?yún)?duì)象訪問到模型中的所有數(shù)據(jù),也可以向模型中添加新的屬性數(shù)據(jù),作用類似于request對(duì)象的setAttribute方法的作用: 用來在一個(gè)請(qǐng)求過程中傳遞處理的數(shù)據(jù)。
三者之間的關(guān)系:
- Map為原生的儲(chǔ)存鍵值的對(duì)象,里面很多的方法可以使用;
- Model 只有寥寥幾個(gè)方法只適合用于儲(chǔ)存數(shù)據(jù),簡化了新手對(duì)于Model對(duì)象的操作和理解;
- ModelMap 繼承了 LinkedMap ,除了實(shí)現(xiàn)了自身的一些方法,同樣的繼承 LinkedMap 的方法和特性;
- Map、Model、ModelMap的底層都是使用BindingAwareModelMap。
- Map、Model和ModelMap返回的是地址路徑
5. 使用session傳輸數(shù)據(jù)
HttpSession:通過session對(duì)象得到session中存儲(chǔ)的對(duì)象
控制器方法
//向session域共享數(shù)據(jù) @RequestMapping("/testSession") public String testSession(HttpSession httpSession){ httpSession.setAttribute("testSessionScope","hello session"); return "success"; } //向application域共享數(shù)據(jù) @RequestMapping("/testApplication") public String testApplication(HttpSession session){ ServletContext servletContext = session.getServletContext(); servletContext.setAttribute("testApplicationScope","hello application"); return "success"; }
總結(jié)
到此這篇關(guān)于Spring MVC數(shù)據(jù)響應(yīng)處理的文章就介紹到這了,更多相關(guān)Spring MVC響應(yīng)處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解SpringBoot中實(shí)現(xiàn)依賴注入功能
這篇文章主要介紹了詳解SpringBoot中實(shí)現(xiàn)依賴注入功能,SpringBoot的實(shí)現(xiàn)方式基本都是通過注解實(shí)現(xiàn)的。有興趣的可以了解一下。2017-04-04Springboot之自定義全局異常處理的實(shí)現(xiàn)
這篇文章主要介紹了Springboot之自定義全局異常處理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08有關(guān)Java常見的誤解小結(jié)(來看一看)
下面小編就為大家?guī)硪黄嘘P(guān)Java常見的誤解小結(jié)(來看一看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05Java中StringUtils工具類的一些用法實(shí)例
這篇文章主要介紹了Java中StringUtils工具類的一些用法實(shí)例,本文著重講解了isEmpty和isBlank方法的使用,另外也講解了trim、strip等方法的使用實(shí)例,需要的朋友可以參考下2015-06-06springboot整合curator實(shí)現(xiàn)分布式鎖過程
這篇文章主要介紹了springboot整合curator實(shí)現(xiàn)分布式鎖過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05springboot layui hutool Excel導(dǎo)入的實(shí)現(xiàn)
本文主要介紹了springboot layui hutool Excel導(dǎo)入的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03Jenkins集成sonarQube實(shí)現(xiàn)代碼質(zhì)量檢查過程圖解
這篇文章主要介紹了Jenkins集成sonarQube實(shí)現(xiàn)代碼質(zhì)量檢查過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09java獲取本地文件的多種方式實(shí)現(xiàn)與比較
這篇文章主要為大家詳細(xì)介紹了java獲取本地文件的多種方式實(shí)現(xiàn)與結(jié)果比較,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11