Filter-过滤器
- 是javaEE三大组件之一。Servlet Filter Listener
- 开发者开发一个Web应用,需要开发一些局别特定功能的类。这些类的功能和逻辑在不能的Web应用中是相似的,因此可以将这些逻辑抽取出来,封装
如何开发一个Filter
- 自定义一个类,实现javax.servlet.Filter接口
- 提供其中3个抽象方法的实现init()、destory()、doFilter()
- 在web.xml中配置一个Filter(与Servlet类似)
Filter的生命周期
- 在web应用启动时,会创建出web应用中配置的过滤器对象,创建出过滤器对象后立即调用init方法进行初始化的操作,之后一直存活,直到web应用被销毁时,Filter跟着被销毁,在销毁之前调用destory方法执行善后工作。在存活期间,每当拦截到资源,就执行dofilter方法 来执行过滤器的逻辑,如果不做操作 则默认拦截,可以通过调用filterchain的dofilter方法来放行对资源的访问。并且可以在dofilter方法之前或之后做一些额外的操作。
注意事项
- Filter在web.xml中Filter-mapping的申明顺序决定了它的执行顺序
- Filter加载顺序:filter的name存储在map的key中,加载时按map的顺序加载(开发时并不关注)
责任链模式
- FilterChain是责任链模式的一种具体应用,可以实现组件之间的解耦。