1.1.过滤器概述
过滤器的基本功能就是对servlet容器调用servlet的过程进行拦截,从而在servlet进行响应处理的前后实现一些特殊的功能。
1.2.过滤器基本工作原理
servlet API一共定义了三个接口类来供开发人员编写Filter程序,分别为Filter、FilterChain、FilterConfig。与servlet程序相似,她也是由servlet容器来调用和执行的,Filter通常用来拦截浏览器的servlet请求,因为不管请求的是什么资源,最终web服务器都是以servlet程序的形式来运行的,例如,jsp要先被翻译成servlet、静态图片和HTML文件是由默认的servlet负责处理的,所以,servlet通常就是Filter所要拦截的资源。效果图如下:
1.3.过滤器链
过滤器链效果图:
从图中可看出,过滤器链中的只要有任意一个Filter的没执行FilterChain.doFilter方法,则目标方法就不会被执行。
1.4.Filter接口
①.概述
该接口定义了三个方法,init()、doFilter()、destroy()
②.init
在web应用程序启动时,web服务器(web容器)将根据web.xml的配置信息来创建每个Filter的实例对象,并将其保存在内存中。web容器创建完Filter实例后,将立即调用该Filter对象的init方法。init方法在Filter的生命周期中只执行一次,Web容器在调用init方法时,会传入一个包含Filter配置和运行环境信息的FilterConfig对象。如图:
③.doFilter
当一个Filter对象能够拦截的访问请求到达后,servlet容器将调用该Filter的doFilter方法,值得注意的是,只有当Filter链中的Filter的init方法执行完后,才能把请求交给这个Filter处理。
④.destroy
只有当容器卸装Filter之前才会执行这个方法,这个方法也只执行一次。
1.5.FilterChain接口
①.过滤器链
1.6.FilterConfig接口
①.Filter程序需要在web.xml文件中注册,在注册Filter程序时,还可以对设置其初始化参数,
与普通的servlet程序一样,Filter程序也很可能需要访问servlet容器。servlet规范将代表servletContext对象和Filter的配置参数信息都封装到一个称为FilterConfig对象中,FilterConfig接口必须对外提供获取FilterConfig对象的方法,以便在Filter程序中可以调用这些方法来获取ServletContext,以及获取web.xml文件中为Filter设置的友好名称和初始化参数。
FilterConfig接口定义了如下的方法
getFilerName获取Filter的友好名称
getServletContext获取上下文
getInitParameter获取某个名称的初始化参数值
getInitParameterNames获取所有的参数名称
1.7.Filter的高级应用