SpringMVC除了可以在 Controller方法上定义参数 :Request 、Response、Session 之外
还可以通过以下的方式 响应数据
1.可以在参数的位置上传入 Map、Model、ModelMap 三种类型的任意一种
往该参数中保存数据,都会被存放到 Request 域对象中,可以从页面获取
如下代码演示:
jsp:
Controller:
浏览器访问 jsp 页面,依次点击超链接之后的页面内容 :
从reqeust域中提取数据:入参是--map对象
从reqeust域中提取数据:入参是--Model对象
从reqeust域中提取数据:入参是--ModelMap对象
控制台输出:
class org.springframework.validation.support.BindingAwareModelMap
class org.springframework.validation.support.BindingAwareModelMap
class org.springframework.validation.support.BindingAwareModelMap
PS: 三种入参:Map、Model、ModelMap类型最终都是BindingAwareModelMap 在操作,相当于给BindingAwareModelMap的数据最后都被存放到了request 域对象中
2.SpringMVC支持将方法的返回值设置为 ModelAndView
当控制器处理完请求时,通常会将包含视图名称或视图对象以及一些模型属性的ModelAndView对象返回到 DispatcherServlet。因此,经常需要在控制器中构造ModelAndView对象,
ModelAndView类提供了几个重载的构造器和一些方便的方法:
1.通过ModelAndView构造方法 可以指定返回的页面名称,也可以通过setViewName(“页面名称”)设置返回页面
2.使用addObject(key,value) 设置需要返回的值,内部就是将值设置到一个ModelMap类的属性上,最后将指存放到Request域对象中
构造器和方法以类似的方式支持视图名称和视图对象。其他的请看源码
以下代码演示:
//响应返回值 使用 ModelAndView
@RequestMapping("/hanlder04")
public ModelAndView hanlder04() {
//创建ModelAndView对象,构造方法中传入jsp 页面名称,springMVC视图解析器会将字符串拼接得到最终的页面地址
ModelAndView view = new ModelAndView("main");
//保存数据 (数据最后都会存储到request域对象中)
view.addObject("message", "返回值ModelAndView 响应数据");
return view;
}