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中使用
@Autowired
private HttpSession session;
@Autowired
private HttpServletRequest request;
<3>在普通类中使用
//获取request
public static HttpServletRequest getRequest(){
HttpServletRequest req = ((ServletRequestAttributes)
RequestContextHolder.getRequestAttributes()).getRequest();
return req;
}
//获取response
public 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;
}