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

  • 相关阅读:
    Linux内核网络协议栈优化总纲
    Java实现 蓝桥杯VIP 算法训练 连续正整数的和
    Java实现 蓝桥杯VIP 算法训练 连续正整数的和
    Java实现 蓝桥杯VIP 算法训练 寂寞的数
    Java实现 蓝桥杯VIP 算法训练 寂寞的数
    Java实现 蓝桥杯VIP 算法训练 学做菜
    Java实现 蓝桥杯VIP 算法训练 学做菜
    Java实现 蓝桥杯VIP 算法训练 判断字符位置
    Java实现 蓝桥杯VIP 算法训练 判断字符位置
    Java实现 蓝桥杯VIP 算法训练 链表数据求和操作
  • 原文地址:https://www.cnblogs.com/danielJinyu/p/11392596.html
Copyright © 2011-2022 走看看