SpringMVC入門學習(七)----將數據放入域對象中 (request、session、application)


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM