1. 程式人生 > >Spring MVC(十三)--保存並獲取屬性參數

Spring MVC(十三)--保存並獲取屬性參數

信息 sta ams val esp 路徑 也會 user 方法

這裏的屬性參數主要是指通過request、session、cookie等設置的屬性,有時候我們需要將一些請求的參數保存到HTTP的request或者session對象中去,在控制器中也會進行設置和獲取操作,spring mvc使用註解的方式支持這些場景,主要的註解有以下幾個:

  • @RequestAttribute:獲取通過request對象設置的屬性值;
  • @SessionAttribte:獲取通過session對象設置的屬性值;
  • @SessionAttributes:作用在類上,用來將獲取的參數設置到session中,有name和type兩個屬性,當通過ModelAndView的addObject方法時就會根據名稱或類型將對應的值設置到session中;
  • @CookieValue:獲取保存在cookie中的屬性值;
  • @RequestHeader:獲取請求頭中的相關信息;

下面一一介紹各註解的用法:

一、註解@RequestAttribute

因為是獲取方法,所以先要通過頁面設置一些屬性。

1??jsp中設置請求屬性

<%
        request.setAttribute("username", "hello");
    request.setAttribute("msg", "World");
    request.getRequestDispatcher("./reqAttr").forward(request, response);
%>

2??在映射路徑所在的控制器中獲取

@RequestMapping("reqAttr")
    public ModelAndView getRequeParam(@RequestAttribute("username") String uname, @RequestAttribute("msg") String msg) {
        ModelAndView mv = new ModelAndView();
        System.out.println(uname + "----" + msg);
        mv.addObject(
"uname", uname); mv.addObject("msg", msg); mv.setViewName("jump/requestAttribute"); return mv; }

上面紅色加粗部分的代碼就是獲取通過request對象設置的屬性值;

二、註解@SessionAttribte

1??jsp中設置session屬性

<body>

    <%
        session.setAttribute("session1", "sessionsddffdfd");
        response.sendRedirect("./getSession");
    %>
</body>

2??在控制器中獲取屬性

@RequestMapping("getSession")
    public ModelAndView setSession(@SessionAttribute("testSession") String msg) {
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg", msg);
        mv.setViewName("jump/testSession");
        return mv;
    }

紅色加粗部分就是獲取session屬性的方法;

三、註解@SessionAttributes

這個註解只能作用在類上面,不能對方法和參數進行註解。

@SessionAttributes(names = { "params" }, types = { Param.class }) // 將param對象保存到session中

當在類上設置上述註解後,Spring MVC在執行完控制器邏輯後,就會將數據模型中對應的屬性名稱或屬性類型保存到HTTP的session中,比如執行下面這個方法後:

    @RequestMapping("nextPage1")
    public ModelAndView nextPage(Param param) {
        ModelAndView mv = new ModelAndView();
        System.out.println("header-userAgent:" + userAgent + ";cookie-jessionId:" + jessonId);
        mv.addObject("params", param);
        mv.setViewName("jump/jump");
        return mv;
    }

上述方法中獲取到了一個Param對象,當執行完這個方法之後,param對象就會被保存到session中,通過名稱params就能獲取到屬性值;

四、註解@CookieValue

   @RequestMapping("nextPage1")
    public ModelAndView nextPage(@CookieValue(value = "JESSIONID", required = true, defaultValue = "MyJessionId") String jessonId,
            Param param) {
        ModelAndView mv = new ModelAndView();
        System.out.println("header-userAgent:" + userAgent + ";cookie-jessionId:" + jessonId);
        mv.addObject("params", param);
        mv.setViewName("jump/jump");
        return mv;
    }

上面紅色加粗部分就是獲取cookie值的方式;

五、註解@RequestHeader

@RequestMapping("nextPage1")
    public ModelAndView nextPage(@RequestHeader(value = "User-Agent", required = false, defaultValue = "attribute") String userAgent,
            Param param) {
        ModelAndView mv = new ModelAndView();
        System.out.println("header-userAgent:" + userAgent + ";cookie-jessionId:" + jessonId);
        mv.addObject("params", param);
        mv.setViewName("jump/jump");
        return mv;
    }

上面紅色加粗部分就是獲取HTTP請求頭的方式;

Spring MVC(十三)--保存並獲取屬性參數