在 web.xml 文件中通过<filter>和<filter-mapping>标签组合对编写的filter类进行注册,并设置它所能拦截的资源
实际上,Filter可以完成与Serlvlet一样的工作,甚至比Servlet使用起来更加灵活,因为它除了提供了request和response对象外,还提供了一个FiterChain链对象,他可以让我们更加灵活地控制请求的流转.
Filter相关的类结构图
在Tomcat中,FilterConfig和FilterChain的实现类分别是从ApplicationFilterConfig和ApplcationFIterChian,而Fitler 的实现类由用户自定义,只要实现了FIlter接口中定义的三个接口即可,这三个接口与在Servlet中的类似.只不过还有一个AlllicationFilterChain类,此类可以将多个Filter串联成链. 详细看下Filter中的三个接口方法
Filter类的核心哈市传递的FilterChain对象,该对象保存了到最终Servlet对象的所有Filter对象,这些对象都保存在ApplicationFilterChain对象的filters数组中.在FilterChain链上每执行一个Filter对象,数组的当前计数加一,直到计数等于数组的长度,当FilterChain上所有的Filter对象执行完成后,就会执行最终的Servl.所以在ApplicationFilterChain对象中会持有Servle对象的引用
Filter执行时序图