1:ThreadLocal 方法
package com.rtt.cppcc.basicinfo.util;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class ServletUtil {
private ServletContext context;
private HttpServletRequest request;
private HttpServletResponse response;
private HttpSession session;
private final static ThreadLocal<ServletUtil> contexts = new ThreadLocal<ServletUtil>();
/**
* 初始化请求上下文
* @param ctx
* @param req
* @param res
*/
public static ServletUtil begin(ServletContext ctx, HttpServletRequest req, HttpServletResponse res) {
ServletUtil rc = new ServletUtil();
rc.context = ctx;
rc.request = req;
rc.response = res;
rc.session = req.getSession(false);
contexts.set(rc);
return rc;
}
/**
* 获取当前请求的上下文
* @return
*/
public static ServletUtil get(){
return contexts.get();
}
public void end() {
this.context = null;
this.request = null;
this.response = null;
this.session = null;
contexts.remove();
}
public HttpSession getSession() {
return session;
}
public void setSession(HttpSession session) {
this.session = session;
}
public ServletContext getContext() {
return context;
}
public void setContext(ServletContext context) {
this.context = context;
}
public HttpServletRequest getRequest() {
return request;
}
public void setRequest(HttpServletRequest request) {
this.request = request;
}
public HttpServletResponse getResponse() {
return response;
}
public void setResponse(HttpServletResponse response) {
this.response = response;
}
}
2:过滤器
package com.rtt.cppcc.basicinfo.util;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletFilter implements Filter {
private ServletContext context;
@Override
public void destroy() {
// TODO Auto-generated method stub
ServletUtil.get().end();//清除线程变量值
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
ServletUtil.begin(this.context, req, res);//初始化线程变量值
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
3:在web.xml 中配置过滤器
<filter>
<filter-name>Response</filter-name>
<filter-class>com.rtt.cppcc.basicinfo.util.ServletFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Response</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4::获取对象
HttpServletResponse res = (HttpServletResponse) ServletUtil.get().getResponse();
参考地址:https://my.oschina.net/yyqz/blog/277359