过滤器 -- Filter

过滤器:

  1、所谓的过滤器, 就是拦截用户对资源的访问;

  2、一个过滤器可以拦截多个资源, 一个资源也可以配置多个过滤器进行拦截;

  3、其实所谓的拦截, 就是将代表请求的request对象和代表响应的response对象拦截下来进行拦截处理;在拦截后要放行不然资源将永远停留在过滤器中。

 

自定义一个过滤器的步骤:

  (1)、创建一个class类并实现Filter接口(init、 destroy、doFilter三个方法);

  (2)、配置web.xml文件;

 

Filter生命周期:
        当服务器启动时, web应用加载后会立即创建出当前web应用中的所有的Filter对象, 创建出来后, 立即调用init方法进行初始化出操作. 从此以后这个Filter对象一直驻留在内存中为后续所拦截的请求服务, 每次过滤到对资源的访问时, 都会执行doFilter这个方法进行拦截处理, 直到服务器关闭或者web应用移出容器为止, 随着web应用的销毁, 过滤器也跟着销毁, 在销毁之前会调用destroy方法执行善后的处理。

 

Filter中的方法介绍
        --------------------------------------------
        init(FilterConfig filterConfig)
            FilterConfig -- 代表当前Filter在web.xml中配置信息的对象
                通过这一对象可以获取当前过滤器在web.xml配置的初始化参数
                通过这一对象可以获取代表当前web应用的ServletContext对象
                获取初始化参数:
                    getInitParameter(String name);
                    getInitParameterNames()

                    getServletContext();---获取ServletContext对象
                    
        --------------------------------------------
        doFilter(request, response, FilterChian filterChian)
              FilterChian -- 过滤器链
                  一个web资源可以被多个过滤器所拦截, 多个过滤器拦截的顺序是按照Filter在web.xml中配置的<filter-mapping>的顺序执行的。这多个过滤器按照拦截的顺序就组成了一个拦截器链, 用FilterChian表示.

                  如果一个过滤器处理完所拦截的请求后, 想要执行后面的拦截器, 则可以调用FilterChian上doFilter方法, 表示放行过滤器, 接着执行下一个节点
                  如果下一个节点仍然是过滤器, 则接着进行过滤, 执行的过程同上
                  如果没有后续的过滤器, 则执行真正的资源处理这次请求

  --------------------------------------------
        destroy()
            善后处理...

 

配置过滤器
      

 <filter> -- 配置一个过滤器
       <filter-name>FilterDemo1</filter-name>
                   -- 过滤器的名字
       <filter-class>cn.tedu.FilterDemo1</filter-class> -- 过滤器处理类的全路径名
</filter>
        
<filter-mapping> -- 为指定的过滤器配置要拦截的路径, 一个过滤器可以配置多个
       <filter-name>FilterDemo1</filter-name> -- 过滤器的名字
       <servlet-name>ServletDemo1</servlet-name> -- 拦截哪个名字的Servlet, 可以配置多个
       <url-pattern>/servlet/*</url-pattern> -- 要拦截的路径, 路径的写法和Servlet的<url-pattern>写法一致, 可以配置多个
       <dispatcher>REQUEST</dispatcher> -- 配置拦截哪种方式的对资源的访问, 可以取值为REQUEST/FORWARD/INCLUDE/ERROR
                REQUEST:默认,普通请求,最常用
                FORWARD:所拦截的资源是通过请求转发访问的
                INCLUDE:所拦截的资源是通过页面包含访问的
                ERROR:所拦截的资源通过异常机制访问的
 </filter-mapping>

总结:在请求servlet之前要先走过滤器,在返回响应之前也必先走过滤器。

posted @ 2017-06-08 17:32  大大大圣  阅读(220)  评论(0编辑  收藏  举报