==網文1,還不錯,感覺比較老舊
springMVC中controller的幾種返回類型 - CSDN博客
http://blog.csdn.net/qq_16071145/article/details/51222372
Controller方法的返回值可以有以下幾種:
1、返回ModelAndView
返回ModelAndView時最常見的一種返回結果。需要在方法結束的時候定義一個ModelAndView對象,並對Model和View分別進行設置。
2、返回String
1):字符串代表邏輯視圖名
真實的訪問路徑=“前綴”+邏輯視圖名+“后綴”
注意:如果返回的String代表邏輯視圖名的話,那么Model的返回方式如下:
public String testController(Model model){
model.addAttribute(attrName,attrValue);//相當於ModelAndView的addObject方法
return "邏輯視圖名";
}
2):代表redirect重定向
redirect的特點和servlet一樣,使用redirect進行重定向那么地址欄中的URL會發生變化,同時不會攜帶上一次的request
案例:
public String testController(Model model){
return "redirect:path";//path代表重定向的地址
}
3):代表forward轉發
通過forward進行轉發,地址欄中的URL不會發生改變,同時會將上一次的request攜帶到寫一次請求中去
案例:
public String testController(Model model){
return "forward:path";//path代表轉發的地址
}
3、返回void
返回這種結果的時候可以在Controller方法的形參中定義HTTPServletRequest和HTTPServletResponse對象進行請求的接收和響應
1)使用request轉發頁面
request.getRequestDispatcher("轉發路徑").forward(request,response);
2)使用response進行頁面重定向
response.sendRedirect("重定向路徑");
3)也可以使用response指定響應結果
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter.write("json串");
以上三種返回值沒有什么重要和不重要的分別,一般來說都會使用到, 只不過有的時候使用的方式會有一些細微的差別
==網文2 此文有代碼,對上方的拓展
SpringMVC學習(七)——Controller類的方法返回值 - CSDN博客
http://blog.csdn.net/yerenyuan_pku/article/details/72511844
== 很多返回類型很陌生
springMVC教程(八)controller中方法的返回值類型 - CSDN博客
http://blog.csdn.net/baidu_16702581/article/details/32695519
== 很不錯,但是里面多了很多<span> 多余的標簽了,應該是博主從其他地方拷貝過來的
SpringMVC的Controller層參數綁定以及返回值 - CSDN博客
http://blog.csdn.net/nuowei_senlin/article/details/53695956

