1、Request域
在SpringMVC中,一般在进行页面跳转时,都会带上该处理器处理完成的数据。我们都知道,SpringMVC的底层是封装了Servlet的代码,所以在SpringMVC中可以使用Servlet中的域对象,当然SpringMVC也额外给我们封装一些其它的域对象供我们使用,如Model、ModelMap。
注:Model、ModelMap和Map的底层其实都是封装了Request请求。
①、使用Model对象
在方法中将Model以形参的形式设置,使用addAttribute设置要传输的数据(注意是addAttribute属性,不是setAttribute)。返回值就是页面名称,这种方式比较常用。
@RequestMapping("/requestAttrModel")
public String requestAttrModel(Model model) {
model.addAttribute("username", "张三");
model.addAttribute("password", "123456");
return "success";
}
②、使用ModelMap
ModelMap 是个Map集合可以使用Map的基本功能,ModelMap 也定义了addAttribute()方法
@RequestMapping("/requestAttrModelMap")
public String requestAttrModelMap(ModelMap modelMap) {
modelMap.addAttribute("username", "张三");
modelMap.put("password","123456");
return "success";
}
③、使用Map
@RequestMapping("/requestAttrMap")
public String requestAttrMap(Map<String, Object> map) {
map.put("mapName", "mapValue");
return "success";
}
④、使用HttpServletRequest
这是Servlet中原生的Request域对象。
@RequestMapping("/requestAttrRequest")
public String requestAttrRequest(HttpServletRequest request) {
request.setAttribute("grapeAttrName", "grapeAttrName");
return "success";
}
2、Session域
向session域存入数据,真正有效的办法只有一个,直接使用Servlet原生的Session域对象
@RequestMapping("/sessionAttr")
public String sessionAttr(HttpSession session) {
session.setAttribute("sessionAttrName", "sessionAttrValue");
return "success";
}
3、Application域
向application域存入数据需要先拿到ServletContext对象。前面介绍过获取ServletContext对象的两种方法。拿到ServletContext对象后调用setAttribute()方法,即可,用的比较少,可以用来加载网页中不经常改变的数据。
@Autowired
private ServletContext servletContext;
@RequestMapping("/application/scope")
public String applicationScope() {
servletContext.setAttribute("appName", "appValue");
return "success";
}
4、ModelAndView(推荐)
ModelAndView我们平时中使用的最多的,它表示封装了ModelMap请求域和视图的对象(即数据模型+视图)。使用步骤如下所示:
- 首先new一个ModelAndView实例
- 使用addObject()设置需要像页面传输的数据
- 使用setViewName()设置需要跳转的视图页面
- 最后将ModelAndView对象返回
- 这样前台就可以通过EL表达式${name}获取数据了
@RequestMapping("/modelAndView")
public ModelAndView testModelAndView() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("mavAttrName1", "mavAttrValue1");
modelAndView.addObject("mavAttrName2", "mavAttrValue2");
modelAndView.setViewName("success");
return modelAndView;
}
如果要在ModelAndView中使用转发和重定向也可以在setViewName()中设置。
//转发
modelAndView.setViewName("forward:/WEB-INF/pages/show.jsp");
//重定向,注:重定向不能访问/WEB-INF资源,因为是两次请求
modelAndView.setViewName("redirect:/hello.jsp");