A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

『黑马程序员济南』JavaEE就业笔记串讲--监听器Listener

监听器的概述:
什么是监听器:
  * 监听器:就是一个Java类,用来监听其他的Java的状态的变化.
监听器的用途:
  * 用来监听其他的对象的变化的.
  * 主要应用在图形化界面中比较多:
    * GUI,Android.
监听器的术语:
  * 事件源:指的是被监听的对象.(汽车)
  * 监听器:值的是监听的对象.(报警器)
  * 事件源与监听器的绑定:就是在汽车上安装报警器.
  * 事件:指的是事件源的改变.(踹汽车一脚)---主要的功能获得事件源对象.

WEB中的监听器:
WEB中的Listener和Filter是属于Servlet规范中的高级的技术.
WEB中的监听器共有三类八种(监听三个域对象)
  * 事件源:Servlet中的三个域对象.ServletContext,HttpSession,ServletRequest.
  * 监听器:自定义类实现8个接口.
  * 事件源和监听器的绑定:配置.
WEB中的监听器的分类:
三类八种:
* 一类:监听三个域对象的创建和销毁的监听器:
    * ServletContextListener
    * HttpSessionListener
    * ServletRequestListener
* 二类:监听三个域对象的属性变更的监听器(属性添加,移除,替换):
    * ServletContextAttributeListener
    * HttpSessionAttributeListener
    * ServletRequestAttributeListener
* 三类:监听HttpSession中的JavaBean的状态改变(绑定,解除绑定,钝化,活化)
    * HttpSessionBindingListener
    * HttpSessionActivationListener

WEB中的监听器的使用:
编写一个类实现监听器的接口:
通过配置文件配置监听器:
一类:监听三个域对象的创建和销毁的监听器:ServletContextListener:监听ServletContext对象的创建和销毁:
方法:
  contextDestory()
  contextInitialized()

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

应用代码
[Java] 纯文本查看 复制代码
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对象被销毁了...");
    }
}

配置:
  
[XML] 纯文本查看 复制代码
<!-- 配置监听器 -->
  <listener>
      <listener-class>com.itheima.weblistener.MyServletContextListener</listener-class>
  </listener>

企业中的应用:
* 1.加载框架的配置文件        :Spring框架 ContextLoaderListener
* 2.定时任务调度:
    * Timer,TimerTask
HttpSessionListener:监听HttpSession的创建和销毁的监听器:
方法
  sessionCreated()
  sessionDestroyed()

HttpSession何时创建和销毁的
* 创建:服务器端第一次调用getSession();
* 销毁:
    * 非正常关闭服务器(正常关闭session会序列化):
    * session过期了默认30分钟.
    * 手动调用session.invalidate();
HttpSession的问题
* 访问Servlet会不会创建Session    : 不会
* 访问JSP会不会创建Session        :会.
* 访问html会不会创建Session      :不会
应用的代码
[XML] 纯文本查看 复制代码
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被销毁了...");
    }
}

配置:
  
[XML] 纯文本查看 复制代码
<listener>
    <listener-class>com.itheima.weblistener.MyHttpSessionListener</listener-class>
  </listener>

ServletRequestListener:监听ServletRequest对象的创建和销毁的监听器:
方法:
  requestDestroyed()
  requestInitialized()

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

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

应用的代码
[Java] 纯文本查看 复制代码
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被创建了...");
    }

}

配置:
  
[XML] 纯文本查看 复制代码
<listener>
    <listener-class>com.itheima.weblistener.MyServletRequestListener</listener-class>
  </listener>

二类:监听三个域对象的属性变更的监听器:(属性添加,移除,替换)ServletContextAttributeListener:监听ServletContext对象的属性变更:
  attributeAdded(ServletContextAttributeEvent)
  attributeRemoved(ServletContextAttributeEvent)
  attributeReplaced(ServletContextAttributeEvent)

HttpSessionAttributeListener:监听HttpSession中的属性变更:
  attributeAdded(httpSessionBindingEvent)
  attributeRemoved(httpSessionBindingEvent)
  attributeReplaced(httpSessionBindingEvent)

ServletRequestAttributeListener:监听ServletRequest对象的属性变更的:
  attributeAdded(ServletReqestAttributeEvent)
  attributeRemoved(ServletReqestAttributeEvent)
  attributeReplaced(ServletReqestAttributeEvent)
三类:监听HttpSession中的JavaBean的对象的状态改变的监听器,第三类监听器很特殊,不需要进行配置的.作用在JavaBean上的监听器.JavaBean可以自己感知到在Session中的状态.,HttpSessionBindingListener:监听HttpSession中的JavaBean的绑定和解除绑定的
  valueBound()
  valueUnbound()
HttpSessionActivationListener:监听HttpSession中的JavaBean的钝化和活化的.
  sessionDidActivate();        :--活化(反序列化)
  sessionWillPassivate();    :--钝化(序列化到硬盘)
***** 优化Session:
     * 通过配置<Context>标签配置定时session序列化.
         * 在tomcat/conf/context.xml中配置<Context>                               :在tomcat中所有的虚拟主机和虚拟路径都会按照这个配置执行.
         * 在tomcat/conf/Catalina/localhost/context.xml配置<Context>    :在tomcat中的localhost虚拟主机中的所有虚拟路径按照这个配置执行.
         * 在当前的工程下的META-INF/context.xml配置<Context>              :当前这个工程按照配置执行.


点进这个帖子的同学肯定是要奋发图强,学技术拿高薪的有志青年,这里我看你骨骼惊奇,是个绝世的练武奇才,你我有缘,今天我就把这个武林秘籍如来神掌传授于你! 什么?不想学如来神掌?不要紧!这里有各个门派的武林绝学,链接拿好!!哈哈哈哈



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马