springMVC中controller的几种返回类型
==网文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可以设置返回的视图名称。
springMVC中controller的几种返回类型的更多相关文章
- SpringMVC中controller的几种返回值
String :跳转到对应的返回值中. return “/index”: ModelAndView: 控制页面跳转方式: 1. ModelAndView modelAndView = new Mode ...
- SpringMVC中Controller类的方法返回String不跳转,而是将字符串显示到页面
问题描述: 在spring中,控制层的注解一般都是使用@Controller,如果哪个请求参数需要返回数据的话,我们可以在该方法上配合@ResponseBody注解使用,这也是比较常见的方式了. 今天 ...
- SpringMVC中controller返回图片(转)
本文转自:http://blog.csdn.net/u011637069/article/details/51112187 SpringMVC中controller通过返回ModelAndView然后 ...
- 详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析]
目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍 HandlerMethodArgumen ...
- SpringMVC中Controller
详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析] 目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodR ...
- 详解SpringMVC中Controller的方法中参数的工作原理——基于maven
转自:http://www.tuicool.com/articles/F7byQn 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:ht ...
- 【MVC - 参数原理】详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析]
前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/spring ...
- springmvc 中controller与jsp传值
参考:springmvc 中controller与jsp传值 springMVC:将controller中数据传递到jsp页面 jsp中,死活拿不到controller中的变量. 花了半天,网上列出各 ...
- Delphi中定义了四种布尔类型:Boolean,ByteBool,WordBool和LongBool。后面三种布尔类型是为了与其他语言兼容而引入的
bool是LongBool类型. Delphi中定义了四种布尔类型:Boolean,ByteBool,WordBool和LongBool.后面三种布尔类型是为了与其他语言兼容而引入的,一般情况下建议使 ...
随机推荐
- python中的闭包和装饰器
重新学习完了函数,是时候将其中的一些重点重新捋一捋了,本次总结的东西只有闭包和装饰器 1.闭包 闭包是python函数中的一个比较重要功能,一般闭包都是用在装饰器上,一般学完闭包就会去学习装饰器,这俩 ...
- OllyDbg使用笔记
[TOC] OD步过后,返回到之前某位置,重新单步执行 找到你想返回的行, 右键选择New origin here,快捷键Ctrl+Gray *, 然后程序会返回到这一行,再次按F7或者F8等执行即可
- 如何解决一个从SkylineGlobe5版本升级到7版本遇到的小问题
前些天,有朋友问,用Skyline5版本开发的WinForm程序,升级到7版本的时候,工程提示下面这样“创建组件AxHost失败”的错误,该如何解决呢? 后来经过百度搜索,找到了这样的答案, 测试发现 ...
- 为什么很多IT公司不喜欢进过培训机构的人呢?
转载原文链接:https://www.cnblogs.com/alex3714/p/9105765.html 这几天在知乎看到一个问题“为什么很多IT公司不喜欢进过培训机构的人呢?” 身为老男孩的教学 ...
- Gruntfile.js模板
module.exports = function(grunt) { // 配置项 var AppConfig = { name: 'app', //源文件目录 src: 'app/src', //生 ...
- java oop 集合框架
集合主要是用来存放数据的,集合与数组的主要区别在于,集合的大小不受限制,而数组的大小受限制,在使用集合增加数据时又常常与泛型联系起来,所以集合和泛型在实际开发过程中总会结合在一起 数组致命的缺点是数组 ...
- Android艺术——Bitmap高效加载和缓存(1)
通过Bitmap我们可以设计一个ImageLoader,实现应该具有的功能是: 图片的同步加载:图片的异步加载:图片的压缩:内存缓存:磁盘缓存:网络获取: 1.加载 首先提到加载:BitmapFact ...
- c语言提高(第二次作业)
1. 画出字符串一级指针内存四区模型 #include <stdio.h> #include <string.h> int main(void) { char buf[20]= ...
- Lodop打印表格带页头页尾 高度是否包含页头页尾
通过设置TableHeightScope,可以实现对ADD_PRINT_TABLE,表格带页头页尾,查看本博客另一篇博文:Lodop打印表格带页头页尾 自动分页每页显示头尾 超文本超过打印项高度,会自 ...
- python之异常处理和re模块补充
一.re模块的补充 1.从一个字符串中获取要匹配的内容 findall:返回一个列表 2.search ***** 验证用户输入内容 '^正则规则$':返回一个对象,用group()取值 3.matc ...