过滤器

当我们第一眼看到过滤器的时候很容易和Inteceptor联系到一起,这也是难免容易混淆的两个概念。

拦截器和过滤器的区别

Inteceptor是拦截请求/响应的,也就是拦截Request/Response对的。每一个Request/Response对都会经过拦截器,关于拦截器的详情可以看拦截器章节。

Filter是过滤RequestHandler的。当服务器接受到一个请求后,先经过Inteceptor拦截,如果没有被拦截,会根据Request匹配对应的RequestHandler,如果没有找到则抛出NotFoundException异常,如果找到对应的RequestHandler,如果开发者设置了Filter,那么把RequestHandlerRequest/Response对交给Filter处理,如果没有设置Filter,则由对应的RequestHandler处理。

底层的代码大概是这样的:

if (mInterceptor != null && mInterceptor.onBeforeExecute(request, response, context))
    return;

RequestHandler handler = getRequestHandler(request, context);
if (handler == null) {
    throw new NotFoundException(path);
} else {
    if (mFilter != null) {
            mFilter.doFilter(handler, request, response, context);
    } else {
        handler.handle(request, response, context);
    }
}

if (mInterceptor != null)
    mInterceptor.onAfterExecute(request, response, context);

results matching ""

    No results matching ""