概念
过滤器在我们日常生活很常见,比如通过净水器过滤水中的杂质,带口罩可以过滤空气了中的PM2.5进入我们身体。Web开发中通过Filter可以对服务器所管理的资源如:servlet、jsp、html、图片等进行拦截,从而实现业务上的需求。比如实现文字的统一编码、权限处理、过滤一些敏感词等。
Filter
javax.servlet.Filter接口是从Servlet2.3后新加的功能,如编写的JAVA类实现了Filter接口,我们通此类为过滤器。使用过滤器可以实现用户在请求某资源前进行拦截,在答应时也可进行相关的处理。
执行过滤时序
Filter实现原理
当用户的请求符合设定的过滤规则时,在执行doXXX()方法前先执行过滤器中的doFilter()方法。在doFilter()方法中根据业务规则,可将请求转发到下一个资源最终达到目标资源,也可跳转到其它资源。
Filter生命周期
Filter与Servlet一样都是由Web窗口容器负责管理,但与Servlet不同的是Filter是随着容器的启动而启动。容器实例化Filter可马上调用init()方法,有符合过滤规则的请求来时执行doFiler()方法,容器关闭时调用destory()方法释放过滤器中的资源后,销毁Filter实例。
过滤器链
由若干个Filter组成的过滤器我们称其为过滤器链,它好比自行车链条任何一个过滤器中断都会导致请求到达目标资源。它的执行顺序符合计算机中栈的定义,从而在某些控制器层框架中有了拦截器栈的概念,其本质就是过滤器链。
过滤器的概念和实现原理就聊到这边,下节小傅老师将带大家一起实现过滤器和应用场景。