zoukankan      html  css  js  c++  java
  • Filte过滤器


     过滤器 , 其实就是对客户端发出来的请求进行过滤。 浏览器发出, 然后服务器派servlet处理。  在中间就可以过滤, 其实过滤器起到的是拦截的作用。生活中的过滤器例如:门禁,你有门卡才能过去,没有门卡进不去,起到了一个过滤器的作用。

    作用
        
        1. 对一些敏感词汇进行过滤
        2. 统一设置编码
        3. 自动登录
       

    下面来说一说如何创建Filter的两种方法:
    第一种手动创建:
    1. 定义一个类, 实现Filter接口

            public class FilterDemo implements Filter {
    
                public void destroy() {
    //过滤器销毁事件
                }
            
                public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
                    System.out.println("来到过虑器了。。。");
                    chain.doFilter(request, response);
                }
            
                public void init(FilterConfig fConfig) throws ServletException {
    //过滤器初始化事件
                }
            
            }

    2.注册过滤器

    在web.xml里面注册,注册的手法与servlet基本一样。


              <filter>
                <display-name>FilterDemo</display-name>
                <filter-name>FilterDemo</filter-name>
                <filter-class>com.itheima.filter.FilterDemo</filter-class>
              </filter>
              <filter-mapping>
                <filter-name>FilterDemo</filter-name>
                <url-pattern>/*</url-pattern>
              </filter-mapping>

    第二种使用eclipse快速创建:

    第一步:


    第二步:

    第三步:

    好了,创建Filter两种方法说完了,接下来说一下Filter的生命周期

    Filter的生命周期

    1: 创建
    init()
    在服务器启动的时候就创建。

    2:销毁
    destroy()
     服务器停止的时候。

    Fileter的执行顺序:

    我们假设一个等红灯的场景

    1. 客户端发出请求,先经过过滤器, 如果过滤器放行,那么才能

    2. 如果有多个过滤器, 那么他们会按照注册的映射顺序 来 排队。 只要有一个过滤器, 不放行,那么后面排队的过滤器以及咱们的servlet都不会收到请求。

    Filter执行图:

    Filter细节:

    1. init方法的参数 FilterConfig , 可以用于获取filter在注册的名字 以及初始化参数。  其实这里的设计的初衷与ServletConfig是一样的。

    2. 如果想放行,那么在doFilter 方法里面操作,使用参数 chain


            chain.doFilter(request, response); 放行, 让请求到达下一个目标。

    3.  <url-pattern>/*</url-pattern> 写法格式与servlet一样。

        1. 全路径匹配  以 /  开始

                /LoginServlet

        2. 以目录匹配 以 / 开始  以 * 结束

            /demo01/*  

        3. 以后缀名匹配  以 * 开始 以后缀名结束

            *.jsp  *.html *.do

    4. 针对 dispatcher 设置

            REQUEST : 只要是请求过来,都拦截,默认就是REQUEST
            FORWARD : 只要是转发都拦截。
            ERROR : 页面出错发生跳转
            INCLUDE : 包含页面的时候就拦截。
           

    你不会的东西,觉得难的东西,一定不要躲。先搞明白,后精湛,你就比别人优秀了。因为大部分人都不舍得花力气去钻研,自动淘汰,所以你执着的努力,就占了大便宜。奋斗就是每一天都很难,可一年比一年容易。不奋斗就是每一天都很容易,可一年比一年越难。怕吃苦的人吃苦一辈子,不怕吃苦的人吃苦一阵子。拼一个春夏秋冬,赢一个无悔人生
  • 相关阅读:
    Day3学习笔记
    Day2学习笔记
    Day1学习笔记
    中文标识
    about original idea
    那些和matlab有关的
    GRE Sub math 报名
    虽然实际没有什么用,但是可能会有理论上的意义吧
    latex相关
    对venturelli theorem的重新认识
  • 原文地址:https://www.cnblogs.com/ahJava/p/9661589.html
Copyright © 2011-2022 走看看