首页 > 其他分享 >SpringMVC05 - 域对象共享数据

SpringMVC05 - 域对象共享数据

时间:2023-02-15 21:56:45浏览次数:39  
标签:Model SpringMVC05 对象 ModelMap request ModelAndView 共享 public

三种域对象: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

相关文章