JavaWeb三大件之Listener

1.JavaWeb监听器

监听器:

  • 是一个接口,内容由我们自己实现
  • 需要注册,例如注册到按钮上
  • 监听器中的方法,会在特殊事件发生时被调用

观察者:

  • 事件源
  • 事件
  • 监听器

在JavaWeb被监听的的事件源为:ServletContext、HttpSession、ServletRequest三大域对象

ServletContext
  • 创建与销毁监听器:ServletContextListener
    • 创建时调用的方法:contextDestroyed(ServletContextEvent sce)
    • 销毁时调用的方法:contextInitialized(ServletContextEvent sce)
  • 操作域属性的监听器:ServletContextAttirbuteListener
    • 添加属性时调用的方法:attributeAdded(ServletContextAttributeEvent event)
    • 替换属性时调用的方法:attributeReplaced(ServletContextAttributeEvent event)
    • 移出属性时调用的方法:attributeReplaced(ServletContextAttributeEvent event)
Httpsession
  • 创建与销毁监听器:HttpsessionListener
    • 创建时调用的方法:sessionCreated(HttpSessionEvent se)
    • 销毁时调用的方法:sessionDestroyed(HttpSessionEvent se)
  • 操作域属性的监听器:HttpsessionAttirbuteListener
    • 添加属性时调用的方法:attributeAdded(HttpSessionBindingEvent event)
    • 替换属性时调用的方法:attributeReplaced(HttpSessionBindingEvent event)
    • 移出属性时调用的方法:attributeReplaced(HttpSessionBindingEvent event)
ServletRequest
  • 创建与销毁监听器:ServletRequestListener
    • 创建时调用的方法:requestDestroyed(ServletRequestEvent sre)
    • 销毁时调用的方法:requestInitialized(ServletRequestEvent sre)
  • 操作域属性的监听器:ServletRequestAttirbuteListener
    • 添加属性时调用的方法:attributeAdded(ServletRequestAttributeEvent event)
    • 替换属性时调用的方法:attributeReplaced(ServletRequestAttributeEvent event)
    • 移出属性时调用的方法:attributeReplaced(ServletRequestAttributeEvent event)
感知监听(都与HttpSession相关)
Session自动序列化

Session会在服务器停止时序列化到work目录的catalina中

  • 禁止session序列化
    content.xml:<Manager pathname="" />
Session的钝化和活化

钝化:通过序列化把session保存到硬盘
活化:通过反序列化把session从硬盘读到内存

保存到tomcat\conf\catalina\localhost下,文件名为项目名

<Context>
    <Manager className="org.apache.catalina.session.PresistentManager" maxIdleSwap="1">单位分钟,当用户长时间不访问时,session会自动钝化
        <Store className="org.apache.catalina.session.FileStore" directory="Mysession">
    </Manager>
</Context>
  • 一个session一个文件,就算session活化,钝化文件也不会被删除
    它用来添加到JavaBean上,而不是添加到三大域上
    这两个监听器都不需要在web.xml中注册
    监听JavaBean是否被添加到session
    监听JavaBean是否被钝化活化,要实现JavaBean序列化接口

  • HttpSessionBindingListener

    • session绑定JavaBean时:valueBound(HttpSessionBindingEvent event)
    • session绑定JavaBean时:valueBound(HttpSessionBindingEvent event)
  • HttpSessionActivationListener

    • 钝化:sessionDidActivate(HttpSessionEvent se)
    • 活化:sessionWillPassivate(HttpSessionEvent se)

2.JavaWeb中编写监听器

可以在这个监听器中存放一些tomcat启动时就要完成的代码,比如JDBC连接

  • 写一个监听器类:必须实现某个监听器接口
public class AListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {

    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {

    }
}
  • 注册,在web.xml中
    <listener>
        <listener-class>me.dddz.web.listener.AListener</listener-class>
    </listener>

猜你喜欢

转载自blog.csdn.net/weixin_48568292/article/details/107349525