Listener监听器

什么是listener?

listener是Javaweb开发中的监听器,是用于监听web常见对象 HttpServletRequest ,HttpSession ,ServletContext监听它们的创建与销毁 属性变化 session绑定javaBean


监听步骤:

  • 创建相应的监听器
  • 在web.xml中注册

例子:
1、创建一个ServletContext的监听器:
这个对象是在服务器启动时创建的,在服务器关闭时销毁的。

package com.yanglin.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyServletContextListener implements ServletContextListener{
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        //实现写在这里
        System.out.println("ServletContext对象创建了");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext对象销毁了");
    }
}

2、web.xml中注册

<listener>
    <listener-class>com.yanglin.listener.MyServletContextListenerlistener-class>
listener>

Listener监听器_第1张图片


Javaweb开发中常见监听器

  • 监听域对象的创建与销毁

    • 监听ServletContext创建与销毁 实现:ServletContextListener
    • 监听HttpSession创建与销毁 实现HttpSessionListener
    • 监听HttpServletRequest创建与销毁 实现ServletRequestListener
  • 监听域对象的属性变化

    • 监听ServletContext属性变化 ServletContextAttributeListener
    • 监听HttpSession属性变化 HttpSessionAttributeListener
    • 监听HttpServletRequest属性变化 ServletRequestAttributeListener
  • 监听session绑定javaBean

    • 它是用于监听javaBean对象是否绑定到了session域 HttpSessionBindingListener
    • 它是用于监听javaBean对象的活化与钝化 HttpSessionActivationListener

HttpSession对象的创建与销毁
Listener监听器_第2张图片

演示了Request域对象中属性变化
Listener监听器_第3张图片

在java的监听机制中,它的监听器中的方法都是有参数的,参数就是事件对象,而我们可以通过事件对象直接获取事件源。

session绑定javaBean
1.javaBean对象自动感知被绑定到session中.HttpSessionBindingListener 这个接口是由javaBean实现的,并且不需要在web.xml文件中注册.但是需要让bean对象实现HttpSessionBindingListener
Listener监听器_第4张图片
在jsp中
Listener监听器_第5张图片

2.javabean对象可以活化或钝化到session中。
HttpSessionActivationListener如果javaBean实现了这个接口,那么当我们正常关闭服务器时,session中的javaBean对象就会被钝化到我们指定的文件中。
当下一次在启动服务器,因为我们已经将对象写入到文件中,这时就会自动将javaBean对象活化到session中。
Listener监听器_第6张图片
我们还需要个context.xml文件来配置钝化时存储的文件
在meta-inf目录下创建一个context.xml文件

<Context>
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
<Store className="org.apache.catalina.session.FileStore" directory="it315"/>
                    Manager>
                Context>

你可能感兴趣的:(java)