前言
????????用過(guò)springMvc的小伙伴都知道,一般而言我們返回頁(yè)面視圖的時(shí)候會(huì)有兩種可能,就是本文題目中的兩個(gè)類(lèi)睛藻。其實(shí)本文就是想要對(duì)比一下這兩個(gè)類(lèi)在spring的視圖解析中的作用以及區(qū)別怀樟。
區(qū)別
????????就我個(gè)人而言,我自己覺(jué)得這兩者之間是沒(méi)有什么區(qū)別的恨旱?實(shí)際上,這兩者之間有著很大的區(qū)別坝疼,具體就表現(xiàn)在Model只是用來(lái)傳輸數(shù)據(jù)的搜贤,并不會(huì)進(jìn)行業(yè)務(wù)的尋址。但是钝凶,ModelAndView卻是可以進(jìn)行業(yè)務(wù)尋址的仪芒,就是設(shè)置對(duì)應(yīng)的要請(qǐng)求的靜態(tài)文件,這里的靜態(tài)文件指的是類(lèi)似jsp的文件。當(dāng)然掂名,兩者還有一個(gè)最大的區(qū)別据沈,那就是Model是每一次請(qǐng)求都必須會(huì)帶著的,但是ModelAndView是需要我們自己去新建的饺蔑。
Model通過(guò)返回String锌介,跳轉(zhuǎn)視圖,通過(guò)addAttribute設(shè)置參數(shù)猾警?ModelAndView通過(guò)viewName設(shè)置視圖名稱孔祸,addObject設(shè)置參數(shù)。
package com.learndemo.controller; import java.util.HashMap; import java.util.Map; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping(value = "/return") public class LearnReturnType { /** * Model本身不能設(shè)置頁(yè)面跳轉(zhuǎn)的url地址別名或者物理跳轉(zhuǎn)地址发皿,那么我們可以通過(guò)控制器方法的返回值來(lái)設(shè)置跳轉(zhuǎn)url * 地址別名或者物理跳轉(zhuǎn)地址 * * @param model * 一個(gè)接口融击, 其實(shí)現(xiàn)類(lèi)為ExtendedModelMap,繼承了ModelMap類(lèi) * @return 跳轉(zhuǎn)url地址別名或者物理跳轉(zhuǎn)地址 */ @RequestMapping(value = "/index1") public String index1(Model model) { model.addAttribute("result", "后臺(tái)返回index1"); return "result"; } /** * ModelMap對(duì)象主要用于傳遞控制方法處理數(shù)據(jù)到結(jié)果頁(yè)面,類(lèi)似于request對(duì)象的setAttribute方法的作用雳窟。 用法等同于Model * * @param model * @return 跳轉(zhuǎn)url地址別名或者物理跳轉(zhuǎn)地址 */ @RequestMapping(value = "/index2") public String index2(ModelMap model) { model.addAttribute("result", "后臺(tái)返回index2"); return "result"; } /** * ModelAndView主要有兩個(gè)作用 設(shè)置轉(zhuǎn)向地址和傳遞控制方法處理結(jié)果數(shù)據(jù)到結(jié)果頁(yè)面 * @return 返回一個(gè)模板視圖對(duì)象 */ @RequestMapping(value = "/index3") public ModelAndView index3() { ModelAndView mv = new ModelAndView("result"); // ModelAndView mv = new ModelAndView(); // mv.setViewName("result"); mv.addObject("result", "后臺(tái)返回index3"); return mv; } /** * map用來(lái)存儲(chǔ)遞控制方法處理結(jié)果數(shù)據(jù)尊浪,通過(guò)ModelAndView方法返回。 * 當(dāng)然Model,ModelMap也可以通過(guò)這種方法返回 * @return 返回一個(gè)模板視圖對(duì)象 */ @RequestMapping(value = "/index4") public ModelAndView index4() { Map map = new HashMap(); map.put("result", "后臺(tái)返回index4"); return new ModelAndView("result", map); } }