监听器

1.监听器的术语

事件源:指的是被监听的对象.(汽车)
监听器:值的是监听的对象.(报警器)
事件源与监听器的绑定:就是在汽车上安装报警器.
事件:指的是事件源的改变.(踹汽车一脚)---主要的功能获得事件源对象.

2.web中的监听器

WEB中的Listener和Filter是属于Servlet规范中的高级的技术.
WEB中的监听器共有三类八种(监听三个域对象)
事件源:servlet中的三个域对象:ServletContext,HttpSession,ServletRequest
监听器:自定义实现8个接口
事件源和监听器的绑定:配置

3.web中的监听器的分类

三类八种:
一类:监听三个域对象的创建和销毁的监听器
*ServletContextListener
*HttpSessionListtener
*ServletRequestListener

二类:监听三个域对象属性变更的监听器(属性添加,移除,替换)
*ServletContextAttributeListener
*HttpSessionAttributeListener
*ServletRequestAttributeListener

三类:监听HttpSession中的javabean的状态改变(绑定,解除绑定,钝化,活化)
*HttpSessionBindingListener
*HttpSessionActiveListener

ServletContextListener:监听ServletContext对象的创建和销毁
【ServletContext对象的创建和销毁】:
* 创建:服务器启动的时候,服务器为每个WEB应用创建一个属于该web项目的对象ServletContext.
* 销毁:服务器关闭或者项目从服务器中移除的时候.

public class MyServletContextListener implements ServletContextListener{

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("ServletContext对象被创建了...");
    }

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

}

配置:

  <!-- 配置监听器 -->
  <listener>
      <listener-class>com.itheima.weblistener.MyServletContextListener</listener-class>
  </listener>

HttpSessionListener:监听HttpSession的创建和销毁的监听器:
【HttpSession何时创建和销毁的】
* 创建:服务器端第一次调用getSession();
* 销毁:
* 非正常关闭服务器(正常关闭session会序列化):
* session过期了默认30分钟.
* 手动调用session.invalidate();

【HttpSession的问题】
* 访问Servlet会不会创建Session : 不会
* 访问JSP会不会创建Session :会.
* 访问html会不会创建Session :不会

public class MyHttpSessionListener implements HttpSessionListener{

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("HttpSession被创建了...");
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("HttpSession被销毁了...");
    }

}

配置:

  <listener>
    <listener-class>com.itheima.weblistener.MyHttpSessionListener</listener-class>
  </listener>


ServletRequestListener:监听ServletRequest对象的创建和销毁的监听器:

【request对象何时创建和销毁】:
* 创建:客户端向服务器发送一次请求,服务器就会创建request对象.
* 销毁:服务器对这次请求作出响应后就会销毁request对象.

【问题】:
访问一个Servlet会不会创建request对象:会
访问一个JSP会不会创建request对象:会
访问一个HTML会不会创建request对象:会

public class MyServletRequestListener implements ServletRequestListener{

    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        System.out.println("ServletRequest被销毁了...");
    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        System.out.println("ServletRequest被创建了...");
    }

}

配置:

  <listener>
    <listener-class>com.itheima.weblistener.MyServletRequestListener</listener-class>
  </listener>
原文地址:https://www.cnblogs.com/learnjfm/p/6947541.html