1.Listener

    [1]监听器简介
        > Listener是JavaWeb的三大组件之一,Servlet、Filter、Listener
        > Listener翻译过来就是监听器
        > 现实生活中的监听器:
            - 监听谁:明星
            - 监听器:朝阳群众
            - 监听事件:干坏事
            - 回调函数:报警
 
        > JavaWeb中的监听器:
            - 监听谁:ServletContext、HttpSession、ServletRequest
            - 监听器:自己写
            - 监听的事件:生命周期、属性的变化
            - 回调函数:自己写
 
        > JavaWeb中的监听器,共分为三大类,一共8个:
 
        > WEB组件的特点:
            1.都需要创建一个类并实现某个接口
            2.都要在web.xml文件中进行配置
 
    [2]监听器分类   
        1.生命周期监听器(3个)
        2.属性变化监听器(3个)
        3.session中指定类属性变化监听器(2)
 
    [3]生命周期监听器:
        > 监听ServletContext、HttpSession、ServletRequest三个对象创建和销毁
 
        > javax.servlet.ServletContextListener --> 监听ServletContext的生命周期变化
            - 方法:
                void contextDestroyed(ServletContextEvent sce)
                    - 在ServletContext对象销毁前调用
 
                void contextInitialized(ServletContextEvent sce)
                    - 在ServletContext对象创建后调用
 
            - 参数:
                ServletContextEvent
                    - 可以用来获取ServletContext对象
 
        > javax.servlet.http.HttpSessionListener --> 监听HttpSession对象的生命周期变化
            - 方法:
                void sessionCreated(HttpSessionEvent se)
                    - 在HttpSession对象创建以后调用
 
                void sessionDestroyed(HttpSessionEvent se)
                    - 在HttpSession对象销毁前调用
 
            - 参数:
                HttpSessionEvent
                    - 可以用来获取HttpSession对象
 
        > javax.servlet.ServletRequestListener --> 监听request对象的生命周期的变化
            - 方法:
                void requestDestroyed(ServletRequestEvent sre)
                    - 在request对象销毁前调用
 
                void requestInitialized(ServletRequestEvent sre)
                    - 在request对象创建后调用
 
            - 参数:
                ServletRequestEvent
                    - 可以用来获取ServletContext对象
                    - 可以用来获取ServletRequest对象
 
    [4]属性监听器
        > ServletContext属性变化监听器
            javax.servlet.ServletContextAttributeListener
                - 方法:
                    void attributeAdded(ServletContextAttributeEvent scab)
                        - 当我们向application域中添加属性时调用
 
                    void attributeRemoved(ServletContextAttributeEvent scab)
                        - 当我们从application域中移除属性时调用
 
                    void attributeReplaced(ServletContextAttributeEvent scab)
                        - 当application域中一个属性被替换时调用
 
        > HttpSession的属性变化监听器
            javax.servlet.http.HttpSessionAttributeListener
                - 方法:
                    void attributeAdded(HttpSessionBindingEvent se)
                        - 当我们向session域中添加属性时调用
 
                    void attributeRemoved(HttpSessionBindingEvent se)
                        - 当我们从session中移除属性时调用
 
                    void attributeReplaced(HttpSessionBindingEvent se)
                        - 当session域中的一个属性被替换时调用
 
                参数:
                    HttpSessionBindingEvent:
                        作用:
                            1.获取发生变化的属性的名字 getName()
                            2.获取发生变化的属性的值 getValue() 注意属性替换时,获取到是旧的属性值
                            3.获取HttpSession对象 getSession() 可以通过session对象获取到新的属性值
 
        > ServletRequest属性变化监听器
            -javax.servlet.ServletRequestAttributeListener
                - 方法:
                    void attributeAdded(ServletRequestAttributeEvent srae)
                        - 当我们向request域中添加属性时调用
 
                    void attributeRemoved(ServletRequestAttributeEvent srae)
                        - 当我们从request域中移除属性时调用
 
                    void attributeReplaced(ServletRequestAttributeEvent srae)
                        - 当request域中的一个属性被替换时调用
 
 
    > 监听Session中指定类的实例属性变化的监听器
        - 这两个监听器的接口,由一个JavaBean去实现,而且不用编写配置文件
 
    [5]HttpSessionBindingListener
        void valueBound(HttpSessionBindingEvent event)
            - 当该类实例设置进session域中时调用
 
        void valueUnbound(HttpSessionBindingEvent event)
            - 当该类的实例从session域中移除时调用
 
        HttpSessionBindingEvent:
            作用:
                1.获取发生变化的属性的名字 getName()
                2.获取发生变化的属性的值 getValue()
                3.获取HttpSession对象 getSession()
 
    [6]HttpSessionActivationListener
        > 监听某个类的实例和session一起活化和钝化的监听器
        - 方法:
            void sessionDidActivate(HttpSessionEvent se)
                - 当该类实例和session一起活化时调用
 
            void sessionWillPassivate(HttpSessionEvent se)
                - 当该类实例和session一起钝化时调用
 
        - 参数:
            HttpSessionEvent
                - 可以用来获取HttpSession对象
 
 
 
