资讯专栏INFORMATION COLUMN

3.11、@SessionAttribute 和 @RequestAttribute

Profeel / 1347人阅读

摘要:对于暂存在会话中的用作控制器工作流一部分的模型属性,要像使用存储模型属性到请求共享的会话一节中描述的那样使用。

  本篇示例见这个项目的 mvc 分支下的 SesAndReqAttrController.java

① 使用@SessionAttribute来访问预先存在的全局会话属性

  如果你需要访问预先存在的、以全局方式管理的会话属性的话,比如在控制器之外(比如通过过滤器)可能或不可能存在在一个方法参数上使用注解@SessionAttribute

    /**
     * 在处理请求 /helloWorld/jump 的时候,会在会话中添加一个 sessionStr 属性。
     * 

* 这里可以通过@SessionAttribute 获取到 */ @RequestMapping("/sesAttr") public String handleSessionAttr(@SessionAttribute(value = "sessionStr") String sessionStr, Model model) { System.out.println("--> sessionStr : " + sessionStr); model.addAttribute("sth", sessionStr); return "/examples/targets/test1"; }

  为了使用这些需要添加或移除会话属性的情况,考虑注入org.springframework.web.context.request.WebRequestjavax.servlet.http.HttpSession到一个控制器方法中。

  对于暂存在会话中的用作控制器工作流一部分的模型属性,要像“使用 @SessionAttributes 存储模型属性到请求共享的HTTP会话”一节中描述的那样使用SessionAttributes。

② 使用@RequestAttribute访问请求属性

  就像@SessionAttribute一样,注解@RequestAttribute可以被用于访问由过滤器或拦截器创建的、预先存在的请求属性:

    @RequestMapping("/reqAttr")
    public String handle(@RequestAttribute("reqStr") String str, Model model)
    {
        System.out.println("--> reqStr : " + str);
        model.addAttribute("sth", str);
        return "/examples/targets/test1";
    }

  可以使用下面的过滤器进行测试:

@WebFilter(filterName = "myFilter", description = "测试过滤器", urlPatterns = { "/*" })
public class MyFilter implements Filter
{
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException
    {}
    
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
    {
        System.out.println("--> MyFilter Do.");
        request.setAttribute("reqStr", "万万没想到,啦啦啦啦啦!");
        
        chain.doFilter(request, response);
        
    }
    
    @Override
    public void destroy()
    {}
    
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66062.html

相关文章

  • 从原理层面掌握@RequestAttribute、@SessionAttribute的使用【一起学S

    摘要:同时另外一个目的是希望完全屏蔽掉源生,增加它的扩展性。本文我以为例进行讲解,因为也是后推出的注解不管从使用和原理上都是一模一样的。作用从中取对应的属性值。 每篇一句 改我们就改得:取其精华,去其糟粕。否则木有意义 前言 如果说知道@SessionAttributes这个注解的人已经很少了,那么不需要统计我就可以确定的说:知道@RequestAttribute注解的更是少之又少。我觉得主...

    why_rookie 评论0 收藏0
  • 从原理层面掌握@ModelAttribute的使用(使用篇)【一起学Spring MVC】

    摘要:和一起使用参照博文从原理层面掌握的使用一起学。至于具体原因,可以移步这里辅助理解从原理层面掌握的使用核心原理篇一起学再看下面的变种例子重要访问。 每篇一句 每个人都应该想清楚这个问题:你是祖师爷赏饭吃的,还是靠老天爷赏饭吃的 前言 上篇文章 描绘了@ModelAttribute的核心原理,这篇聚焦在场景使用上,演示@ModelAttribute在不同场景下的使用,以及注意事项(当然有些...

    BenCHou 评论0 收藏0
  • 从原理层面掌握@SessionAttribute的使用【一起学Spring MVC】

    摘要:见名之意,它是处理器,也就是解析这个注解的核心。管理通过标注了的特定会话属性,存储最终是委托了来实现。只会清楚注解放进去的,并不清除放进去的它的唯一实现类实现也简单。在更新时,模型属性与会话同步,如果缺少,还将添加属性。 每篇一句 不是你当上了火影大家就认可你,而是大家都认可你才能当上火影 前言 该注解顾名思义,作用是将Model中的属性同步到session会话当中,方便在下一次请求中...

    ARGUS 评论0 收藏0
  • Spring常用Annotation简介

    摘要:在中使用该注解,表示按注入。显示声明依赖,根据来默认注入是必须的。此注解使用在上,声明此类是一个服务类,执行业务逻辑计算调用内部等。此类使用在上声明此类用于访问数据库,一般作为的角色。此外,之后引入了一系列的变种。负责将对象转换为请求。 Annotation介绍 Spring项目开发常用Annotation Java @Resource Resource 注释标记应用程序所需的资源。...

    MockingBird 评论0 收藏0
  • 从原理层面掌握@ModelAttribute的使用(核心原理篇)【一起学Spring MVC】

    摘要:虽然它不是必须,但是它是个很好的辅助官方解释首先看看官方的对它怎么说它将方法参数方法返回值绑定到的里面。解析注解标注的方法参数,并处理标注的方法返回值。 每篇一句 我们应该做一个:胸中有蓝图,脚底有计划的人 前言 Spring MVC提供的基于注释的编程模型,极大的简化了web应用的开发,我们都是受益者。比如我们在@RestController标注的Controller控制器组件上用@...

    wdzgege 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<