欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Filter过滤器和Listener监听器详解

程序员文章站 2023-08-21 22:19:07
 filter过滤器和listener监听器详解 filter过滤器 filter的简介 对资源的访问进行过滤,相当于小区的保安,进去要检查,出去还要...

 filter过滤器和listener监听器详解

filter过滤器

filter的简介

对资源的访问进行过滤,相当于小区的保安,进去要检查,出去还要检查。

filter的使用

编写一个类,继承并实现javax.servlet.filter。

package com.jyh.filter;
  import java.io.ioexception;
  import javax.servlet.filter;
  import javax.servlet.filterchain;
  import javax.servlet.filterconfig;
  import javax.servlet.servletexception;
  import javax.servlet.servletrequest;
  import javax.servlet.servletresponse;


  public class filterdemo1 implements filter {

    private filterconfig filterconfig;

    public filterdemo1(){
      system.out.println("实例化了");
    }

    //初始化
    @override
    public void init(filterconfig filterconfig) throws servletexception {
      //通过这个获取过滤器在web.xml里面的配置信息
      this.filterconfig = filterconfig;
      system.out.println("过滤器初始化了");
    }

    //执行
    @override
    public void dofilter(servletrequest req, servletresponse res,
        filterchain chain) throws ioexception, servletexception {

      //获取在web.xml中本过滤器配置的名为encoding的参数
      string encoding = filterconfig.getinitparameter("encoding");
      if(encoding == null){
        encoding = "utf-8";
      }
      //设置编码格式
      req.setcharacterencoding(encoding);
      res.setcontenttype("text/html;charset=" + encoding);
      system.out.println("过滤前");
      //放行
      chain.dofilter(req, res);
      system.out.println("过滤后");
    }

    //销毁
    @override
    public void destroy() {
      system.out.println("过滤器销毁了");
    }

  }

在web.xml中配置filter

<filter>
  <filter-name>filterdemo1</filter-name>
  <filter-class>com.jyh.filter.filterdemo1</filter-class>
  <!-- 配置参数 -->
  <init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>filterdemo1</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

过滤器是用来对访问进去过滤的,所以需要在请求前做什么和请求之后做什么都可以用过滤器来做,例如编码的设置,自动登录等。串联过滤器什么的听着就知道是什么情况了。

listener监听器

编写一个类继承实现以下监听器接口。

监听servletcontext、httpsession、servletrequest对象的创建和销毁的监听器

servletcontextlistener: 
httpsessionlistener: 
serlvetrequestlistener:

监听servletcontext、httpsession、servletrequest属性(attributes)变化的监听器

servletcontextattributelistener 
httpsessionattributelistener 
serlvetrequestattributelistener

1.感知型监听器:不需要注册。

httpsessionbindinglistener:实现该接口的类的实例,能够感知自己何时被放到了httpsession域范围中,和何时从httpsession域范围中删除。

httpsessionactivationlistener:实现该接口的类的实例,能够感知自己何时随着httpsession钝化和激活。

在web.xml配置一下

<listener>
   <!-- 指向自己缩写的监听器类 -->
  <listener-class>com.jyh.listener.mycontextlistener</listener-class>
 </listener>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!