淺談springMVC中controller的幾種返回類型
Controller方法的返回值可以有以下幾種:
1、返回ModelAndView
返回ModelAndView時(shí)最常見的一種返回結(jié)果。需要在方法結(jié)束的時(shí)候定義一個(gè)ModelAndView對(duì)象,并對(duì)Model和View分別進(jìn)行設(shè)置。
2、返回String
1):字符串代表邏輯視圖名
真實(shí)的訪問路徑=“前綴”+邏輯視圖名+“后綴”
注意:如果返回的String代表邏輯視圖名的話,那么Model的返回方式如下:
public String testController(Model model){ model.addAttribute(attrName,attrValue);//相當(dāng)于ModelAndView的addObject方法 return "邏輯視圖名"; }
2):代表redirect重定向
redirect的特點(diǎn)和servlet一樣,使用redirect進(jìn)行重定向那么地址欄中的URL會(huì)發(fā)生變化,同時(shí)不會(huì)攜帶上一次的request
案例:
public String testController(Model model){ return "redirect:path";//path代表重定向的地址 }
3):代表forward轉(zhuǎn)發(fā)
通過forward進(jìn)行轉(zhuǎn)發(fā),地址欄中的URL不會(huì)發(fā)生改變,同時(shí)會(huì)將上一次的request攜帶到寫一次請(qǐng)求中去
案例:
public String testController(Model model){ return "forward:path";//path代表轉(zhuǎn)發(fā)的地址 }
3、返回void
返回這種結(jié)果的時(shí)候可以在Controller方法的形參中定義HTTPServletRequest和HTTPServletResponse對(duì)象進(jìn)行請(qǐng)求的接收和響應(yīng)
1)使用request轉(zhuǎn)發(fā)頁(yè)面
request.getRequestDispatcher("轉(zhuǎn)發(fā)路徑").forward(request,response);
2)使用response進(jìn)行頁(yè)面重定向
response.sendRedirect("重定向路徑");
3)也可以使用response指定響應(yīng)結(jié)果
response.setCharacterEncoding("UTF-8"); response.setContentType("application/json;charset=utf-8"); response.getWriter.write("json串");
以上三種返回值沒有什么重要和不重要的分別,一般來說都會(huì)使用到, 只不過有的時(shí)候使用的方式會(huì)有一些細(xì)微的差別
補(bǔ)充:SpringMvc中,Controller方法的多種實(shí)現(xiàn)方式(指定返回到哪個(gè)頁(yè)面,指定返回到頁(yè)面的數(shù)據(jù))
1)ModelAndView
@RequestMapping("/list") public ModelAndView itemsList() throws Exception{ List<Items> list = itmesService.list(); //創(chuàng)建ModelAndView視圖 ModelAndView modelAndView = new ModelAndView(); //將list數(shù)據(jù)添加到試圖里 modelAndView.addObject("itemList", list); modelAndView.setViewName("itemList");//設(shè)置視圖的名稱,即返回到哪個(gè)頁(yè)面 //由于有視圖解析器的作用,省去了前綴和后綴,其實(shí)訪問的頁(yè)面為("/WEB-INF/jsp/itemList.jsp") return modelAndView; }
2) String(最常用,最方便,建議)
@RequestMapping("/itemEdit/{id}") public String itemEdit(@PathVariable("id") Integer id, HttpServletRequest reuqest, Model model) throws Exception{ //String idStr = reuqest.getParameter("id"); Items items = itmesService.findItemsById(id); //將items數(shù)據(jù)加到視圖中 model.addAttribute("item", items); //這里返回editItem,在@Controller的注解下,回自動(dòng)添加前綴和后綴,實(shí)則是返回到頁(yè)面("/WEB-INF/jsp/editItem.jsp") return "editItem"; }
3) 返回void
public void update(Items items,HttpServletRequest request,HttpServletResponse response)throws Exception{ //返回?cái)?shù)據(jù),將items的內(nèi)容放入items里,jsp頁(yè)面調(diào)用items就行 request.setAttribute("items", items); //返回指定的頁(yè)面 //如果是void類型的話,就不會(huì)去調(diào)用SpringMvc的架構(gòu),因此無法自動(dòng)加載視圖解析器,所以跳轉(zhuǎn)的 //網(wǎng)頁(yè)名稱應(yīng)該為其全路徑名稱 request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response); } 就不會(huì)去調(diào)用SpringMvc的架構(gòu),因此無法自動(dòng)加載視圖解析器,所以跳轉(zhuǎn)的 //網(wǎng)頁(yè)名稱應(yīng)該為其全路徑名稱 request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response); }
4)關(guān)于方法中所需要的參數(shù)定義
舉3)中的例子,我在update方法中定義了:
Items items,HttpServletRequest request,以及HttpServletResponse response這三個(gè)類型.
但是大家可以發(fā)現(xiàn),其實(shí)我在方法中是沒有用到response的,因此,可以把其刪掉,對(duì)于程序來說,并不會(huì)
產(chǎn)生影響。
因此,大家在定義方法的時(shí)候,可以根據(jù)自己的實(shí)際需要來定義所需要的類,或者大家怕以后代碼需要改麻煩的話,
全部定義上也是可以的。
更新
5)若如果想要接口不是跳轉(zhuǎn)頁(yè)面,而是返回?cái)?shù)據(jù),則需要添加@ResponseBody的注解
例:
@RequestMapping("atimynyc/getUser") @ResponseBody public User getUser(String id){ User user = new User(); user.setUserName = "Atimynyc"; user.setUserAge = 18; user.setUserPhone = "123456789"; return User; }
通過加上ResponseBody,springmvc就知道該接口是返回?cái)?shù)據(jù),例,當(dāng)我們用ajax調(diào)用上面的接口url時(shí)atimynyc/getUser,就可以獲得user這個(gè)對(duì)象。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
FutureTask為何單個(gè)任務(wù)僅執(zhí)行一次原理解析
這篇文章主要為大家介紹了FutureTask為何單個(gè)任務(wù)僅執(zhí)行一次原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11淺析Java中print、printf、println的區(qū)別
以下是對(duì)Java中print、printf、println的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-08-08HashMap和List遍歷方法及如何遍歷刪除元素總結(jié)
在本篇文章中小編給大家分享了關(guān)于HashMap和List遍歷方法及如何遍歷刪除元素知識(shí)點(diǎn)總結(jié),需要的朋友們參考下。2019-05-05三道java新手入門面試題,通往自由的道路--鎖+Volatile
這篇文章主要為大家分享了最有價(jià)值的3道多線程面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,對(duì)hashCode方法的設(shè)計(jì)、垃圾收集的堆和代進(jìn)行剖析,感興趣的小伙伴們可以參考一下2021-07-07java 交換兩個(gè)數(shù)據(jù)的方法實(shí)例詳解
這篇文章主要介紹了java 交換兩個(gè)數(shù)據(jù)的方法實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2016-12-12詳解SpringBoot配置devtools實(shí)現(xiàn)熱部署
本篇文章主要介紹了詳解SpringBoot配置devtools實(shí)現(xiàn)熱部署 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05eclipse創(chuàng)建項(xiàng)目沒有dynamic web的解決方法
最近上課要用到eclipse,要用到Dynamic web project.但是我下載的版本上沒有.接下來就帶大家了解 eclipse創(chuàng)建項(xiàng)目沒有dynamic web的解決方法,文中有非常詳細(xì)的圖文示例,需要的朋友可以參考下2021-06-06Java微信公眾平臺(tái)開發(fā)(8) 多媒體消息回復(fù)
這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)開發(fā)第八步,微信多媒體消息回復(fù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04