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    

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

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

          

 

转载于:https://www.cnblogs.com/danielJinyu/p/11392596.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
过滤器监听器servlet的两个重要组件,它们可以帮助我们更好地管理和处理请求和响应。以下是过滤器监听器的配置和运用方法: 1. 过滤器(Filter)的配置和运用: 过滤器用于拦截请求和响应,可以在请求到达servlet之前或者响应返回给客户端之前进行处理。过滤器可以对请求进行拦截、处理和修改,也可以对响应进行拦截、处理和修改,从而实现对请求和响应的控制和管理。 过滤器的配置需要在web.xml文件进行,例如: ``` <filter> <filter-name>MyFilter</filter-name> <filter-class>com.example.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>MyFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 这样,MyFilter就会拦截所有的请求。在MyFilter,可以重写doFilter方法,对请求和响应进行处理和修改。 2. 监听器(Listener)的配置和运用: 监听器用于监听servlet容器的事件,例如servlet的创建和销毁、session的创建和销毁、attribute的添加和移除等等。通过监听这些事件,我们可以在特定的时刻进行特定的操作,例如在session创建时初始化一些数据、在servlet销毁时释放一些资源等等。 监听器的配置也需要在web.xml文件进行,例如: ``` <listener> <listener-class>com.example.MyListener</listener-class> </listener> ``` 这样,在MyListener,可以重写对应的监听器方法,例如: ``` public class MyListener implements HttpSessionListener { public void sessionCreated(HttpSessionEvent event) { // session创建时执行的代码 } public void sessionDestroyed(HttpSessionEvent event) { // session销毁时执行的代码 } } ``` 这样,在session创建和销毁时,就会执行对应的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值