欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

聊一聊Filter

程序员文章站 2022-07-14 21:27:23
...
1.什么是过滤器:

     1、过滤器是一个运行在服务器端的程序,先于与之相关的servlet或JSP页面之前运行,实现对请求资源的过滤的功能

     2、过滤器可附加到一个或多个servlet或JSP页面上,可以检查请求信息,也可以处理响应信息。

     3、Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 Servlet 执行前后实现一些特殊的功能。

2.常用实例:

        自动登录,解决全站乱码,屏蔽非法文字,进行响应数据压缩,等等

3.编写流程:
         1、实现类,需要实现接口 javax.servlet.Filter
public class HelloFilter implement Filter{

      public void init(FilterConfig  filterConfig )throws ServletException{

}

     public void doFilter(ServletRequest request,ServletResponse response, FilterChain chain)throws IOException,ServletException{
    //放行
    chain.diFilter(request,response);
}

      public void destroy(){
}
}

         2、配置,在web.xml使用<filter>和<filter-mapping>进行配置

<!--注册通知tomcat过滤器的实现类-->
<filter>
        <filter-name>自定义过滤器类名</filter-name>
        <filter-class>自定义过滤器类的全路径</filter-class>
</filter>

<!--那些程序使用过滤器>
<filter-mapping>
       <filter-name>已经注册的过滤器类名</filter-name>
       <url-pattern>对那些路经过滤(/*所有)</url-pattern>
</filter-mapping>


4.生命周期:

          4.1、实例化(new) : Web 容器启动时,即会根据 web.xml 中声明的 filter 顺序依次实例化这些 filter

          4.2、初始化:

                4.2.1、实例化和初始化的操作只会在容器启动时执行,而且只会执行一次。

                4.2.2、 Web 容器调用 init(FilterConfig) 来初始化过滤器。

                4.2.3、容器在调用该方法时,向过滤器传递 FilterConfig 对象,

                4.2.4、利用 FilterConfig 对象可以得到 ServletContext 对象,以及在 web.xml 中配置的过滤器的初始化参数

                4.2.5、在这个init(FilterConfig)方法中,可以抛出 ServletException 异常,通知容器该过滤器不能正常工作。

                           此时的 Web 容器启动失败,整个应用程序不能够被访问           

         4.3、过滤:         每次访问被拦截目标资源,过滤器中的doFilter的方法就会执行  

         4.4、销毁:        当服务器关闭(或应用卸载)的时候,服务器就会销毁Filter对象.
5.过滤器链

      过滤器在执行过程中是一个一个过滤器去执行的,其中执行的顺序和<filter-mapping>中配置的顺序有关,

      5.1 : 过滤器的配置

          url-pattern 的配置和servlet中的配置一样

       * 完全路径匹配   以 / 开始   /aaaa/bbbb/cccc

       * 目录匹配         以 / 开始   /*     /aa/*

       * 扩展名匹配      不能以 / 开始   *.do  *.action *.jsp

          servlet-name 配置  通过url-pattern拦截一个Servlet资源 也可以通过servlet-name标签进行拦截

              

          dispatcher  的配置

           *   REQUEST : 默认值

           *   FORWARD: 拦截转发

           *   ERROR :  拦截跳转到错误界面,全局错误界面

           *   INCLUDE : 拦截在一个页面中包含另一个界面