Loading

Servlet中的过滤器和监听器

1.什么是过滤器?

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

2.生命周期:

   1、servlet:servlet的生命周期始于它被装入web服务器的内存时,并在web服务器终止或重新装入servlet时结束。servlet一旦被装入web服务器,一般不会从web服务器内存中删除,直至web服务器关闭或重新结束。
          (1)、装入:启动服务器时加载Servlet的实例; 
        (2)、初始化:web服务器启动时或web服务器接收到请求时,或者两者之间的某个时刻启动。初始化工作有init()方法负责执行完成; 
        (3)、调用:从第一次到以后的多次访问,都是只调用doGet()或doPost()方法; 
        (4)、销毁:停止服务器时调用destroy()方法。

    2、filter:(一定要实现javax.servlet包的Filter接口的三个方法init()、doFilter()、destroy(),空实现也行) 
         (1)、启动服务器时加载过滤器的实例,并调用init()方法来初始化实例; 
         (2)、每一次请求时都只调用方法doFilter()进行处理; 
         (3)、停止服务器时调用destroy()方法。

   3、listener:类似于servlet和filter

           web.xml 的加载顺序是:context- param -> listener -> filter -> servlet 

       4、interceptor:以struts的拦截器为例,加载了struts.xml以后,初始化相应拦截器。当action请求来时调用intercept方法,服务器停止销毁interceptor。

3.过滤器的执行流程 

 

 Ø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>

 

4.什么是监听器?

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

5.监听器的分类:

       第一维度:

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

       第二维度:

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

 总结如图:

    

6.如何编写监听器呢?

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

    b)覆盖监听器的方法

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

 

7.过滤器和拦截器的区别与联系:

  a)拦截器是基于java反射机制的,而过滤器是基于函数回调的。

  b)过滤器依赖与servlet容器,而拦截器不依赖与servlet容器。

  c)拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。

  d)拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。

  e)在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次

 


 

                       

                      成功的秘诀在于永不改变既定的目标

 

posted @ 2020-09-16 18:35  戴戴代代  阅读(245)  评论(0编辑  收藏  举报