执行原理
底层中存在一个map和一个数组。
一个map:Map的key为的值,value为Filter实例对象的引用。
一个数组:存在着和请求相匹配的Filter引用。
执行过程:当对某资源的请求到web容器时,会先对请求解析,使用解析出来的URI作为一个比较对象,从Map中查找是否存在相匹配的key。若存在,那么读取其中的value,即filter对象的引用,将该引用存入到数组中,然后继续查找,直到该Map查找完毕。这样在数组中就会存在按照查找顺序排好序的filter引用。
数组初始化完毕后,开始按照数组元素顺序进行执行,所有数组中的filter全部执行完毕以后,再跳转到请求的目标资源。
执行顺序
可以看出filter的执行顺序时按照数组中的顺序查找,而map中的顺序是按照注册的filter顺序。所以说请求目标资源一致时先注册的filter先执行。