SpringMVC_RequestContextHolder获取请求参数

来源:互联网 发布:java编程思想 pdf 编辑:程序博客网 时间:2024/06/03 13:40

1. 背景
 我们在使用spring的时候,经常需要在普通类中获取request参数或session参数。在spring中,我们不可避免会使用到Aspect Oriented Programming (面向切面编程)拦截器,在整合struts2的时候,因为struts2提供了一个接口org.apache.struts2.ServletActionContext,可以很方便的获取到session对象。

//struts2获取请求对象public static HttpServletRequest getRequest(){    return ServletActionContext.getRequest();}//struts2获取输出对象public static HttpServletRequest getResponse(){    return ServletActionContext.getResponse();}

2. 单单是用spring来获取
 如果我们的项目没有整合struts2,那么怎样在普通类中获取session,request?
<1>配置web.xml

<listener>  <listener-class>     org.springframework.web.context.request.RequestContextListener  </listener-class></listener>

<2>在普通bean中使用

@Autowiredprivate HttpSession session;@Autowiredprivate HttpServletRequest request;

<3>在普通类中使用

//获取requestpublic static HttpServletRequest getRequest(){    HttpServletRequest req =    ((ServletRequestAttributes)    RequestContextHolder.getRequestAttributes()).getRequest();    return req;}//获取responsepublic static HttpServletReponse getResponse(){    HttpServletResponse resp = ((ServletResponseAttributes)    RequestContextHolder.getResponseAttributes()).getResponse();    return resp;}

 当然你必须要有一个request的引用,否则还是取不到的。request可以通过控制器传入,有了request就很容易取到session,或者通过spring的WebUtils取到Session数据,如下:

//拦截器举例public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler)throws Exception{    String context = (String)WebUtils.getSessionAttribute(request,"context_key");    return != null;}