JavaWeb中Servlet技术之监听器

Listener监听器

Listener是什么(怎么理解监听)
  • 它是一个接口,可以监听客户端的请求、服务端的操作等。注意:内容有我来实现
  • 它需要注册(web.xml中注册)
  • 监听中的方法会在特殊事件发生时调用
javaWeb中一共有8个监听
  • 事件源,就是三大域
    • ServletContext
      • 生命周期监听
        • ServletContextListener,有两个方法,一个出生时调用,一个死亡时调用
      • 属性监听
        • ServletContextAttributeListener,有三个方法,分别在添加、覆盖、移除时调用
    • HttpSession
      • 生命周期监听
        • HttpSessionListener,有两个方法,一个出生时调用,一个死亡时调用
      • 属性监听
        • HttpSessionAttributeListener,有三个方法,分别在添加、覆盖、移除时调用
    • ServletRequest
      • 生命周期监听
        • ServletRequestListener,有两个方法,一个出生时调用,一个死亡时调用
      • 属性监听
        • ServletRequestAttributeListener,有三个方法,分别在添加、覆盖、移除时调用
代码实现步骤(生命周期监听)
  • 实现ServletContextListener

    • 创建一个类,实现ServletContextListener接口
    • 重写生命周期方法
      • contextDestroyed(ServletContextEvent sce)
        • 销毁时调用
      • contextInitialized(ServletContextEvent sce)
        • 创建时调用
        • ServletContextEvent最主要的就是拿到事件源通过getServletContext() 方法
    • 作用(重点)
      • 在项目中,可能有一些tomcat需要的启动数据,可以在contextInitialized方法方法中初始化
  • HttpSessionListener

    • 创建一个类,实现HttpSessionListener接口
    • 重写生命周期方法
      • sessionCreated(HttpSessionEvent se)
        • 创建时调用
        • HttpSessionEvent拿到事件源,通过getSession() 方法
      • sessionDestroyed(HttpSessionEvent se)
        • 销毁时调用
  • ServletRequestListener

    • 创建一个类,实现ServletRequestListener接口
    • 重写生命周期方法
      • requestDestroyed(ServletRequestEvent sre)
        • 销毁时调用
      • requestInitialized(ServletRequestEvent sre)
        • 创建时调用
        • ServletRequestEvent拿到事件源,getServletRequest()和getServletContext()方法
代码实现步骤(属性监听)(不常用)
  • ServletContextAttributeListener
    • 创建一个类,实现ServletRequestListener接口
    • 重写方法
      • attributeAdded(ServletContextAttributeEvent scab)
        • 向ServletCOntext中添加属性时调用
        • getName()
        • getValue()
        • getServletContext()等方法
      • attributeRemoved(ServletContextAttributeEvent scab)
        • 向ServletCOntext中移除属性时调用
        • getName()
        • getValue()
        • getServletContext()等方法
      • attributeReplaced(ServletContextAttributeEvent scab)
        • 向ServletCOntext中添覆盖属性时调用
        • getName()
        • getValue()
        • getServletContext()等方法
  • 其他的原理一样,这个请自己动手扩展一下
感知监听器(都与HttpSession相关)
  • 它用来添加到JavaBean中
  • 这两个监听器都不要在web.xml中注册
    • HttpSessionBindingListener
      • JavaBean类去实现这个接口,并重写方法
      • valueBound(HttpSessionBindingEvent event)
        • 加载到session中时调用
        • HttpSessionBindingEvent下的方法
          • getSession()
          • getName()
          • getValue()
      • valueUnbound(HttpSessionBindingEvent event)
        • 从session中移除时会被调用
        • HttpSessionBindingEvent下的方法
          • getSession()
          • getName()
          • getValue()
    • 作用:javaBean这个了知道什么时候被session加载,什么时候被session抛弃
Session的钝化和活化
  • 我们知道当把数据存储到session中时,服务器关闭在重启的时候,我们浏览器访问数据还是可以访问到的
    因为服务器会在服务器关闭的时候把所有session存到硬盘的SESSIONS.ren中,等服务再次启动时再从SESSIONS
    中拿到数据,这也是session死而复生的秘密(钝化和活化)

  • 在项目中为了节约服务器内存而使用钝化和活化

    <Manager className="org.apache.catalina.session.PersistentManager"  saveOnRestart="true" maxActiveSessions="1">
         <Store className="org.apache.catalina.session.FileStore" directory="指定文件地址">
         </Store>  
    </Manager>
    
HttpSessionActivationListener
  • javabean类实现这个接口,并重写钝化和活化调用时的方法方法

    • sessionDidActivate(HttpSessionEvent se)
      • 活化时调用
    • sessionWillPassivate(HttpSessionEvent se)
      • 钝化时调用
  • 注意:javabean如果就这样随着钝化的话这个类是不会保存在硬盘上的他会死掉,没有钝化的”通行证”。想活下来就要序列化。就是实现java.io.Serializable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值