zoukankan      html  css  js  c++  java
  • Spring MVC(十三)--保存并获取属性参数

    这里的属性参数主要是指通过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请求头的方式;

  • 相关阅读:
    hdu 4946 Area of Mushroom(凸包)
    uva 10065 (凸包+求面积)
    hdu 3934&&poj 2079 (凸包+旋转卡壳+求最大三角形面积)
    Codeforces Round #237 (Div. 2) B题模拟题
    Codeforces Round #237 (Div. 2) A
    zoj 1377 || poj 1228 Grandpa's Estate (看了题解,待解决)
    poj 1584 看懂题意----待解决
    Codeforces Round #249 (Div. 2) C题,模拟画图 ----未解决!
    Codeforces Round #249 (Div. 2)B(贪心法)
    MMORPG大型游戏设计与开发(客户端架构 part3 of vegine)
  • 原文地址:https://www.cnblogs.com/hellowhy/p/9746745.html
Copyright © 2011-2022 走看看