spring的普通类中如何取session和request对像

在使用spring时,经常需要在普通类中获取session,request等对像.
比如一些AOP拦截器类,在有使用struts2时,因为struts2有一个接口使用org.apache.struts2.ServletActionContext即可很方便的取到session对像.
用法:ServletActionContext.getRequest().getSession();
但在单独使用spring时如何在普通类中获取session,reuqest呢?
其实也是有办法的.
首先要在web.xml增加如下代码:
 <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
 </listener>

接着在普通bean类中:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:14px;">    @Autowired  
  2.     private HttpSession session;  
  3.   
  4.     @Autowired  
  5.     private HttpServletRequest request;</span>  



即可,在类中使用session对像了,是不是很方便呢..
之所以要写出来是因为目前网上关于这个的用法,都是用什么写个lister再把session保存起来,太麻烦了.
spring这么强大的框架,当然他们早也想到了.所以才有了我们这么方便的使用方法.



前加了上面的listener后也可以使用代码的方式获取reuqest对像

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();


第二种:

思路:在web.xml中添加过滤器,然后在系统启动时将request和session放入ThreadLocal中,然后在普通的class中就可以用了

代码如下:

1.web.xml

<!-- 拦截,设置request, 为了在aop的切面方法中获得session -->
  <filter>  
<filter-name>GetContent</filter-name>  
<filter-class>cn.cblink.plat.aop.GetContent</filter-class>  
  </filter>  
<filter-mapping>  
<filter-name>GetContent</filter-name>  
<url-pattern>/*</url-pattern>  
</filter-mapping>
  <!-- 设置request, 为了在aop的切面方法中获得session -->

2、java 代码:过滤器

/**
 * 
 * @author zhanglw
 *拦截器,设置request和response
 */
public class GetContent implements Filter {


@Override
public void destroy() {


}


@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
SysContent.setRequest((HttpServletRequest)arg0);
SysContent.setResponse((HttpServletResponse)arg1);
arg2.doFilter(arg0,arg1);  


}


@Override
public void init(FilterConfig arg0) throws ServletException {
}


}

设置代码:

/**
 * 
 * @author zhanglw
 *将拦截器传来的request和response设置在ThreadLocal中
 */
public class SysContent {


private static ThreadLocal<HttpServletRequest> requestLocal= new ThreadLocal<HttpServletRequest>();  
    private static ThreadLocal<HttpServletResponse> responseLocal= new ThreadLocal<HttpServletResponse>();  
      
   public static HttpServletRequest getRequest() {  
       return (HttpServletRequest)requestLocal.get();  
   }  
   public static void setRequest(HttpServletRequest request) {  
       requestLocal.set(request);  
   }  
   public static HttpServletResponse getResponse() {  
       return (HttpServletResponse)responseLocal.get();  
   }  
   public static void setResponse(HttpServletResponse response) {  
       responseLocal.set(response);  
   }  
   public static HttpSession getSession() {  
       return (HttpSession)((HttpServletRequest)requestLocal.get()).getSession();  
   }  


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值