Filter

一、简介

  Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet,静态图片文件或静态html文件进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩相印信息等一些高级功能。

  Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。

  Filter接口共定义了如下方法:

  destroy()、doFilter(ServletRequest req,ServletResponse resp,FilterChain chain)、init(FilterConfig filterConfig);

二、filter在开发中的常见应用

  1、filter可以在目标资源执行之前,运行权限检查,检查用户有无权限。选择是否放行。

  2、filter可以在放行之前,对request和response进行预处理,从而实现一些全局性的设置。

  3、filter在放行之后,可以捕获到目标资源的输出,从而对输出做类似于压缩这样的设置。

三、filter链

  多个filter组成filter链。按顺序依次执行。

  执行先后次序按照web.xml中<filter-mapping>位置的先后顺序。

四、filter生命周期

  init()方法执行时filter创建,服务器在启动时就执行filter的init()方法创建了该filter对象,该对象被所有的拦截请求所共享。

  distroy()方法执行时filter被摧毁,当移除服务器中的web应用或者停止服务器时服务器调用distroy()方法摧毁filter。

五、filter()初始化参数

  <filter><init-param><param-name></><param-value></></></>

  服务器启动时会将参数封装到filterConfig中并传递给init方法,供filter调用。

六、filter增强

  对一个对象增强一般共有如下三种方式:

  1、写子类

  2、用包装模式

  3、动态代理

   包装模式五步:1、写一个类,实现与被增强对象相同的接口;2、定义一个变量,记住被增强对象;3、定义一个构造方法,接受被增强对象;4、覆盖需要增强的方法;5、对于不需要增强的方法,直接调用被增强对象(目标对象)的方法

  可使用包装模式实现对doFilter(ServletRequest req,ServletResponse resp,FilterChain chain)中的ServeltRequest、ServletResponse对象增强;

  例如对ServletRequest的getParamter()方法增强来解决全栈的get方式的请求的乱码问题;

 七、Filter映射<dispatcher>

  filter配置中<filter-mapping>中可包含<dispatcher>元素,该元素用于指定过滤器拦截的资源被Servlet容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置多个<dispatcher>子元素用来指定Filter对资源的多种调用方式进行拦截。

  web资源调用共四种方式,即上述四种,

  REQUEST拦截器介于服务器与request请求的资源之间,该拦截器作用于request请求资源时。

  INCLUDE,FORWARD拦截器介于服务器与被包含的资源及转发的资源之间,该拦截器作用于访问资源中有include、forward标志时服务器调用指定页面(资源)。

  ERROR拦截器介于服务器与错误资源之间,该拦截器作用于访问资源发生错误并向服务器抛出异常时,服务器调用对应的错误处理页面(资源)。

posted on 2018-02-26 19:24  songpan  阅读(249)  评论(0编辑  收藏  举报

导航