SpringMVC中request域共享数据的方法--这么多方法,原理都一样,你要pick哪个?

在这里插入图片描述
SpringMVC中向request域放数据时,有5种方法:

1. 原生的Servlet

有点混搭了, 都有了Spring框架了,还使用Servlet写代码,是不是有点对不起这个框架呢?

  1. HTML 中
<a th:href="@{/testServlet}"> test testServlet</a>
  1. SpringMVC的控制器方法如下写法
@RequestMapping("/testServlet")
public String testServlet(HttpServletRequest request, HttpServletResponse response) {
    
    
    request.setAttribute("key", "value");
    return "scopesucc";
}
  1. 返回数据
<p th:text="${key}"></p>

2. SpringMVC常用 ModelAndView 实现

@RequestMapping("/testScope")
public ModelAndView testScope(){
    
    
    ModelAndView mov = new ModelAndView();

    mov.addObject("key1", "value1");

    mov.setViewName("scopesucc");
    return mov;
}

3. Model、Map和ModelMap 实现

@RequestMapping("/testModel")
public String testModel(Model model){
    
    
    model.addAttribute("key2", "value2");
    return "scopesucc";
}
@RequestMapping("/testMap")
public String testModel(Map<String, Object> map){
    
    
    map.put("key3", "value3");
    return "scopesucc";
}
@RequestMapping("/testModelMap")
public String testModelMap(ModelMap modelMap){
    
    
    modelMap.addAttribute("key4", "value4");
    return "scopesucc";
}

如果分别看下 这个对象所属的类,比如 model.getClass().getName(),我们会发现,这三种实现方式的mode/map/modelMap 对象都是 BindingAwareModelMap 类的示例。

我们看下这几个类、接口的关系。很显然,IoC容器中将 BindingAwareModelMap 的实例注入到了我们的控制器方法形参中。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/asdfjklingok/article/details/119842783