监听器与过滤器快速入门

监听器与过滤器

监听器

监听器主要是用于监听某个对象状态变化的组件。

监听器相关术语:

  • 事件源:被监听的对象

  • 监听器:监听事件源的对象(主要有八个)

  • 注册监听器:监听器与事件源绑定

  • 响应:监听事件源发生变化时,产生的行为

监听器划分:

  • 域监听器
  • 属性监听器

域监听器

域监听器主要有ServletContextListener监听器、HttpSessionListener监听器和ServletRequestListener监听器(由于请求太频繁很少使用)三个。

以ServlettContextListener为例建立一个监听器。其他的与之类似。

package com.pony.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
 * @author pony
 * @date 2020/4/21
 */

/**
 * 创建一个监听器必须要实现对应的接口。还要在web.xml中去做关联如下
 <listener>
        <listener-class>com.pony.listener.ServletContextListenerTest</listener-class>
    </listener>
 */
public class ServletContextListenerTest implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        /**
         * 获取当前监听对象:
         */
        ServletContext servletContext = sce.getServletContext();
        ServletContext source = (ServletContext) sce.getSource();
//        System.out.println("init servlet");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
//        System.out.println("destory servlet");
    }
}

属性监听器

主要有三个:ServletContextAttributeListener、HttpSessionAttributeListener、ServletRequestAttriListener。用法与

域监听器相同。

过滤器

当访问资源时可以设置一些过滤器从而对一些请求进行筛选,过滤器嘛,顾名思义。

实现步骤

  1. 实现filter接口

    package com.pony.web.filter;
    
    import javax.servlet.*;
    import java.io.IOException;
    
    /**
     * @author pony
     * @date 2020/4/21
     */
    public class FirstFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            System.out.println("来到了firstservlet过滤器");
            /**
             * 放行
             */
            filterChain.doFilter(servletRequest,servletResponse);
        }
    
        @Override
        public void destroy() {
    
        }
    }
    
    
  2. web.xml配置

     <filter>
            <filter-name>myfilter</filter-name>
            <filter-class>com.pony.web.filter.FirstFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>myfilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    

生命周期

init()方法在服务器开启的时候就创建

destory()方法在服务器关闭时调用

doFilter()方法当匹配到mapping时才调用

原文地址:https://www.cnblogs.com/ma-liner/p/14196593.html