當客戶端通過get或post請求發送來的參數通過Controller中方法的參數接受,叫做參數綁定 Controller方法的返回值1:返回void類型 @RequestMapping("/test_void.action") public void controller01(HttpServletRequest request,HttpServletResponse response) throws Exception{ request.setCharacterEncoding("utf-8"); String username = request.getParameter("username");//通過HttpServletRequest獲得請求參數 System.out.println("用戶名:"+username); request.setAttribute("username",username); User u = new User(); u.setUsername(username); userService.insertUser(u);//插入數據庫 request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response);//轉發 } Controller方法的返回值2:返回ModelAndView @RequestMapping("/test_modelandview.action") public ModelAndView controller02(HttpServletRequest request) throws Exception{ request.setCharacterEncoding("utf-8");//轉碼,Tomcat默認是iso-8859-1 String username = request.getParameter("username"); System.out.println("用戶名:"+username); ModelAndView modelAndView = new ModelAndView();//new一個ModelAndView modelAndView.addObject("username",username);//相當於request.setAttribute(attrName,attrValue); modelAndView.setViewName("WEB-INF/jsp/success.jsp");//視圖跳轉 return modelAndView; } Controller方法的返回值3:返回String類型(邏輯視圖) @RequestMapping("/test_string.action") public String controller03(HttpServletRequest request) throws Exception{ request.setCharacterEncoding("utf-8");//轉碼 String username = request.getParameter("username"); request.setAttribute("username",username);//設置請求參數 System.out.println("用戶名:"+username); return "/WEB-INF/jsp/success.jsp";//返回String類型,代表邏輯視圖 } Controller方法的返回值4:方法的參數是Model,返回值是String類型(邏輯視圖) [html] view plain copy @RequestMapping("/test_model.action") public String controller04(HttpServletRequest request,Model model) throws Exception{ request.setCharacterEncoding("utf-8"); String username = request.getParameter("username"); model.addAttribute("username", username);//等價於request.setAttribute(attrName,attrValue); System.out.println("用戶名:"+username); return "/WEB-INF/jsp/success.jsp";//返回String類型,跳轉到邏輯視圖 } Controller方法的返回值5:返回重定向redirect后的邏輯視圖名 @RequestMapping("/test_redirect.action") public String controller05(HttpServletRequest request) throws Exception{ request.setCharacterEncoding("utf-8"); String username = request.getParameter("username"); User u = new User(); u.setUsername(username); userService.insertUser(u); request.setAttribute("username",username);//由於是redirect,所以請求參數失效 return "redirect:/controller/test_model.action";//redirect:重定向到一個Controller里 } Controller方法的返回值6:返回farward轉發后的邏輯視圖名 @RequestMapping("/test_forword.action") public String controller06(HttpServletRequest request) throws Exception{ request.setCharacterEncoding("utf-8"); String username = request.getParameter("username"); User u = new User(); u.setUsername(username); userService.insertUser(u); System.out.println("用戶名:"+username); request.setAttribute("username",username);//由於是轉發,所以請求參數有效 return "forward:/controller/test_model.action";//轉發,跳轉到一個Controller里 } 參數綁定 參數綁定的第一種方法:綁定普通類型 //參數綁定的第一種方法:客戶端提交的請求的input的name屬性會和Controller方法的參數名字一致才會綁定 @RequestMapping("/test_parambinding01.action") public void controller07(HttpServletRequest request,HttpServletResponse response,String username,String password) throws Exception{ //必須進行轉碼 username = new String(username.getBytes("iso8859-1"),"UTF-8"); request.setAttribute("username",username); request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response); } 參數綁定的第二種方法:綁定pojo類 //參數綁定的第二種方法:客戶端的input標簽的那么屬性必須和User的屬性名對應才可以映射成功 @RequestMapping("/test_parambinding02.action") public ModelAndView controller08(HttpServletRequest request,User user) throws Exception{ //必須進行轉碼 user.setUsername(new String(user.getUsername().getBytes("iso-8859-1"),"utf-8")); userService.insertUser(user); ModelAndView modelAndView = new ModelAndView(); request.setCharacterEncoding("utf-8"); modelAndView.addObject("username",user.getUsername()); modelAndView.addObject("password",user.getPassword()); modelAndView.setViewName("/WEB-INF/jsp/success.jsp"); return modelAndView; } 參數綁定的第三種方法:當input的name與controller的參數名不一致時,可以采用@RequestParam注解 @RequestMapping("test_RequestParam.action") //將客戶端的請求參數"username"與"uname"綁定 public ModelAndView controller09(@RequestParam(value="username") String uname,@RequestParam(value="password")String pwd) throws Exception{ uname = new String(uname.getBytes("iso-8859-1"),"utf-8"); ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("username",uname); modelAndView.setViewName("/WEB-INF/jsp/success.jsp"); return modelAndView; }
===此文 里面的小結感覺很實用,但本人理解不完全
SpringMVC Controller 返回值的可選類型 - xiepeixing - 博客園
http://www.cnblogs.com/xiepeixing/p/4243801.html
小結:
1.使用 String 作為請求處理方法的返回值類型是比較通用的方法,這樣返回的邏輯視圖名不會和請求 URL 綁定,具有很大的靈活性,而模型數據又可以通過 ModelMap 控制。
2.使用void,map,Model 時,返回對應的邏輯視圖名稱真實url為:prefix前綴+視圖名稱 +suffix后綴組成。
3.使用String,ModelAndView返回視圖名稱可以不受請求的url綁定,ModelAndView可以設置返回的視圖名稱。