在网上看到有很多人说以下方式获取:java
1.在web.xml中添加监听web
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
spring
2.在aop类中有如下两种方式获取session
@Autowired
HttpServletRequest request; //这里能够获取到requestapp
或者ide
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();url
可是我试后,发现都获取不到。spa
既然这样那就要用其余方式获取了。code
1. 新建一个存储request、response对象的类xml
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; 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(); } }
2. 新建一个filter,并在web.xml中添加filter配置
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class InitContent implements Filter { @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 { } @Override public void destroy() { } }
web.xml
<filter> <filter-name>InitContent</filter-name> <filter-class>com.*.filter.InitContent</filter-class> </filter> <filter-mapping> <filter-name>InitContent</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
这样一来,每次请求的request、response都存在了ThreadLocal中,每次须要的时候从里面获取便可
HttpServletRequest request = SysContent.getRequest();HttpServletResponse response = SysContent.getResponse();HttpSession session = SysContent.getSession();