过滤器


                                                 
    过滤器

    1、Filter:

        概述:
            Filter称为过滤器,它是Servlet技术中最实用的技术,web开发人员通过Filter技术,
            
            对web服务器所管理的资源(JSP,Servlet,静态图片或静态html文件)进行拦截,
            
            从而实现一些特殊的功能。
            
            Filter就是过滤从客户端向服务器发送的请求。

    
    2、FilterChain:
    
        FilterChain过滤器链:在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称为是一个过滤器链。
        
        Web服务器根据Filter在web.xml文件中的注册顺序(mapping的配置顺序)决定先调用那个Filter。依次调用后面的过滤器,
        
        如果没有下一个过滤器,调用目标资源   (注意)
        
        
    3、Filter生命周期:
    
        Filter的创建和销毁是由web服务器负责。Web应用程序启动的时候,web服务器创建Filter的实例对象。
        
        并调用其init方法进行初始化(filter对象只会创建一次,init方法也只会执行一次)。

        每次filter进行拦截的时候,都会执行doFilter的方法。
        
        当服务器关闭的时候,应用从服务器中移除的时候,服务器会销毁Filter对象。
        
    4、FilterConfig对象:
    
        作用:用来获得Filter的相关的配置的对象。
        
        常用的方法:
        
            getFilterName()             ----获取过滤器名称
            getInitParameter            ----获取初始化参数
            getInitParameterNames()     -----获取所有初始化参数名称
            
    5、过滤器的相关配置(web.xml文件中的配置):
    
        1、<url-pattern>的配置:则客户端请求访问任意资源文件时都要经过过滤器过滤,通过则访问文件,否则拦截。
        
            完全路径匹配        :以/开始   比如/aaa  /aaa/bbb
            目录匹配            :以/开始 以*结束  比如/*  /aaa/*  /aaa/bbb/*
            扩展名匹配            :不能以/开始 以*开始 比如*.jsp  *.do   *.action
            如:作用于某一文件夹下所有文件:<url—pattern>/dir/*</url-pattern>
            
        2、<servlet-name>的配置:
        
            专门以Servlet的配置的名称拦截Servlet。
            
        3、<dispatcher>的配置:
        
            默认的情况下过滤器会拦截请求。如果进行转发(需要拦截这次转发)。
            
            dispatcher的取值:
            
                REQUEST    :默认值。默认过滤器拦截的就是请求。
                FORWARD :转发。
                INCLUDE    :页面包含的时候进行拦截
                ERROR    :页面出现全局错误页面跳转的时候进行拦截
                
                
    6、使用方式:
    
        1、创建一个class后,实现接口Filter(注意:是javax.servlet中的Filter)。
        
        2、重写过滤器的doFilter(request,response,chain)方法。另外两个init()、destroy()方法一般不需要重写。
        
           在doFilter方法中进行过滤操作。
           
           常用代码有:获取请求、获取响应、获取session、放行。
           
           
           代码:
           
                public class FilterDemo3 implements Filter {

                    @Override
                    public void init(FilterConfig filterConfig) throws ServletException {
                        // TODO Auto-generated method stub
                    }
                    @Override
                    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                            throws IOException, ServletException {
                        System.out.println("FilterDemo3执行了...");
                        //放行
                        chain.doFilter(request, response);
                        System.out.println("FilterDemo3执行结束了...");
                    }
                    @Override
                    public void destroy() {
                        // TODO Auto-generated method stub

                    }
                }
                                                 
        3、在web.xml中配置过滤器。这里要谨记一条原则:在web.xml中,监听器>过滤器>servlet。
        
           也就是说web.xml中监听器配置在过滤器之前,过滤器配置在servlet之前,否则会出错。

            <filter>  
                    <filter-name>loginFilter</filter-name>//过滤器名称  
                    <filter-class>com.ygj.control.loginFilter</filter-class>//过滤器类的包路径
                   <init—param> //可选 
                    <param—name>参数名</param-name>//过滤器初始化参数
                    <param-value>参数值</param-value>  
                   </init—pamm>  
            </filter> 
             
            <filter-mapping>//过滤器映射  
                <filter-name>loginFilter</filter-name>  
                <url-pattern>/*</url-pattern>
                <dispatcher>REQUEST</dispatcher>
                <dispatcher>FORWARD</dispatcher>
            <url—pattern>指定过滤器作用的对象</url-pattern>           
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值