JavaWeb 之ServletContextListener监听器

ServletContextListener简介

依赖于sevlet容器,需要配置web.xml(Spring Boot只需要配置@WebListener即可,并且使用@WebListener后,可以注入bean)。

在 Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。
当Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件,该事件由ServletContextListener 来处理。在 ServletContextListener 接口中定义了处理ServletContextEvent 事件的两个方法。

ServletContextListener接口定义:

package javax.servlet;
import java.util.EventListener;

public interface ServletContextListener extends EventListener {
	// ServletContext对象被创建后调用
    public void contextInitialized ( ServletContextEvent sce );

	// ServletContext对象被销毁前调用
    public void contextDestroyed ( ServletContextEvent sce );
}

编写案例

实现 ServletContextListener 接口并重写方法:

import org.apache.log4j.Logger;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class InitListener implements ServletContextListener {

    private static Logger log = Logger.getLogger(InitListener.class);

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        ServletContext servletContext = servletContextEvent.getServletContext();
        servletContext.setAttribute("name", "James");
        log.info("contextInit...");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.gc();
    }
}

在 web.xml 中配置该监听器:

<listener>
    <listener-class>com.mvc.InitListener</listener-class>
</listener>

@WebListener:
Servlet3.0提供@WebListener注解将一个实现了特定监听器接口的类定义为监听器,@WebFilter过滤器也可以同样用法。

在完成上述配置后,web 服务器在启动时,会直接加载该监听器。

ServletContextListener使用详解(监听Tomcat启动、关闭)

web.xml配置详解之listener

spring5取消Log4jConfigListener,运用Log4jServletContextListener代替(log4j2.xml的配置)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java web中的监听器(Listener)来实现定时任务的调度。具体来说,可以使用ServletContextListener监听器来实现在Web应用程序启动时启动定时任务,使用ServletContextAttributeListener监听器来实现在Web应用程序中添加、修改或删除定时任务时调度任务。以下是具体的实现步骤: 1. 创建一个定时任务类,实现Servlet接口,并在其中编写定时任务逻辑。例如: ```java public class MyTask implements Servlet { public void init(ServletConfig config) throws ServletException { // 初始化定时任务 } public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { // 定时任务逻辑 } public void destroy() { // 结束定时任务 } } ``` 2. 创建一个ServletContextListener监听器,在其中初始化定时任务并启动它。例如: ```java public class MyListener implements ServletContextListener { public void contextInitialized(ServletContextEvent event) { // 初始化定时任务 MyTask task = new MyTask(); task.init(event.getServletContext().getServletConfig()); // 启动定时任务 Timer timer = new Timer(); timer.schedule(task, 0, 1000); // 每隔1秒执行一次 } public void contextDestroyed(ServletContextEvent event) { // 结束定时任务 MyTask task = new MyTask(); task.destroy(); } } ``` 3. 在web.xml文件中配置监听器。例如: ```xml <listener> <listener-class>com.example.MyListener</listener-class> </listener> ``` 这样,在Web应用程序启动时,MyListener监听器会自动启动定时任务,并在Web应用程序关闭时结束任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值