AOP 获取 RequestContextHolder
来源:互联网 发布:什么电子书软件免费 编辑:程序博客网 时间:2024/04/28 20:28
转载: http://blog.csdn.net/lexang1/article/details/52619215
在使用spring时,经常需要在普通类中获取session,request等对像.
比如一些AOP拦截器类,在有使用struts2时,因为struts2有一个接口使用org.apache.struts2.ServletActionContext即可很方便的取到session对像.
用法:
但在单独使用spring时如何在普通类中获取session,reuqest呢?
首先要在web.xml增加如下代码:
使用方法:
在普通bean中
在普通类中
你必须要有一个request的引用,否则是取不到的。request可以通过控制器传入,有了request自然就可以取到session了,或者可以通过spring的WebUtils取Session数据,如下:
拦截器举例:
RequestContextHolder使用误区
在spring mvc中,为了随时都能取到当前请求的request对象,可以通过RequestContextHolder的静态方法getRequestAttributes()获取Request相关的变量,如request, response等。
在大部分的情况下,它都能很好地工作,但在商品管理编辑中,新增商品时,却出现了意外的问题:通过RequestHolder.getRequest().getParameter()得不到参数值,通过debug发现,通过spring mvc的method注入的request对象实际为MultipartHttpServletRequest,而通过RequestHolder.getRequest()获取到的request对象却是RequestFacfade的实例。
原来在商品新增时,由于使用了文件上传,form表单的enctype类型为”multipart/form-data”,spring mvc对文件上传的处理类实际却为spring-mvc.xml文件中配置的CommonsMultipartResolver, 该类先判断当前请求是否为multipart类型,如果是的话,将request对象转为MultipartHttpServletRequet,相关的源码见DisptcherServlet
那么,RequestContextHolder中的request又是从哪来的呢?
继续翻看DispatcherServlet的源码,从其父类FrameworkServlet中找到的processRequest()以相关方法源码:
从这里可以看到,initContextHolder()方法中完成了RequestContextHolder的requestAttributes设置,而doService()在这之后调用,DispatcherServlet中的processRequest()方法即在doService()之中,所以从RequestContextHolder中获取到的就是原来的RequestFacade对象,而不是经过spring mvc处理之后的MultipartHttpServletRequest对象,其后果就是,从RequestContextHolder获取request后,无法直接通过getParameter()获取参数值。
最便捷的解决办法:
直接将HttpServletRequest作为spring mvc的方法入参,即可以正确获取参数值。
- AOP 获取 RequestContextHolder
- 通过RequestContextHolder获取HttpServletRequest
- RequestContextHolder 获取request
- spring,struts2在普通类中获取session和request,及RequestContextHolder使用误区
- 如何在非Controller中获取Request和Response:SpringMVC之RequestContextHolder分析
- SpringMVC之RequestContextHolder分析
- SpringMVC之RequestContextHolder分析
- SpringMVC之RequestContextHolder分析
- AOP中获取注解
- RequestContextHolder分析及Java代码
- SpringMVC的RequestContextHolder详解分析
- spring aop -- 获取注解值
- [JShop]Spring MVC的RequestContextHolder使用误区
- SpringMVC学习记录(九)--RequestContextHolder分析
- Spring MVC的RequestContextHolder使用误区
- Spring MVC的RequestContextHolder使用误区
- Spring MVC的RequestContextHolder使用及误区
- spring Aop 配置文件方式+JoinPoint获取参数
- Xcode 8上 storyboard xib 使用imageView不显示问题
- Qt实现读取配置文件内容(与system函数结合)
- logback的使用和logback.xml详解
- ajax中的this处理方式
- python 脚本注释
- AOP 获取 RequestContextHolder
- FPGA在AD采集中的应用
- 每一个软件开发人员绝对必须掌握的关于 Unicode 和字符集的最基础的知识
- HTML表格3
- MD5加密
- qss界面制作
- 《JavaScript DOM编程艺术》读书笔记
- Visual Studio 2017 + java + C++ and swig
- python(2)--语法