这里的属性参数主要是指通过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. Django 分页器模板

    返回链接: djang ORM 分页器模板: class Pagination(object): def __init__(self,current_page,all_count,per_page_n ...

  2. Java 巴什博弈(取石子报数问题)

    巴什博弈:有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜.   规律:如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一 ...

  3. thinkphp 标签嵌套

    模板引擎支持标签的多层嵌套功能,可以对标签库的标签指定可以嵌套. 直线电机价格 系统内置的标签中,volist.switch.if.elseif.else.foreach.compare(包括所有的比 ...

  4. TopCoder代码格式模板

    $BEGINCUT$ $PROBLEMDESC$ $ENDCUT$ #include<bits/stdc++.h> using namespace std; class $CLASSNAM ...

  5. rancher v2.2.4创建kubernetes集群出现[etcd] Failed to bring up Etcd Plane: [etcd] Etcd Cluster is not healthy

    主机:rancher(172.16.2.17),master(172.16.2.95),node01(172.16.2.234),node02(172.16.2.67) 问题:开始是用的rancher ...

  6. 没有找到mfc100.dll

    转自VC错误:http://www.vcerror.com/?p=86 问题描述: 生成的exe文件在编译的时候会提示"没有找到mfc100.dll",这个时候需要更改配置为静态编 ...

  7. FHS 文件层次标准

    FHS:文件层次标准 操作系统自身运行使用的 /bin: 存放可执行的二进制程序,管理员和普通用户都可以使用 /sbin:管理员才能执行的命令 运行正常功能的程序存放位置 /usr/bin /usr/ ...

  8. error C2146: 语法错误: 缺少“;”(在标识符“CRC”的前面) ...\...\MyMethod.h

    错误原因:头文件的顺序错误,这种情况一般是因为dxsdk的头文件放在其他头文件前面了. 问题复现: 这里如果将#include <ReadDataThreadClass.h>放到最末尾就不 ...

  9. 图解 5 种 Join 连接及实战案例!(inner/ left/ right/ full/ cross)

    Join 连接在日常开发用得比较多,但大家都搞清楚了它们的使用区别吗??一文带你上车~~ 内连接 inner join 内连接是基于连接谓词将俩张表(如A和B)的列组合到一起产生新的结果表,在表中存在 ...

  10. HYNB Round 8: 2016 ICPC Amritapuri Regionals

    HYNB Round 8: 2016 ICPC Amritapuri Regionals A - Tim and BSTs 做法 经典的树 DP 问题. \(dp[u][i]\) 表示考虑以 u 为根 ...