Listener-概述 Listener-ServletContextListener使用

Listener-概述 

Listener:监听器
  概念:web的三大组件之一

    事件:一件事情

    事件源:事件发生的地方

    监听器:一个对象

    注册监听:将事件,事件源,监听器绑定在一起。当事件源上发生某个事件后,执行监听器代码  

 

  ServletContextListener:监听ServletContext对象的创建和销毁

    void contextDestroyed(ServletContextEvent  sce) :ServletContext对象被销毁之前会调用该方法

    void contextInitialized(ServletContextEvent sce) :ServletContext对象创建后调用该方法 

 

 Listener-ServletContextListener使用

步骤:
  1. 定义一个类,实现ServletContextListener接口
  2. 复写方法
  3. 配置
    1. web.xml
      <listener>
        <listener-class>cn.itcast.web.listener.ContextLoaderListener</listener-class>
      </listener>

  指定初始化参数<context-param>
    2. 注解:
       @WebListener

复制代码
package com.example.day_19_fitterlistener.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import java.io.FileInputStream;
@WebListener
public class ContextLoaderListener implements ServletContextListener {

    /**
     *  监听ServletContext对象创建的,ServletContext对象服务器启动后自动创建
     *         在服务器启动后自动调用
     * @param sce
     */
    @Override
    public void contextInitialized(ServletContextEvent sce) {

        //加载资源文件
        //获取ServletContext对象
        ServletContext servletContext = sce.getServletContext();

        //记载资源文件
        String initParameter = servletContext.getInitParameter("contextConfigLocation");

        //获取真实路径
        String realPath = servletContext.getRealPath(initParameter);

        //加载进内存
        try {
            FileInputStream fileInputStream = new FileInputStream(realPath);
            System.out.println(fileInputStream);
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println("ServletContext对象被创建");
    }


    /**
     * 在服务器关闭后,ServletContext对象被销毁,当服务器正常关闭后该方法被盗用
     * @param sce
     */
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContext对象被销毁了");
    }



}
复制代码
复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

   <!-- <filter>
        <filter-name>demo1</filter-name>
        <filter-class>com.example.day_19_fitterlistener.filter.FilterDemo1</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>demo1</filter-name>

        &lt;!&ndash; 拦截路径&ndash;&gt;
        <url-pattern>/*</url-pattern>

       &lt;!&ndash; <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher>
        <dispatcher>ASYNC</dispatcher>&ndash;&gt;


    </filter-mapping>-->

    <!-- 配置监听器-->
   <!-- <listener>
        <listener-class>com.example.day_19_fitterlistener.listener.ContextLoaderListener</listener-class>
    </listener>-->
    <!-- 指定初始化参数-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>WEB-INF/applicationContext.xml</param-value>
    </context-param>

</web-app>
复制代码

 

posted @   漁夫  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示