zoukankan      html  css  js  c++  java
  • Servlet中的过滤器和监听器

    过滤器

      1、什么是过滤器?

        Servlet规范中定义的一种特殊的组件,用来拦截容器的调用过程。容器收到请求之后,首先调用过滤器,然后再调用Servlet

      2、过滤器的执行流程:  流程图中可以看出 过滤器和Servlet共享同一个request和response对象

        单个过滤器的执行流程:

               

        多个过滤器的执行流程:

          

      3、过滤器的优先级

        一个Web应用中,可以有多个过滤器,它们的优先级由位于web.xml文件中的声明顺序决定,具体是按照<filter-mapping>的顺序来决定的。如下代码所示,filter1和filter2都已经注册,执行顺序是filter2 ,filter1 。

              <filter>
                  <filter-name>filter1</filter-name>
                  <filter-class></filter-class>
              </filter>
              <filter>
                  <filter-name>filter2</filter-name>
                  <filter-class></filter-class>
              </filter>
              <filter-mapping>
                  <filter-name>filter2</filter-name>
                  <url-pattern>/comment2</url-pattern>
              </filter-mapping>
              <filter-mapping>
                  <filter-name>filter1</filter-name>
                  <url-pattern>/comment1</url-pattern>
              </filter-mapping>
     
     
      4、过滤器的生命周期:

          fiter:init()---启动服务
          servlet:init()
          fiter:service()---请求
          servlet:service()
          servlet:destroy() 
          fiter:destroy()---关闭服务

      5、如何编写过滤器?

          a 实现Filter接口,并覆盖三个方法(destroy,init,doFilter),过滤逻辑在doFilter方法中实现

          b 容器启动之后会立即创建过滤器实例(只会创建一个),接下来会调用init方法(只执行一次)

              FilterConfig:可以用来读取初始化参数

          c 容器会调用doFilter方法来处理请求

              FilterChain(过滤器链):如果调用了该对象的doFilter方法则请求继续向后执行,否则中断请求不再向后执行

          d 容器在销毁过滤器实例之前会调用destroy方法(只执行一次)

        web.xml中注册过滤器       

          <!-- 过滤器 -->
            <filter>
                  <filter-name>filter1</filter-name>
                  <filter-class>web.CommentFilter</filter-class>
            </filter>
            <filter-mapping>
                  <filter-name>filter1</filter-name>
                  <url-pattern>/comment</url-pattern>
            </filter-mapping>

        

        

    监听器

      1、什么是监听器?

          servlet规范中定义的一种特殊的组件,用来监听容器产生的事件并进行相应的处理。容器会为每个监听器只创建一个实例。

            容器一般会产生什么事件?

            绑定数据相关事件  

              容器调用了session,request,servletContext的setAttribute,removeAttribute产生的事件

            生命周期相关事件

              容器创建销毁session,request,servletContext等。

      2、监听器相关概念:

        事件源:被监听的对象。 三个域对象 request  session  servletContext

        监听器:监听事件源对象  事件源对象的状态的变化都会触发监听器

      3、 监听器的分类:

          第一维度:

              按照被监听的对象分:ServletRequest域   HttpSession域   ServletContext域

          第二维度:

              按照监听的内容分: 监听域对象的创建与销毁的    监听域对象的属性变化的

        总结如图:

                  

          ServletContextListener监听器的主要作用:

             1 初始化的工作:初始化对象 初始化数据 ---- 加载数据库驱动  连接池的初始化

             2 加载一些初始化的配置文件 --- spring的配置文件

             3 任务调度:定时器----Timer/TimerTask

       4、如何编写监听器呢?

        a)编写一个监听器类去实现监听器接口

        b)覆盖监听器的方法

        c)需要在web.xml中进行配置---注册

      5、三种监听域的生命周期

          ServletRequest        

            何时创建:每一次请求都会创建request

            何时销毁:请求结束

          HttpSession   

            何时创建:第一次调用request.getSession时创建

            何时销毁:服务器关闭销毁  session过期  手动销毁

          ServletContext    

            何时创建:服务器启动创建

            何时销毁:服务器关闭销毁

              


    作者:danielJinyu

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意请保留此段声明,请在文章页面明显位置给出原文连接
    Github:https://github.com/DanielJinyu

  • 相关阅读:
    【转】STL中map用法详解
    【转】容器 C++ set和map
    .NET简谈面向接口编程 狼人:
    详解.NET程序集的加载规则 狼人:
    ASP.NET MVC 入门介绍 (上) 狼人:
    页面片段缓存(二) 狼人:
    改善代码设计 —— 优化物件之间的特性(Moving Features Between Objects) 狼人:
    改善代码设计 —— 组织好你的数据(Composing Data) 狼人:
    C# 中奇妙的函数联接序列的五种简单方法 狼人:
    Log4Net 全方位跟踪程序运行 狼人:
  • 原文地址:https://www.cnblogs.com/danielJinyu/p/11392596.html
Copyright © 2011-2022 走看看