• 监听器


    监听器listener在servlet2.5中配置到web.xml中,servlet3.0就可以配置到注解中。

    监听器顾名思义,就是监控被监控者的一系列变化。在web应用中监听的就是对象的初始化、销毁、增加、修改、删除值等。
    Web监听器是servle规范定义的一种特殊的类,用于监听ServletContext、HttpSession、ServletRequest等域对象的创建和销毁事件。用于监听域对象的属性增加、删除等事件。用于监听各种事件的发生,可以在这些事件发生前后做一些必要的处理。
     
    监听器的启动顺序:
        按照web.xml中配置的先后顺序启动,
     
    监听器、过滤器、servlet的启动顺序优先级:listener>filter>servlet。
     
    监听器的划分:
        按照监听的对象划分:
            1.监听应用程序环境对象(servletContext)的事件监听器,对应application,需要实现javax.servlet.ServletContextListener接口。
            2.监听用户会话对象(HttpSession)的事件监听器,对应session,需要实现javax.servlet.http.HttpSessionListener接口。
            3.监听用户消息请求对象(ServletRequest)的事件监听器,对应request,需要实现javax.servlet.ServletContextListener接口。
            javax.servlet.ServletContextListener
            javax.servlet.http.HttpSessionListener
        javax.servlet.ServletContextListener
        这三个接口提供了contextInitialized()和contextDestroyed()函数,来监听request、session、application的创建和销毁。
        按照监听的事件类型划分:
            1.监听域对象自身的创建和销毁的事件监听器
            2.监听域对象中属性的创建和销毁的事件监听器
            监听request域对象属性需要实现javax.servlet.ServletRequestAttributeListener接口
        监听session域对象属性需要实现javax.servlet.HttpSessionAttributeListener接口
        监听application域对象属性需要实现javax.servlet.ServletContextAttributeListener接口
        这三个接口提供了attributeAdded()、attributeRemoved()、attributeReplaced()函数,来监听属性添加、属性移除、属性替换函数。
            3.监听绑定到HttpSession域中的某个对象的状态的事件监听器
            保存在session中的对象有多重状态:绑定(session.setAttribute("bean",Object))到session中,从session中解除绑定(session.removeAttribute("bean"));
            随session持久化到设备中,随session从存储设备中恢复。
            servlet规范中定义了两个特殊的监听器接口 HttpSessionBindingListener和HttpSessionActivationListener来帮助javabean来了解自己在session域中的状态,实现这两个接口无需再web.xml中配置。
           属性绑定/解绑到session中:
            实现了HttpSessionBindingListener接口的 JavaBean对象可以感知自己被绑定到 Session中和从Session中删除的事件
        当对象被绑定到 HttpSession 对象中时,web 服务器调用该对象的  void valueBound(HttpSessionBindingEvent event) 方法
        当对象从 HttpSession 对象中解除绑定时,web 服务器调用该对象的 void valueUnbound(HttpSessionBindingEvent event)方法
           javax.servlet.http.HttpSessionBindingListener接口:主要包含两个函数:valueBound()和valueUnbound()。
    当自身被绑定到session属性中(session.setAttribute("bean",Object))调用valueBound()方法;
       当对象从session中解绑(sesssion.removeAttribute("bean"))的时候调用valueUnbound()函数。
       
        session钝化/激活:
        实现了HttpSessionActivationListener接口的 JavaBean 对象可以感知自己被活化和钝化的事件
    活化:javabean对象和Session一起被反序列化(活化)到内存中。
        钝化:javabean对象存在Session中,当服务器把session序列化到硬盘上时,如果Session中的javabean对象实现了Serializable接口
        那么服务器会把session中的javabean对象一起序列化到硬盘上,javabean对象和Session一起被序列化到硬盘中的这个操作称之为钝化
        如果Session中的javabean对象没有实现Serializable接口,那么服务器会先把Session中没有实现Serializable接口的javabean对象移除
        然后再把Session序列化(钝化)到硬盘中
        当绑定到 HttpSession对象中的javabean对象将要随 HttpSession对象被钝化之前,
        web服务器调用该javabean对象对象的 void sessionWillPassivate(HttpSessionEvent event)方法
        这样javabean对象就可以知道自己将要和 HttpSession对象一起被序列化(钝化)到硬盘中
        当绑定到HttpSession对象中的javabean对象将要随 HttpSession对象被活化之后,
        web服务器调用该javabean对象的 void sessionDidActive(HttpSessionEvent event)方法
        这样javabean对象就可以知道自己将要和 HttpSession对象一起被反序列化(活化)回到内存中
        MyHttpSessionActivationListener接口:主要包含两个函数sessionDidActivate()和sessionWillPassivate()。
        当session超时,会调用sessionWillPassivate()函数,将保存session中的此对象和session一起钝化到硬盘中。
        当再次请求页面,会调用sessionDidActivate()函数,将session和session中保存的对象从硬盘活化到内存中。
     
        测试钝化目录:E:lunaWorkSpace.metadata.pluginsorg.eclipse.wst.server.core mp0workCatalinalocalhostListenerTestgacl
        
     
     
     
     





  • 相关阅读:
    读书是最划算的自我投资,免费送几本最好的Python学习电子书
    一个出身寒门的状元之编程
    幼儿园小朋友都在学人工智能了,已经从小学毕业的我们该如何学?
    python语音识别终极指南
    Python可视化神器——pyecharts的超详细使用指南!
    用 Python 分析过往 36 年春晚节目数据,发现一些趣事
    拉勾网数据分析职位分析
    按时分秒对数据进行分箱
    numpy
    基于协同过滤的推荐系统案列
  • 原文地址:https://www.cnblogs.com/douJiangYouTiao888/p/6473939.html
Copyright © 2020-2023  润新知