Java 笔记 十一 Filter&Listener

222 阅读3分钟

Filter

1. 概念:
    生活中的过滤器: 净水器,空气净化器,土匪
    web中的过滤器: 当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能
    过滤器的作用:
    一般用于完成通用的操作。如: 登录验证,统一编码处理,敏感字符过滤
    
2. 快速入门
    1. 步骤:
        1. 定义一个类,实现接口Filter
        2. 重写方法
        3. 配置拦截路径
            1. web.xml
            2. 注解

3. 过滤器细节
    1. web.xml配置
    <filter>
        <filter-name>filterTest</filter-name>
        <filter-class>cn.lonsun.web.Filter.FilterTest1</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>filterTest</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    2. 过滤器执行流程
        1. 执行过滤器
        2. 执行放行后的资源
        3. 回来执行过滤器放行代码下边的代码
    3. 过滤器生命周期方法
        1. init: 在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次,用于加载资源
        2. doFilter: 每一次请求被拦截资源时,会执行。执行多次
        3. destory: 在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destory方法。只执行一次
    4. 过滤器配置详解
        拦截路径配置:
        1. 具体资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行
        2. 拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行
        3. 后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
        4. 拦截所有资源: /* 访问所有资源时,过滤器都会被执行
        拦截方式配置:
            注解配置:
                设置dispatcherTypes属性
                1. REQUEST: 默认值。浏览器直接请求资源
                2. FORWARD: 转发配置资源
                3. INCLUDE: 包含访问资源
                4. ERROR: 错误跳转资源
                5. ASYNC: 异步访问资源
            web.xml配置
                设置<dispatcher></dispatcher>标签
    5. 过滤器链(配置多个过滤器)
        执行顺序: 如果有俩个过滤器: 过滤器1和过滤器2
        1. 过滤器1
        2. 过滤器2
        3. 资源执行
        4. 过滤器2
        5. 过滤器1
        过滤器先后顺序问题:
        1. 注解配置: 按照类名的字符串比较规则比较,值小的先执行
            如: AFilter和BFilter,AFilter就先执行了
        2. web.xml配置: <filter-mapping>谁定义在上边,谁先执行

Listener

1. 概念: web的三大组件之一
    事件的监听机制:
        事件: 一件事情
        事件源: 事件发生的地方
        监听器: 一个对象
        注册监听: 将事件,事件源,监听器绑定在一起。当事件源上发生某个事件后,执行监听器代码
2. ServletContextListener: 监听ServletContext对象的创建于销毁
    方法:
        void contextInitialized(ServletContextEvent sce)
        servletContext对象创建后会调用该方法
        void contextDestroyed(ServletContextEvent sce)
        servletContext销毁之前会创建的方法
        
    步骤:
        1. 定义一个类,实现ServletContextListener接口
        2. 重写方法
        3. 配置
            1. web.xml
                <listener>
                    <listener-class>cn.lonsun.web.Listener.ContextListener</listener-class>
                </listener>
                
                初始化参数:
                <context-param>
                    <param-name>servletContextListener</param-name>
                    <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
                </context-param>
            2. 注解
                @webListener