Spring MVC组件开发-保存并获取属性参数

在java web学习中,我们会暂存(共享)数据到http的request对象或者session对象中,在开发控制器的时候,有时也需要保存对应的数据到这些对象中去,或者从中获取数据。而spring mvc提供了支持,主要注解有三个:@RequestAttribute、@SessionAttribute、@SessionAttributes,它们的作用如下:

  • @RequestAttribute获取http的请求(request)对象属性值,用来传递给控制器的参数。
  • @SessionAttribute在http的会话(session)对象属性值中,用来传递给控制器的参数。
  • @SessionAttributes,可以给它配置一个字符串数组,这个数组对应的是数据模型对应的键值对,然后将这些键值对保存到session中。

也许你会留意到并没有@RequestAttributs这个注解,那是因为在请求的范围中,springmvc更希望你使用它所提供的数据模型。它的数据模型本身就是在请求的生命周期中存在的。

1 注解@RequestAttribute

主要作用是从http的request对象中取出请求属性,它的范围周期在一次请求中存在

jsp:

<c:set var="title" value="葫芦娃大战变形金刚" scope="request"/>  
<jsp:forward page="/book/requestAttribute"/>  

 后台

@RequestMapping("/book/requestAttribute")  

public String requestAttr(@RequestAttribute("title") String title){  
  ........  
}  

这样就可以获取请求的title属性了,对于@RequestAttribute注解的参数,默认是不能为空的,否则系统会抛出异常。和@RequestParam一样,它也有一个required配置项,只需要设置它为false,参数就可以为空了:@RequestAttribute(name="title",required=false)

2 注解@SessionAttribute和@SessionAttributs

这两个注解和http的session会话对象有关,可以让我们在和服务器会话期间通过它读/写会话对象的属性,缓存一定数据信息。

先来设置会话属性,在控制器中可以使用注解@SessionAttributes来设置对应的键值对,不过这个注解只能对类进行标注,不能对方法或者参数标注。可以配置属性名称或者属性类型。它的作用是:当这个控制器被注解后,SpringMvc执行完控制器的逻辑后,将数据模型中对应的属性名称或者属性类型保存到http的session对象中

package com.wise.tiger.controller;  
  
@Controller  
@RequestMapping("book")  
//可以配置数据模型的名称和类型,两者取或关系  
@SessionAttributes(names={"id"},types={Book.class})  
public class AttributeController{  
   @Autowired private BookService service;  
  
   @RequestMapping("/sessionAttributes")  
   public String sessionAttrs(Integer id,Model model){  
      //根据类型,session将会保存图书信息  
       model.addAttribute("book",service.findById(id));  
     //根据名称,session将会保存id  
       model.addAttribute("id",id);  
       return "show";  
   }  
}  

 /WEB-INF/pages/show.jsp:

${sessionScope.id}

${sessionScope.book.title}

这样就可以在控制器内不使用servlet的api造成侵入的HttpSession对象来设置session的属性了,这更加有利于对测试环境的构建进行测试。既然有了设置Session的属性,那么自然就有读取session属性的要求,通过@SessionAttribute实现

jsp:

<c:set var="id" value="1" scope="session"/>  
<c:redirect url="/book/sessionAttr"/>  

后台controller获取session属性值:

@RequestMapping("/book/sessionAttribute")  
public String sessionAttr(@SessionAttribute("id") Integer id){  
  ........  
}  

 和@RequestParam一样,@SessionAttribute注解的参数默认是不能为空的,如果要改变这个规则。修改required配置项为false即可。

3 注解@CookieValue和注解@RequestHeader

从名称而言,这两个注解都很明确,就是从cookie和http请求头获取对应的请求信息,它们的用法比较简单,其大同小异:

@RequestMapping("/getHeaderAndCookie")  
public  String getHeaderAndCookie(@RequestHeader(value="User-Agent",required=false,defaultValue="attribute") String userAgent,
@CookieValue(value="JSESSIONID",required=true,defaultValue="jsession-id" String sessionId){  
 .........  
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值