使用拦截器获取HttpServletResponse 对象,HttpServletRequest对象

  1. 拦截器的配置说明
   <mvc:interceptors>   
        <bean class="interceptor.HttpServletResponseInterceptor" />
    </mvc:interceptors>
  1. 拦截器的实现
public class HttpServletResponseInterceptor extends HandlerInterceptorAdapter{

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        RequestResponseContext.setResponse(response);
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        RequestResponseContext.removeResponse();
    }
}
  1. 这里保存的Httpresponse对象必须是多线程的,使用threadlocal解决这个问题,其实我们的tomact容器中也是这么处理的,这里不仅可以使用拦截器,其实原生的过滤器也是可以这么处理的。我们在使用的时候就可以直接的使用啦!
public class RequestResponseContext {

    private static ThreadLocal<HttpServletRequest> REQUEST_CHREADLOCAL = new ThreadLocal<HttpServletRequest>();

    private static ThreadLocal<HttpServletResponse> REPONSE_THREADLOCAL = new ThreadLocal<HttpServletResponse>();

    public static void setRequest(HttpServletRequest request) {
        REQUEST_CHREADLOCAL.set(request);
    }

    public static HttpServletRequest getRequest() {
        return REQUEST_CHREADLOCAL.get();
    }

    public static void removeRequest() {
        REQUEST_CHREADLOCAL.remove();
    }

    public static void setResponse(HttpServletResponse response) {
        REPONSE_THREADLOCAL.set(response);
    }

    public static HttpServletResponse getResponse() {
        return REPONSE_THREADLOCAL.get();
    }

    public static void removeResponse() {
        REPONSE_THREADLOCAL.remove();
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值