Filter过滤器

Filter过滤器是ServletAPI中提供一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个Java类称为过滤器Filter。
通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理。
使用过滤器拦截请求,如下图

过滤器链的作用是,当我们执行了过滤器链(执行放行代码),将请求放行的地点在于下面还有没有匹配的过滤器,如果有,则将请求放行到下一个匹配的过滤器,如果没有匹配的过滤器了,则将请求放行到目标servlet。
注意:一个filter必须实现javax.servlet.Fliter。
有三个方法:
1.voidsetFilterConfig(FilterConfig config) //设置filter 的配置对象;
2. FilterConfiggetFilterConfig() //返回filter的配置对象;
3.voiddoFilter(ServletRequest req,ServletResponse res,FilterChain chain) //执行filter的工作
Filter过滤器的种类:
用户授权的Filter:Filter负责检查用户请求,根据请求过滤用户非法请求。
日志Filter:详细记录某些特殊的用户请求。
负责解码的Filter:包括对非标准编码的请求解码。
Filter可拦截多个请求或响应;一个请求或响应也可被多个请求拦截。

Filter过滤器的用法:
在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。
根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。
在HttpServletResponse到达客户端之前,拦截HttpServletResponse。
根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。

个人对Filter过滤器的总结:
Filter接口中有一个doFilter方法,当开发人员编写好Filter类实现doFilter方法,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前(服务器内部对资源的访问机制决定的),都会先调用一下filter的doFilter方法。
Filter的生命周期和Servlet一样,Filter的创建和销毁也是由WEB服务器负责。不过与Servlet区别的是,它是1>在应用启动的时候就进行装载Filter类(与Servlet的load-on-startup配置效果相同)。2>容器创建好Filter对象实例后,调用init()方法。接着被Web容器保存进应用级的集合容器中去了等待着,用户访问资源。3>当用户访问的资源正好被Filter的url-pattern拦截时,容器会取出Filter类调用doFilter方法,下次或多次访问被拦截的资源时,Web容器会直接取出指定Filter对象实例调用doFilter方法(Filter对象常驻留Web容器了)。4>当应用服务被停止或重新装载了,则会执行Filter的destroy方法,Filter对象销毁。
注意:init方法与destroy方法只会直接一次。
Filter不仅可以通过url-pattern来指定拦截哪些url匹配的资源。而且还可以通过servlet-name来指定拦截哪个指定的servlet(专门为某个servlet服务了,servlet-name对应Servlet的相关配置)。
这些是我个人对Filter过滤器的一些了解,大家基本上都是知道的,毕竟我还算是个小白哈哈哈。

暂无评论