==网文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) throwsException{
request.setCharacterEncoding(
"utf-8");
String username
= request.getParameter("username");//通过HttpServletRequest获得请求参数 System.out.println("用户名:"+username);
request.setAttribute(
"username",username);
User u
= newUser();
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) throwsException{
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");//视图跳转 returnmodelAndView;
}
Controller方法的返回值3:返回String类型(逻辑视图)

@RequestMapping(
"/test_string.action")public String controller03(HttpServletRequest request) throwsException{
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) throwsException{
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) throwsException{
request.setCharacterEncoding(
"utf-8");
String username
= request.getParameter("username");
User u
= newUser();
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) throwsException{
request.setCharacterEncoding(
"utf-8");
String username
= request.getParameter("username");
User u
= newUser();
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) throwsException{//必须进行转码 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) throwsException{//必须进行转码 user.setUsername(new String(user.getUsername().getBytes("iso-8859-1"),"utf-8"));
userService.insertUser(user);
ModelAndView modelAndView
= newModelAndView();
request.setCharacterEncoding(
"utf-8");
modelAndView.addObject(
"username",user.getUsername());
modelAndView.addObject(
"password",user.getPassword());
modelAndView.setViewName(
"/WEB-INF/jsp/success.jsp");returnmodelAndView;
}

参数绑定的第三种方法:当input的name与controller的参数名不一致时,可以采用@RequestParam注解

@RequestMapping(
"test_RequestParam.action")//将客户端的请求参数"username"与"uname"绑定 public ModelAndView controller09(@RequestParam(value="username") String uname,@RequestParam(value="password")String pwd) throwsException{
uname
= new String(uname.getBytes("iso-8859-1"),"utf-8");
ModelAndView modelAndView
= newModelAndView();
modelAndView.addObject(
"username",uname);
modelAndView.setViewName(
"/WEB-INF/jsp/success.jsp");returnmodelAndView;
}

原文

===此文 里面的小结感觉很实用,但本人理解不完全

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可以设置返回的视图名称。

标签: none

添加新评论