SpringMVC中向request域放数据时,有5种方法:
1. 原生的Servlet
有点混搭了, 都有了Spring框架了,还使用Servlet写代码,是不是有点对不起这个框架呢?
- HTML 中
<a th:href="@{/testServlet}"> test testServlet</a>
- SpringMVC的控制器方法如下写法
@RequestMapping("/testServlet")
public String testServlet(HttpServletRequest request, HttpServletResponse response) {
request.setAttribute("key", "value");
return "scopesucc";
}
- 返回数据
<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 的实例注入到了我们的控制器方法形参中。