Listener学习笔记(一) Listener的概述和快速入门

概念

  • 事件监听机制
    1.事件:一件事情(如点击按钮)
    2.事件源:事件发生的地方(如被点击的按钮)
    3.监听器:一个对象
    4.注册监听:将事件、事件源、监听器绑定在一起,当事件源上发生某个事件后,执行监听器代码
    JavaWeb的监听器对象有很多,我们只讲其中的ServletContextListener
  • ServletContextListener
    void contextInitialized(ServletContextEvent sce):ServletContext对象创建之后会调用该方法
    void contextDestroyed(ServletContextEvent sce):ServletContext对象被销毁之前会调用该方法

步骤

  1. 定义一个类,实现ServletContextListener接口
  2. 复写方法
  3. 配置

web.xml

<listener>
    <listener-class>com.zzq.listener.ContextLoaderListrner</listener-class>
</listener>
指定初始化参数<context-param>

注解

@WebListener

代码实现(一)

配置xml测试
ContextLoaderListrner.java

public class ContextLoaderListrner implements ServletContextListener {
    /**
     * 监听ServletContext对象的创建。ServletContext对象会在服务器启动后自动被创建
     * 在服务器启动后自动调用
     *
     * @param servletContextEvent
     */
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext对象创建了。。。");
    }

    /**
     * 监听ServletContext对象的销毁。ServletContext对象会在服务器正常关闭后自动被销毁
     * 在服务器正常关闭后自动调用
     *
     * @param servletContextEvent
     */
    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext对象销毁了");
    }
}

服务器启动:

服务器正常关闭:

代码实现(二)

假设有一个xml文件,想要被加载进内存,如图:

web.xml

<!--    指定初始化参数-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
    </context-param>

ContextLoaderListrner.java

/**
     * 监听ServletContext对象的创建。ServletContext对象会在服务器启动后自动被创建
     * 在服务器启动后自动调用
     *
     * @param servletContextEvent
     */
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        //加载资源文件
        //1.获取ServletContext对象
        ServletContext servletContext = servletContextEvent.getServletContext();
        //2.加载资源文件
        String contextConfigLocation = servletContext.getInitParameter("contextConfigLocation");
        //3.获取真实路径
        String realPath = servletContext.getRealPath(contextConfigLocation);
        //4.加载进内存
        try {
            FileInputStream fis = new FileInputStream(realPath);
            System.out.println(fis);
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("ServletContext对象创建了。。。");
    }

服务器启动后:

这种使用LinstenercontextInitialized()方法加载资源文件通常被应用在该资源文件被全局使用,被多个Servlet所使用。当该资源文件需要修改时,只需要修改web.xml这一个文件,比较方便。

代码实现(三)

先把web.xml里面相关内容注释掉

然后直接加上注解

效果是一样的

发布了109 篇原创文章 · 获赞 2 · 访问量 1208

猜你喜欢

转载自blog.csdn.net/qq_42528769/article/details/104446669
今日推荐