码迷,mamicode.com
首页 > 其他好文 > 详细

Filter的详解与配置应用

时间:2015-05-13 19:27:37      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

1.filter概念与用处:

          filter 直译为过滤器,是servlet中的重点对象,是web应用组件,是个典型的处理链

          主用用于: Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。

                       例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

2.filter的生命周期: (init方法与destroy方法只会执行一次)

          创建: 由WEB服务器负责,服务器启动及创建,与servlet中的load-on-startup配置为1时效果相同 (只创建一次)

          初始化:创建Filter对象实例后及会调用init()方法,接着被Web容器保存进应用级的集合容器中去了等待着,用户访问资源 (只初始化一次)

          拦截: 当用户访问的url被Filter的url-pattern拦截时,Filter调用doFilter方法(多次拦截也不会再初始化filter)

          消亡: 当web应用服务被停止或重新装载了,Filter调用destroy方法,Filter销毁

3.filter的拦截原理:

           Filter接口中有一个doFilter方法,当开发人员编写好Filter类实现doFilter方法,并配置对哪个web资源进行拦截后,

           WEB服务器每次在调用web资源的service方法之前(服务器内部对资源的访问机制决定的),都会先调用一下filter的doFilter方法。

4.filter的应用注意事项:

            1> filter-mapping标签中servlet-name与url-pattern。
                Filter不仅可以通过url-pattern来指定拦截哪些url匹配的资源。

                而且还可以通过servlet-name来指定拦截哪个指定的servlet(专门为某个servlet服务了,servlet-name对应Servlet的相关配置)。
            2> filter-mapping标签中dispatcher。
                指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。

                用户可以设置多 个<dispatcher> 子元素用来指定 Filter 对资源的多种调用方式进行拦截。
      REQUEST:
        当用户直接访问页面时,Web容器将会调用过滤器。

                      如果目标资源是通过RequestDispatcher的include()或forward()方法访问或ERROR情况时,那么该过滤器就不会被调用。
      INCLUDE:
            如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。
               FORWARD:
                       如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
      ERROR:
                       如若在A.jsp页面page指令中指定了error属性=examError.jsp,那么A.jsp中若出现了异常,会跳转到examError.jsp中处理。

                       而在跳转到examError.jsp时,若过滤器配置了ERROR的dispather那么则会拦截,否则不会拦截。

5.filter的实例入门:

                1、新建一个类,实现Filter接口
      2、实现doFilter()方法,打印一句话,来证明能够进行拦截
      3、在web.xml中进行配置(参照Servlet配置)
      4、访问一个页面,看看能不能拦截
      1>
        [java] view plaincopy
        package com.test.filter; 
 
        import java.io.IOException; 
        import javax.servlet.Filter; 
        import javax.servlet.FilterChain; 
        import javax.servlet.FilterConfig; 
        import javax.servlet.ServletException; 
        import javax.servlet.ServletRequest; 
        import javax.servlet.ServletResponse; 
        public class Demo1Filter implements Filter { 
            private FilterConfig filterConfig; 
 
    public void doFilter(ServletRequest request, ServletResponse response, 
            FilterChain chain) throws IOException, ServletException { 
        System.out.println("Demo1过滤前"); 
        System.out.println(filterConfig.getInitParameter("param1")); 
        chain.doFilter(request, response);//放行。让其走到下个链或目标资源中 
        System.out.println("Demo1过滤后"); 
    } 
 
    public void init(FilterConfig filterConfig) throws ServletException { 
        System.out.println("初始化了"); 
        this.filterConfig = filterConfig; 
    } 
 
    public void destroy() { 
        System.out.println("销毁了"); 
    } 

2>在web.xml中进行配置
[html] view plaincopy
<filter> 
    <filter-name>Demo1Filter</filter-name> 
    <filter-class>com.itheima.filter.Demo1Filter</filter-class> 
    <init-param> 
        <param-name>param1</param-name> 
        <param-value>value在这里呢</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>Demo1Filter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> <!-- 没有配置dispatcher就是默认request方式的 --> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>ERROR</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
</filter-mapping>

 

Filter的详解与配置应用

标签:

原文地址:http://www.cnblogs.com/yiyongyao/p/4501059.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!