7、过滤器和监听器

百般思念 提交于 2019-11-28 04:58:55

过滤器

  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、过滤器的特点  
    1. 方便增加或减少某个功能模块,需要添加过滤就多部署一个class修改一下web.xml文件,需要减少某个功能只要删除web.xml中对应的声明即可。
      1. 方便修改处理逻辑。当把一些功能独立到某个模块时,如果逻辑变了,只修改这一个文件并更新就可以实现功能的改变,而不用修改每一个使用这个插件的组件。
        1. 将多个模块相同的代码集中写在一个类里面,方便代码的维护

          5、如何编写过滤器?

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

              容器启动之后会立即创建过滤器实例(只会创建一个),接下来会调用init方法(只执行一次),FilterConfig:用来读取初始化参数

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

              容器在销毁过滤器实例之前会调用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、

         

        标签
        易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
        该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!