Javaweb学习总结(六)

过滤器(Filter)

一、filter概念

Servlet API中提供了一个 Filter 接口,开发 web 应用时,如果编写的 Java 类实现了这个接口,则把这个接口成为 Filter 类。Filter 与 servlet 很类似,servlet 也是个接口,只不过我们在定义自己的servlet 时,我们是继承 HttpServlet ,然后对其进行配置,那么一个 servlet的创建、服务、销毁的过程是由 servlet 容器进行控制的。过滤器也是类似的,只不过我们要去实现这个接口,对他进行配置。一个过滤器的创建、初始化,他的过滤的功能的调用以及销毁的过程,也是有 servlet 容器进行管理的。

通过 Filter 技术,开发人员可以实现用户在访问某个资源目标前后进行拦截处理。简单说,就是可以实现web容器对某资源的访问前拦截并进行相关处理,也可以在某资源向web容器返回相应前进行截获并处理。Filter 就类似于一个公司的前台,我们去公司找人或找某个部门时,我们必须通过这个前台来找到要找的人,当我们离开时,也要在前台进行记录。

二、常用的过滤器

验证过滤器:用于对用户是否登录等过程进行验证的过滤器。

日志记录和审计过滤器:用来对某些资源的访问或者对某些用户的身份进行审计。

图像转换过滤器:主要对图像文件进行处理,比如说可以在web应用里对用户上传的图像大小进行限制过滤,也可以将图像转换为其他的格式。

数据压缩过滤器:可以对用户上传的数据或者说对相应给用户的数据进行压缩。也可以通过过滤器对已经压缩的数据进行一些其他处理。

加密过滤器:用于对用户提交的或相应给用户的内容进行加密。

标记过滤器:在进行某个事件的处理时,可能有多个步骤,此时可以用标记过滤器对不同的步骤进行区分。

触发资源访问事件的过滤器:当访问其他的一些web资源时,如一些资源文件,可以用这种过滤器在访问前后进行一些附加处理。

Mime类型链过滤器:我们通过一些浏览器页面下载一些内容、多媒体文件等,这些都称为Mime类型,我们可以通过过滤器设置浏览器对不同的Mime类型进行不同的打开。

XSL/T过滤器:一般用于对xml文件进行转换。

三、Filter常用方法

void init(FilterConfig filterconfig) : 初始化Filter。只会被调用一次。FilterConfig 用来读取我们配置在Filter里面的参数。

void destroy(): 此方法在Filter的所有线程都退出后调用,或在超时之后调用。这个方法由servlet 容器进行调用。也只会被调用一次。

这个方法与servlet 的 service 方法很类似,但它是由 servlet 容器进行调用,并且在不同的线程中调用这个方法。

四、FilterChian

FilterChian是 servlet 容器为开发人员提供的对象。过滤器使用 FilterChian 调用链中的下一个过滤器,如果调用的是过滤器是链中的最后一个过滤器,则调用链末尾的资源。

方法:

void doFilter(ServletRequest request , ServletResponse response):这个方法导致过滤器链中的下一个过滤器被调用,若当前是最后一个过滤器,则调用链尾的资源。

这个方法中只有两个对象,这两个对象会传递给下一个调用者,而下一个调用者可能是个过滤器,也可能是个 servlet , 甚至是个JSP。


五、Filter 的执行原理

假设我们使用的资源都需要经过过滤器才能实现。

首先,浏览器发出一个请求,请求我们的 web容器,我一般使用的是 Tomcat。之后容器会根据你请求的URL看有没有对应的过滤器,如果对应过滤器存在,就会加载对应的类,调用对应的初始化方法将其实例化。之后会调用过滤器的 doFilter 方法,这个调用过程由容器做。在 doFilter 方法里面对请求对象进行处理。在处理完成后,调用过滤器链的 doFilter 方法,就将这个请求转到下一个链中,这个链可能是我们的资源,也可能是个过滤器,或者是个servlet。当我们转到这个资源时,比如是个 servlet,他对资源进行处理,去写对应的内容,这个时候又回到 Filter 的 doFilter方法。这时就可以设置相应头了。这个过程完成后就会将相应交给web容器,web容器又会将内容返回到浏览器,最后客户就可以通过浏览器看到得到的相应。

这个过程中,加入没有在 Filter 的 doFilter 方法中调用过滤器链的 doFilter 方法,那么就会阻塞在这一步。

六、过滤器的配置

         

url-pattern中的  /*  表示当前路径下的所有资源。


你可能感兴趣的:(Javaweb)