比如一些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类中:
- <span style="font-size:14px;"> @Autowired
- private HttpSession session;
- @Autowired
- 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();
}