三种域对象:application > session > request
request 请求域
使用ServletAPI向request域对象共享数据
@RequestMapping("/testServletAPI")
public String testServletAPI(HttpServletRequest request){
request.setAttribute("testScope", "hello,servletAPI");
return "success";
}
使用ModelAndView向request域对象共享数据 -- 官方推荐方法
ModelAndView 是Spring官方推荐使用的向request域对象共享数据的方法,因为,无论是其它哪种方法,其底层实现都是通过ModelAndView实现的
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
/**
* ModelAndView有 Model 和 View 的功能
* Model 主要用于向请求域共享数据
* View 主要用于设置视图,实现页面跳转
*/
ModelAndView mav = new ModelAndView();
//向请求域共享数据 key - value
mav.addObject("testScope", "hello,ModelAndView");
//设置视图,实现页面跳转
mav.setViewName("success");
return mav;
}
-
必须以 ModelAndView 为返回值
-
创建 mav对象
-
Model 主要用于向请求域共享数据
- model 数据是键值对,通过 mav.addObject( key, value ) 保存数据
-
View 主要用于设置视图,实现页面跳转
- view 和普通的页面跳转相同,只需要传入逻辑视图,通过 mav.setViewName 实现页面跳转
-
最后返回 mav对象
使用Model向request域对象共享数据 -- 最常用最好用
DispatcherServlet 在接受请求时会自动创建 Model对象,在处理请求的方法的参数中接收Model对象就可以在方法中使用
@RequestMapping("/testModel")
public String testModel(Model model){
model.addAttribute("testScope", "hello,Model");
return "success";
}
使用map向request域对象共享数据
和Model一样,DispatcherServlet 在接受请求时会自动创建 Map集合,在参数中接收,在方法中使用
@RequestMapping("/testMap")
public String testMap(Map<String, Object> map){
map.put("testScope", "hello,Map");
return "success";
}
使用ModelMap向request域对象共享数据
ModelMap与Model的使用方法完全相同,但底层实现不同
@RequestMapping("/testModelMap")
public String testModelMap(ModelMap modelMap){
modelMap.addAttribute("testScope", "hello,ModelMap");
return "success";
}
Model、ModelMap、map的区别
public interface Model{}
//是一个接口
public class ModelMap extends LinkedhashMap<String,Object>{}
//继承了LinkedHashMap
public class ExtendedModelMap extends MOdelMap implements Model{}
//继承了ModelMap又实现了Model接口
public class BindingAwareModelMap{}
//这个类对应的子类,就可以去实例化ModelMap也可以实例化Model
//因为ModelMap继承了LinkedHashMap所以说,BindingAwareModelMap也可以实例化Map集合
三者的实例化都使用同一类型创建:BindingAwareModelMap
Session 会话域
ServletAPI向 session会话域共享数据 -- 推荐使用,最方便
@RequestMapping("/testSession")
public String testSession(HttpSession session){
session.setAttribute("testSessionScope", "hello,session");
return "success";
}
SpringMVC封装的方法反而更麻烦
Application 应用域
ServletAPI向 application会话域共享数据
@RequestMapping("/testApplication")
public String testApplication(HttpSession session){
ServletContext application = session.getServletContext();
application.setAttribute("testApplicationScope", "hello,application");
return "success";
}
标签:Model,SpringMVC05,对象,ModelMap,request,ModelAndView,共享,public
From: https://www.cnblogs.com/Ashen-/p/17124844.html