这里的属性参数主要是指通过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(十三)--保存并获取属性参数的更多相关文章

  1. Spring MVC 保存并获取属性参数

    在开发控制器的时候,有时也需要保存对应的数据到这些对象中去,或者从中获取数据.而Spring MVC给予了支持,它的主要注解有3个:@RequestAttribute.@SessionAttribut ...

  2. spring mvc从前台往后台传递参数的三种方式

     jsp页面: 第一种:使用控制器方法形参的方式(常用) 第二种:使用模型传参的方式(如果前台往后台传递的参数非常多,如果还使用形参的方式传递,非常复杂.我们可以使用模型传参的方式,把多 个请求的参数 ...

  3. spring mvc在Controller中获取ApplicationContext

    spring mvc在Controller中获取ApplicationContext web.xml中进行正常的beans.xml和spring-mvc.xml的配置: 需要在beans.xml中进行 ...

  4. 使用Spring mvc接收整个url地址及参数时注意事项

    使用Spring mvc接收整个url地址及参数时注意事项:url= http://baidu?oid=9525c1f2b2cd45019b30a37bead6ebbb&td=2015-08- ...

  5. ASP.NET Core MVC里面Razor如何获取URL参数

    原文:ASP.NET Core MVC里面Razor如何获取URL参数 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https:// ...

  6. Spring MVC(三)--控制器接受普通请求参数

    Spring MVC中控制器接受参数的类方式有以下几种: 普通参数:只要保证前端参数名称和传入控制器的参数名称一致即可,适合参数较少的情况: pojo类型:如果前端传的是一个pojo对象,只要保证参数 ...

  7. spring mvc 3.1的自动注入参数遇到的问题

    在网上下载了xheditor作为页面的编辑器,编辑内容后post到后台保存,后台方法用spring mvc的自动注入的方式接收参数. 这种方式在各个浏览器下运行良好,但是在ie11下发现,从word. ...

  8. Spring MVC 页面跳转时传递参数

    页面仍然使用 JSP,在跳转时如果想传递参数则需要用到类 RedirectAttributes. 首先看看如何打开一个普通页面: // 登录页面(每个页面都要独立的 Action 来支持其呈现) @R ...

  9. springMVC(spring)+WebSocket案例(获取请求参数)

    开发环境(最低版本):spring 4.0+java7+tomcat7.0.47+sockjs 前端页面要引入: <script src="http://cdn.jsdelivr.ne ...

随机推荐

  1. LA2218 Triathlon /// 半平面交 oj22648

    题目大意: 铁人三项分连续三段:游泳 自行车 赛跑 已知各选手在每个单项中的速度v[i],u[i],w[i] 设计每个单项的长度 可以让某个特定的选手获胜 判断哪些选手有可能获得冠军 输出n行 有可能 ...

  2. Android笔记之Fragment中创建ViewModel的正确方式

    之前一直都是这么写的 pageViewModel = ViewModelProviders.of(this).get(PageViewModel.class); //参数this是当前fragment ...

  3. python自动化基础(参数化)

    一.创建加法类 #定义一个数学加法类 class Mathmethod(): def add(self,a,b): return(a+b) def sub(self,a,b): return(a-b) ...

  4. weblogic上传木马路径选择

    对于反序列化漏洞,如果获得的是系统权限或者root权限,那就没必要上传木马,但如果只是web安装应用的权限,就上传获取更大权限. 上传需要找到几个点,获取物理路径,如下面三种: 方法1:把shell写 ...

  5. 004-Java进制转换

    整型数据共有4中进制形式 二进制(binary):以0b或者0B开头 十进制(decimal) 八进制(octal):以数字0开头 十六进制(hex):以0x或者0X开头 二进制数据包含原码反码和补码 ...

  6. dl,dt,dd标签 VS 传统table实现数据列表

    过去有很多网页设计师喜欢将他们的网页效果图用table布局实现成网页,但是这样做会遇到一个比较麻烦的问题就是,后期调试和维护会相当的困难.现在,越来越多的前端开发er们开始使用xHTML+CSS替代最 ...

  7. CodeForces - 803F

    http://codeforces.com/problemset/problem/803/F #include <iostream> #include <cstdio> #in ...

  8. react 实现类似vue中的<keep-alive>的功能,并解决antd-mobile切换回来时的空白

    在移动端的spa页面中,只要使用到了路由就很有必要使用到状态保存的功能,这样才能保证在页面进行切换的时候,让用户可以看到刚才滑动的地方,让用户的体验更加友好.这儿我找到了react-router-ca ...

  9. python封装email模块

    一.代码 from email.mime.text import MIMEText from email.header import Header from email.utils import pa ...

  10. CSS3视口单位vw,wh

    vw和vh是视口(viewport units)单位,何谓视口,就是根据你浏览器窗口的大小的单位,不受显示器分辨率的影响,是不是很神奇,这就代表了,我们不需要顾虑到现在那么多不同电脑有关分辨率的自适应 ...