Filter & Listener

Filter过滤器:

  1. 概念:

    • 当访问服务器资源时,过滤器可以将请求拦截下来,完成一些特殊的功能
    • 登陆验证、统一编码处理、敏感字符过滤~~
  2. 快速入门:

    • 定义类,实现接口Filter
    • 复写方法
    • 配置拦截路径
     @WebFilter("/*")
     public class CharSetFilter implements Filter {
         @Override
         public void destroy() {
         }
    
         @Override
         public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
             //放行请求
             chain.doFilter(req, resp);
         }
    
         @Override
         public void init(FilterConfig config) throws ServletException {
    
         }
    
     }
  3. 过滤器执行流程

    • 执行过滤器
    • 执行放行后的资源
    • 回来执行过滤器放行代码下面的代码
  4. 过滤器生命周期方法

    • init:在服务器启动后,会创建Filter对象,调用init方法,只执行一次,用于加载资源
    • doFilter:每一次请求被拦截资源时,会执行,执行多次
    • destory:在服务器关闭后,Filter对象被销毁,如果服务器正常关闭,会执行destory方法,只执行一次用于释放资源
  5. 过滤器配置详解

    • 拦截路径配置:

      • 具体的资源路径:/index.jsp,只有访问index.jsp时过滤器才会被执行
      • 拦截目录:/user/* 访问/user下所有资源时,过滤器都会被执行
      • 后缀名拦截:*.jsp 访问后缀名为jsp的资源时,过滤器就会被执行
      • 拦截所有:/* 拦截所有资源
    • 拦截方式配置:资源被访问的方式

      • 注解配置:

        • 设置dispatcherTypes属性:可以设置多个

          1. REQUEST:默认值。浏览器直接请求资源
          2. FORWORD:转发访问资源
          3. INCLUDE:包含访问资源
          4. ERROR:错误跳转资源
          5. ASYNC:异步访问资源

          @WebFilter(value = "/*",dispatcherTypes = {DispatcherType.FORWARD,DispatcherType.INCLUDE})

      • web.xml配置:

        • 设置<dispatcherType></dispatcherType>标签
  6. 过滤器链(配置多个过滤器)

    • 执行顺序:如果有两个过滤器:过滤器1和过滤器2
      1. 过滤器1
      2. 过滤器2
      3. 资源执行
      4. 过滤器2
      5. 过滤器1
    • 过滤器先后顺序问题:
      • 注解配置:按照类名字符串比较规则比较,值小的先执行
        • 如:AFilterBFilter一起,AFilter先执行
      • web.xml配置:谁定义在上面谁先执行
  7. 增强对象的功能:

    • 设计模式:一些通用的解决固定问题的方式
      • 装饰模式
      • 代理模式
        • 概念
          • 真实对象:被代理的对象
          • 代理对象:
          • 代理模式:代理对象去代理真实对象,达到增强真实对象的目的
        • 实现方式:
          • 静态代理:有一个类文件来描述代理模式
          • 动态代理:在内存中形成代理类
            • 实现步骤:
              1. 代理对象和真实对象实现相同的接口
              2. 代理对象 = Proxy.newProxyInstance();
              3. 使用代理对象调用方法
              4. 增强方法
            • 增强方式:
              1. 增强参数列表:获取args[0],进行处理
              2. 增强返回值类型:重新写一个return语句
              3. 增强方法体执行逻辑:在方法里添加新的逻辑执行语句

Listener监听器:

1. 概念:web三大组件之一
 * 事件监听机制:
   * 事件:一件事件
   * 事件源:事件发生的地方
   * 监听器:一个对象
   * 注册监听:将事件源、事件、监听器绑定到一起,当事件源发生某个事件后,执行监听器代码
 * `ServletContextListener`:监听ServletContext对象的创建和销毁
   * `void contextDestroyed(ServletContextEvent sce)`:ServletContext对象被销毁之前会调用该方法
   * `void contextInitialized(ServletContextEvent sce)`:ServletContext对象创建后调用该方法
 * 使用
   * 实现ServletContextListener接口
   * 重写方法
   * 编写web.xml
Last modification:September 12th, 2020 at 08:32 pm
如果觉得我的文章对你有用,请随意赞赏