2.Filter
    [1] Filter简介
        - Filter直译过来就是过滤器的意思
        - JavaWeb中的Filter是用来过滤请求
        - Filter是JavaWeb中三大组件之一:Servlet、Filter、Listener
        - 三大组件都需要运行在服务器端
        - 编写WEB组件有一个共同的特点:
            1.编写一个类实现某个接口
            2.在web.xml文件中进行配置
        - Filter的作用:
            1.过滤器可以在请求到达目标资源(JSP、HTML、Servlet等等)之前拦截请求
            2.过滤器也可以放行请求,使请求到达目标资源
            3.在响应到达浏览器之前对响应做一个处理
 
    [2] Filter的HelloWorld
        1.创建一个类实现Filter接口
        2.编写web.xml配置文件
            <filter>
                <filter-name>Filter的别名</filter-name>
                <filter-class>filter的全类名</filter-class>
            </filter>
            <filter-mapping>
                <filter-name>Filter的别名</filter-name>
                <url-pattern>要拦截的请求的地址</url-pattern>
            </filter-mapping>
 
        - url-pattern的配置规则:
            1.精确匹配:只有访问的路径和url-pattern配置的路径完全一致时,才会调用Filter拦截请求
                如: /index.jsp 只会拦截项目根目录下index.jsp的请求
 
            2.路径匹配:只要访问的地址在url-pattern配置的路径下,就会调用Filter拦截请求
                如: /hello/* 只要访问项目根目录下hello路径下的资源,就会调用Filter
                    /* 只要是当前项目下的请求都会调用Filter
 
            3.后缀匹配: 只要访问的地址后缀和url-pattern一致,就会调用Filter拦截请求
                如: *.jsp 只要访问的地址以.jsp结尾,就会调用Filter
 
            注意:所有的url-pattern必须符合上述规则。
                以上规则同样适用于Servlet的url-pattern
 
            当使用Filter去拦截一个Servlet时,只需要将Filter的url-pattern配置和Servlet的一样即可,
                同时也可以在filter-mapping中设置一个servlet-name标签,来指定要拦截的Servlet,
                    这样即使Servlet的url-pattern发生改变,Filter也会照常拦截
 
    [3] Filter的生命周期
        > Filter的生命周期是Filter由被创建到被销毁的过程
        > Filter的生命周期方法:
            构造器:服务器一启动就会创建Filter的实例,只会调用一次,Filter是单例。
 
            init(): 构造器调用之后,马上调用,用来初始化Filter,只会调用一次。
                FilterConfig:代表当前Filter的配置信息,可以获取当前Filter的初始化参数。
                                还可以获取ServletContext对象。
 
            doFilter():每次拦截请求时都会调用,会调用多次。
                ServletRequest:代表浏览器发送给服务器的请求报文,和Servlet中的request是一样的。
                ServletResponse:代表的是服务器响应给浏览器的响应报文,和Servlet中的response是一样的。
                FilterChain: 用来放行请求:
                    chain.doFilter(request,response) --> 放行请求,
                        当调用该方法时,相当于调用了目标资源的service方法。
 
            destroy():项目卸载Filter对象销毁前调用,用来做一些如释放资源等收尾的工作,只会调用一次。
 
    [4] Filter的执行顺序
        - 为同一个WEB资源可以设置多个Filter拦截请求,多个Filter就组成了一个Filter链。
            当有多个Filter时,在去调用chain.doFilter()时,
                如果Filter之后还有Filter,就相当于调用下一个Filter的doFilter方法
                如果Filter之后没有Filter,就相当于调用了目标资源的service()方法
 
        - 多个Filter的执行顺序,有filter-mapping的顺序决定,filter-mapping靠前的先拦截,靠后的后拦截。
        - 注意:filter-mapping一定要在filter标签的下边
 
    [5]  dispatcher
        - Filter默认只会拦截直接向目标资源发送的请求。
        - 我们可以在filter-mapping中通过dispatcher标签来指定拦截请求的类型:
            <dispatcher>REQUEST</dispatcher>
                - request表示会拦截直接向目标资源发送的请求,如果不配置dispatcher则默认值就是request
                    如果写了dispatcher则以写的为准
 
            <dispatcher>FORWARD</dispatcher>
                - forward表示会拦截通过转发向目标资源发送的请求
 
            <dispatcher>INCLUDE</dispatcher>
                - include表示会拦截通过动态包含向目标发送的请求
 
            <dispatcher>ERROR</dispatcher>
                - error表示会拦截通过错误页面的形式向目标发送的请求
                 <error-page>
                    <error-code>404</error-code>
                    <location>/4.jsp</location>
                  </error-page>
 
    [6] HttpFilter
 
  

转载请注明出处!

http://www.cnblogs.com/libingbin/

感谢您的阅读。如果文章对您有用,那么请轻轻点个赞,以资鼓励。

Listener监听器与Filter过滤器的更多相关文章

  1. Listener监听器和Filter过滤器

    Listener监听器 WEB中的监听器 WEB 中的 Listener 和 Filter 是属于 Servlet 规范中的高级的技术.WEB中的监听器共有三类八种(监听三个域对象)* 事件源:Ser ...

  2. 02 Filter过滤器

    Filter 一.Filter过滤器 Filter过滤器它是JavaWeb的三大组件之一.三大组件分别是:Servlet程序.Listener监听器.Filter过滤器 Filter过滤器是JavaE ...

  3. 15 Filter过滤器和Listener监听器

    1.Filter:过滤器 (1) 概念:生活中的过滤器:净水器,空气净化器,土匪.web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能.过滤器的作用:一般用于完成通用的 ...

  4. Filter过滤器Listener:监听器

    Filter过滤器 1. 概念 web中的过滤器:当访问服务器资源是,过滤器可以将请求拦截下来,完成一些特殊功能: 过滤器的作用 完成通用的操作:例如登录验证.统一编码处理.敏感字符过滤... 快速入 ...

  5. java web.xml listener servlet 和filter加载顺序

    在该项目中总会遇到一些关于加载的优先问题.最近遇到了同样的类别似的,所以,如果你发现信息汇总下,以下是转载其他一些人,毕竟,人们写的不错.它不重复创建的轮.只是略作修改自己的观点. 首先能够肯定的是, ...

  6. .jsp文件的使用和理解以及一些小练习和Listener监听器

    什么是 jsp,它有什么用? jsp 的全换是 java server pages.Java 的服务器页面.jsp 的主要作用是代替 Servlet 程序回传 html 页面的数据.因为 Servle ...

  7. 什么是Listener监听器

    什么是Listener监听器 1,Listener 监听器它是JavaWeb的三大组件之一.JavaWeb的三大组件:Servlet程序,Filter过滤器,Listener监听器. 2,Listen ...

  8. listener监听器

    前言:之前写了一篇关于Filter的文章:http://tianweili.github.io/blog/2015/01/26/java-filter/,现在再来一篇Listener的,Filter和 ...

  9. 【Servlet】Java Serlvet Listener 监听器

    Listener监听器 Servlet规范中定义的一种特殊的组件,用来监听Servlet容器产生的事件并进行相应的处理 容器产生的事件分类 - 生命周期相关的事件 - 设置和删除Attribute数据 ...

随机推荐

  1. Nancy 学习-进阶部分 继续跨平台

    前面两篇,讲解Nancy的基础,及Nancy自宿主和视图引擎. 现在来学习一些进阶部分. Bootstrapper Bootstrapper 就相当于 asp.net 的Global.asax . 我 ...

  2. C#编程总结(十二)断点续传

    C#编程总结(十二)断点续传 我们经常使用下载工具,如bit精灵.迅雷.FlashGet,这些软件都支持断点续传. 断点续传即下载任务暂停后可以继续,而无需重新下载,即下载时需要通知服务器的起始位置. ...

  3. 第二讲:WCF介绍(2)

    代码 https://yunpan.cn/cPns5DkGnRGNs   密码:3913   在上一讲中我们说到 在代码 当中  完成了 服务的寄宿. 这里我们说下 在实际的开发 当中 我们一般不会去 ...

  4. object references an unsaved transient instance - save the transient instance before flushing错误

    异常1:not-null property references a null or transient value解决方法:将“一对多”关系中的“一”方,not-null设置为false(参考资料: ...

  5. java.lang.NoSuchMethodError: org.apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar

    今天在服务器部署的时候,发生了这个问题,明明在本机上使用的时候,没有发生错误,但是发布到服务器上的时候却发生了这个错误,百度了好久,发现遇到这个问题的人很多,但是却没有一个比较满意的答案,后来还是通过 ...

  6. 51Node 1065----最小正子段和

    51Node  1065----最小正子段和 N个整数组成的序列a[1],a[2],a[3],…,a[n],从中选出一个子序列(a[i],a[i+1],…a[j]),使这个子序列的和>0,并且这 ...

  7. 阿里社招B2B

    岗位描述:1. 按USE CASE进行业务需求分析和软件概要设计2. 进行软件详细设计和编码实现,确保性能.质量和安全3. 维护和升级现有软件产品,快速定位并修复现有软件缺陷岗位要求:1. 精通Web ...

  8. [moka同学笔记]Yii下国家省市三级联动

    第一次做省市三级联动时候遇到了坑,感觉还是自己太菜.头疼了很久研究了很久,最后终于发现了问题.大致总结一下思路 在控制器中实例化model,然后在视图中渲染所有国家,当选取国家时候,ajax通过 id ...

  9. [翻译] Autofac 控制范围和生命周期

    原文链接:http://docs.autofac.org/en/latest/lifetime/index.html Lifetime 是指服务的实例在程序中存活多久 – 从最初的实例化到清理(dis ...

  10. 七个结构模式之组合模式(Composite Pattern)

    定义: 组合多个对象形成树形结构来表示"整体-部分"关系的层次结构,其中的叶子对象和容器对象具有相同的接口,可以使用抽象类来进行管理. 结构图: Component:抽象构件类,对 ...