SpringMVC控制类的Controller方法返回值
SpringMVC控制类的Controller方法返回值
- Controller方法返回值
- 返回字符串
- 逻辑视图名
- 返回字符串
controller方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。
//指定逻辑视图名,经过视图解析器解析为jsp物理路径:/WEB-INF/jsp/itemList.jsp
return "itemList";
参考第一天内容
- Redirect重定向
Contrller方法返回字符串可以重定向到一个url地址
如下商品修改提交后重定向到商品编辑页面。
/*** 更新商品** @param item* @return*/@RequestMapping("updateItem")public String updateItemById(Item item) {// 更新商品this.itemService.updateItemById(item);// 修改商品成功后,重定向到商品编辑页面// 重定向后浏览器地址栏变更为重定向的地址,// 重定向相当于执行了新的request和response,所以之前的请求参数都会丢失// 如果要指定请求参数,需要在重定向的url后面添加 ?itemId=1 这样的请求参数return "redirect:/itemEdit.action?itemId=" + item.getId();}
- forward转发
Controller方法执行后继续执行另一个Controller方法
如下商品修改提交后转向到商品修改页面,修改商品的id参数可以带到商品修改方法中。
/*** 更新商品** @param item* @return*/@RequestMapping("updateItem")public String updateItemById(Item item) {// 更新商品this.itemService.updateItemById(item);// 修改商品成功后,继续执行另一个方法// 使用转发的方式实现。转发后浏览器地址栏还是原来的请求地址,// 转发并没有执行新的request和response,所以之前的请求参数都存在return "forward:/itemEdit.action";}
//结果转发到editItem.action,request可以带过去
return "forward: /itemEdit.action";
需要修改之前编写的根据id查询商品方法
因为请求进行修改商品时,请求参数里面只有id属性,没有itemId属性
修改,如下图::
使用request和response进行重定向和转发
- 返回ModelAndView
controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view。
参考第一天的内容
使用modelAndView默认都是使用转发的方式的,如果要使用重定向,需要创建RediectView(没有意义)。
- 返回void
如果不做任何处理,默认会转发到当前的请求的url:
案例:
@RequestMapping("/addStu") public void addStudent(){ //可以使用request,response转发或者重定向 System.out.println("添加学生,返回void"); //在方法中不做任何重定向和转发操作 // 当方法的返回值为void时,默认会转发进入当前的url 类似:return "addStu" /WEB-INF/jsp/addStu.jsp } |
在Controller方法形参上可以定义request和response,使用request或response指定响应结果:
1、使用request转发页面,如下:
request.getRequestDispatcher("页面路径").forward(request, response);request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response);
2、可以通过response页面重定向:
response.sendRedirect("url")response.sendRedirect("/springmvc_d02_c02/itemEdit.action");
- 可以通过response指定响应结果,例如响应json数据如下:
response.getWriter().print("{\"abc\":123}");
- 代码演示
以下代码一次测试,演示上面的效果
/*** 返回void测试** @param request* @param response* @throws Exception*/@RequestMapping("queryItem")public void queryItem(HttpServletRequest request, HttpServletResponse response) throws Exception {// 1 使用request进行转发// request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request,// response);// 2 使用response进行重定向到编辑页面// response.sendRedirect("/springmvc_d02_c02/itemEdit.action");// 3 使用response直接显示response.getWriter().print("{\"abc\":123}");}
- 返回Model(使用Model传递数据)
Model可以认为是ModelAndView的一部分,纯粹的只是分装了数据模型。
在返回Model时由于没有视图的部分, 所有springMVC默认和void的处理方式一样,转发到当前的URL。
案例:
@RequestMapping("/userInfo") public Model userInfo(Model model){ User user = userService.queryById(1); model.addAttribute("user", user); return model; } |
转发到当前的url
添加JSP
响应结果:
Model同样有4个方法可以添加数据模型对象:
默认对象都是放在request作用域中的。
其实使用Model设置数据模型时,可以没有返回值:
所有的model中的数据默认都是设置在request作用域中的。
- ModelMap传递数据
ModelMap本来就是一个Map,就是用来设置数据的。
ModelMap在初始化的时候,可以设置数据。
构造之后,通过可以通过API设置数据模型;
所有的API和Model一样,是Model的一个非直接实现类。
所以当返回ModelMap时,所有的处理和Model的处理是一样的。
案例:
使用ModelMap替换Model没有任何问题。
ModelMap是类,是可以自己创建对象的。
情况一:返回void
情况二:返回ModelMap
- 返回一个Map
当返回一个java.util.Map时,处理方式几乎和ModelMap完全一致:
使用Map作为处理方法的参数,spring同样会创建Map对象设置数据模型到作用域中。
- 返回一个javaBean对象
案例:
直接返回user对象,响应方式和void一致。
注意:springMVC默认会将对象的名称作为key,将对象设置到request的作用域中。
- 返回一个List
响应处理依然和void一致。
案例:
测试:无论controller中的返回值的对象名称是什么?页面都是通过userList获取。
当返回值为List是,默认springMVC会将list设置到request作用域中,并且给list的key为: xxxList 其中xxx是List 中存储的类型的类名的首字母小写的组成。
例如:List<String> sts = new ArrayList<String>() 在页面中通过JSTL获取的key是:stringList。
- 返回Set
Set和List几乎一致,唯一的区别是set和list集合的本质区别。
SpringMVC控制类的Controller方法返回值相关推荐
- SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器
SpringMVC入门(二)-- 参数的传递.Controller方法返回值.json数据交互.异常处理.图片上传.拦截器 参考文章: (1)SpringMVC入门(二)-- 参数的传递.Contro ...
- SpringMVC的Controller方法返回值
一.返回ModelAndView controller方法中定义ModelAndView对象并返回,对象中可以添加model数据.指定的view. public ModelAndView queryI ...
- Java框架-SpringMVC的应用(json数据交互、控制器方法返回值、文件上传)
1. 搭建SpringMVC开发环境 1.1 创建项目,添加依赖 <?xml version="1.0" encoding="UTF-8"?> &l ...
- .net mvc actionresult 返回字符串_072-SpringMVC后端控制器接收参数、处理器方法返回值类型、拦截器、文件上传下载...
1. 注解式开发之annotation-driven解释 (1) mvc注解驱动在哪个文件中配置? 在springmvc中配置 (2) 配置mvc注解驱动使用哪个标签? 2. 注解式开发之视图解析器 ...
- Java方法返回值类型归纳
Java方法返回值类型归纳 我们再调用一个方法时,将方法体内产生的一条数据输出到方法体外使用,这条数据我们叫做返回值. 返回值类型分为两大类:第一类,无返回值类型:void.第二类,有返回值类型,返回 ...
- php构造函数里抛出异常_php-在类的构造函数中返回值
php-在类的构造函数中返回值 到目前为止,我有一个带有构造函数的29447791671682017201728类 public function __construct ($identifier = ...
- 父类作为方法的形参以及父类作为方法返回值
1.父类作为方法的形参 语句:修饰符 父类类型 方法名(){} 2.父类作为方法返回值 语句:修饰符 void/返回值类型 方法名(父类类型 形参名){} 代码例子: 动物类: /*** @autho ...
- C# 方法返回值的个数
方法返回值类型总的来说分为值类型,引用类型,Void 有些方法显示的标出返回值 public int Add(int a,int b) {return a+b; } 有些方法隐式的返回返回值,我们可以 ...
- java泛型 方法返回值带有泛型 <T>
方法返回值前的<T>的左右是告诉编译器,当前的方法的值传入类型可以和类初始化的泛型类不同,也就是该方法的泛型类可以自定义,不需要跟类初始化的泛型类相同. 转自:https://blog.c ...
最新文章
- checking for C++ compiler default output file name
- org.jbpm.configuration.ConfigurationException: name 'default.jbpm.context'
- java 获取密码框密码,获得Windows下的密码框密码--编程学习网
- qpython3 l_QPython 3(com.hipipal.qpy3) - 3.0.0 - 应用 - 酷安网
- 小班同学学习经历分享(一)游戏程序员成长札记
- java做度量衡换算器_简易单位换算器_度量衡单位转换
- 笔记本锁定计算机功能键,笔记本键盘锁定键在哪_笔记本电脑的“键盘锁”是哪一个键-win7之家...
- Android 虚拟机技术为何至今依旧“屹立不倒”?
- html电子印章,挑战电子印章系统 HTML版
- Android学习之登陆界面设计(一)前后期准备以及相关配置
- 软件测试灵魂三问,如何回怼?
- 阿里云最新最全扩容方法
- 学生信息管理系统——python版(附流程图)
- 北斗短报文和北斗定位入门篇
- win10更新右键没有卸载怎么解决?
- dolphinscheduler v2.0.1 master和worker执行流程分析(一)
- 小福利,运用python里面的talib模块和cufflinks模块实现stock可视化分析
- Markdown语法之html内嵌样式
- C#,图像二值化(12)——基于谷底最小值的全局阈值算法(Valley-Minium Thresholding)与源代码
- 如何包装自己的简历?(HR眼中的好简历是什么样的?/这样写简历才会有面试机会)...