过滤器
当我们第一眼看到过滤器的时候很容易和Inteceptor联系到一起,这也是难免容易混淆的两个概念。
拦截器和过滤器的区别
Inteceptor是拦截请求/响应的,也就是拦截Request/Response对的。每一个Request/Response对都会经过拦截器,关于拦截器的详情可以看拦截器章节。
Filter是过滤RequestHandler的。当服务器接受到一个请求后,先经过Inteceptor拦截,如果没有被拦截,会根据Request匹配对应的RequestHandler,如果没有找到则抛出NotFoundException异常,如果找到对应的RequestHandler,如果开发者设置了Filter,那么把RequestHandler和Request/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);