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请求头的方式;

原文地址:https://www.cnblogs.com/hellowhy/p/9746745.html

时间: 2024-07-29 14:30:30

Spring MVC(十三)--保存并获取属性参数的相关文章

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

在网上下载了xheditor作为页面的编辑器,编辑内容后post到后台保存,后台方法用spring mvc的自动注入的方式接收参数. 这种方式在各个浏览器下运行良好,但是在ie11下发现,从word.文本编辑器或者其它编辑器复制内容到xheditor后,这时提交到后台的参数不能被接收到. 仔细排查下发现ie11下复制到xheditor的内容都被默默的加了一段无用的div: <div style="top: 0px;"> </div> 此时用最原始的接收参数的方式

使用Spring MVC 的 @RequestBody 映射json请求参数时报异常问题

使用Spring MVC 的 @RequestBody 映射json请求参数时报"The request sent by the client was syntactically incorrect."异常解决方案 最近工作中开发RESTful接口需要处理客户端上传的json,图方便想起Spring的Controller中有@RequestBody可以优雅地完成json报文与Java类的映射,但是使用时碰到了 "The request sent by the client w

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

Spring MVC中控制器接受参数的类方式有以下几种: 普通参数:只要保证前端参数名称和传入控制器的参数名称一致即可,适合参数较少的情况: pojo类型:如果前端传的是一个pojo对象,只要保证参数名称和pojo属性一致即可: 注解方式:当前端参数名和控制器名称不一致时可以使用注解方式,比如前端是param_id,而控制器中是paramId的情况: URL方式:当前端以restful格式传递参数时,后台使用这种方式接受: JSON方式:前后端如果用json方式交互时,可以使用这种方式,这是常用

Spring MVC 从页面向Controller传递参数的方式

Spring MVC从页面向Controller传值的方式 从页面向Controller 传值的方式有很多,本文整理出常用的从页面向Controller传值的几种方式: 1.通过HttpServletRequest 向后台传递数据      页面程序如下: <h2>利用HttpServletRequest传数据</h2> <form action="loginToJson"> 用户名:<input name="name" /

Spring MVC之适配器的获取及执行(RequestMappingHandlerAdapter)

首先看下doDispatch()方法如何找到适合的适配器来执行方法的: 1 protected HandlerAdapter getHandlerAdapter(Object handler) throws ServletException { 2 Iterator i$ = this.handlerAdapters.iterator(); 3 4 HandlerAdapter ha; 5 do { 6 if (!i$.hasNext()) { 7 throw new ServletExcept

MVC中使用UpdateModel获取接口参数

废话少说,直接上代码: 模型类定义: public class RequestModel { public string Name { get; set; } public float Age { get; set; } } 获取接口参数示例: public ActionResult Index() { //获取参数 RequestModel r = new RequestModel(); UpdateModel<RequestModel>(r); //拼接参数展示文字 string msg

Spring MVC 之请求处理方法可接收参数(二)

请求处理方法可接收参数 今天学习了前三个方法. 1.作用域对象2.单个表单提交数据3.表单数据封装的Bean对象 首先创建一个实体对象. 1 package com.cy.springannotation.entity; 2 /** 3 * 定义一个表单实体类 4 * @author acer 5 * 6 */ 7 public class UserBean { 8 //要求属性名必须要和表单的参数名一样的! 9 private String username; 10 private Strin

asp.net mvc 在View中获取Url参数的值

如果url是 /home/index?id=3 直接Request就ok. 但是如果路由设定为:{controller}/{action}/{id} url是 /home/index/3   这时想在页面View中获取参数id的值,该怎么获取? 查了下资料好多人都利用Action获取到参数值后,用Viewdata传到View中例如Controlers中的phonelist这样定义  public ActionResult phonelist(int id)    {    ViewData["i

Spring Mvc 前台数据的获取、SpringMvc 表单数据的获取

首先在web.xml 里面配置一个编码过滤器 1 <!-- springmvc框架本身没有处理请求编码,我们自己配置一个请求编码过滤器 --> 2 <filter> 3 <filter-name>encodingFilter</filter-name> 4 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 5 <