Filter

Filter:过滤器

web中的过滤器: 当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。

过滤器的作用: 一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤…..

快速入门

1.步骤

  1. 定义一个类,实现接口Filter

  2. 复写方法

  3. 配置拦截路径

    1. web.xml

      <filter>
          <filter-name>demo01</filter-name>
          <filter-class>web.filter.FilterDemo01</filter-class>
      </filter>
      
      <filter-mapping>
          <filter-name>demo01</filter-name>
          <url-pattern>/*</url-pattern>   //这里是拦截路径
      </filter-mapping>
    2. 注解WebFilter

      • 和Servlet注解差不多,只不过参数中是拦截路径

细节

  1. 过滤器执行流程:

    • 放行之前的代码先执行,然后放行,最后执行放行之后的代码。
  2. 过滤器生命周期方法:

    • 与Servlet类似,init和destory是创建和销毁时执行,doFilter是拦截请求资源时执行。
  3. 过滤器配置详解

    • 拦截路径配置:
      1. 具体资源路径: /index.jsp 只有访问此资源时过滤器才会被执行。
      2. 目录拦截:/user/* 访问/user下的所有资源时过滤器都会被执行。
      3. 后缀名拦截:*.jsp 访问所有后缀名为jsp资源时过滤器都会被执行。
      4. 拦截所有资源:/* 访问所有资源时过滤器都会被执行。
    • 拦截方式配置:
      • 注解配置
        • 设置dispatcherTypes属性
          1. REQUEST:默认值。浏览器直接请求资源。
          2. FORWARD:转发访问资源。
          3. INCLUDE:包含访问资源。
          4. ERROR:错误跳转资源。
          5. ASYNC:异步访问资源
      • web.xml配置
        • 设置<dispatcher></dispatcher>标签即可
  4. 过滤器链

    • 过滤器先后顺序问题:
      1. 注解配置:按照类名的字符串比较规则比较,值小的先执行
        • 如:AFilter和Bfilter,AFilter先执行
      2. web.xml配置:<filter-mapping>谁定义在上边谁先执行

动态代理

设计模式: 一些通用的解决固定问题的方式。

可以增强对象功能的设计模式: 装饰模式,代理模式。

代理模式:

  1. 概念:

    • 真实对象:被代理的对象
    • 代理对象
    • 代理模式:代理对象代理真实对象,达到增强真实对象的目的。
  2. 实现方式:

    • 静态代理:有一个类文件描述代理模式。

    • 动态代理:在内存中形成代理类。

      • 实现步骤:

        1. 代理对象和真实对象实现相同的接口。
        2. 通过Proxy.newProxyInstance()方法创建代理对象。第一个参数为真实对象classloader,第二个参数为相同的接口,第三个参数为new一个InvocationHandler。
        3. 使用代理对象调用方法。
        4. 增强方法。
      • 增强方式:

        1. 增强参数列表。
        2. 增强返回值类型。
        3. 增强方法体执行逻辑。
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信