如何实现listener

目前我的项目中有以下需求:

功能组件中有些初始数据,没有必要再数据库中单独建个表来存储,因为这个功能组件会在多个系统中应用到,所使用的数据表在各个业务系统中都有一套,这样这个初始数据表就有些冗余,所以就改变了存储的策略,将这些初始数据放到xml中,在系统启动加载web.xml时,就加载该监听,解析xml取出数据,存放到内存当中,使用时,从内容中调用就可以了。

 

web.xml中配置如下

<listener>
        <listener-class>cpcns.gongyongzujian.wenjianchuanshu.parsexml.ReadXml</listener-class>
 </listener>

 

实现原理:

自定义的监听类要实现”ServletContextListener“

重写一下初始化和销毁方法

 

public void contextDestroyed(ServletContextEvent event) {

    }

  public void contextInitialized(ServletContextEvent event) {
 
 }

 

业务的实现在contextInitialized()中实现

 

获取一些对象的方法:

final ServletContext servletContext =event.getServletContext();//通过event获得servlet上下文的对象

 

InputStream in = servletContext.getResourceAsStream(path);//通过servletContext获得文件流

 

path = /WEB-INF/classes/xmldata/BoFangFangShi.xml//path的值的写法,应该是已编译的class下的文件路径,否则找不到

 

 

在Java中,`ApplicationListener`接口用于监听特定类型的事件,如`ApplicationEvent`。要实现这个接口,首先你需要创建一个类并实现`ApplicationListener`的抽象方法`onApplicationEvent()`。下面是一个简单的示例: ```java import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class CustomAppListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("ServletContext initialized: " + sce.getServletContext().getServletContextName()); // 在这里添加初始化时需要执行的代码 } @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("ServletContext destroyed"); // 在这里添加应用程序销毁时需要执行的清理操作 } @PostConstruct public void init() { // 这里可以执行一些额外的初始化操作 } @PreDestroy public void destroy() { // 这里可以执行应用程序关闭前的清理操作 } } ``` 在这个例子中,`contextInitialized()`方法会在应用程序上下文初始化时调用,`contextDestroyed()`则在应用程序上下文关闭时触发。`@PostConstruct`和`@PreDestroy`是JSR-250注解,用于标记构造器完成后的初始化操作和对象销毁前的操作。 要让这个监听器生效,你需要在`web.xml`文件中注册它,如下所示: ```xml <listener> <listener-class>com.example.CustomAppListener</listener-class> </listener> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值