Spring MVC(十三)--保存並獲取屬性參數
阿新 • • 發佈:2018-10-06
信息 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(十三)--保存並獲取屬性參數