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");