在Servlet API中有一个ServletContextListener接口,它能够监听ServletContext对象的生命周期,实际上就是监听Web应用的生命周期。
当Servlet容器启动或终止Web应用时,会触发ServletContextEvent事件,该事件由 ServletContextListener 来处理。在 ServletContextListener 接口中定义了处理 ServletContextEvent事件的两个方法。
contextInitialized(ServletContextEvent sce):当Servlet容器启动Web应用时调用该方法。在调用完该方法之后,容器再对Filter初始化,并且对那些在Web应用启动时就需要 被初始化的Servlet进行初始化
contextDestroyed(ServletContextEvent sce):当Servlet容器终止Web应用时调用该方法。在调用该方法之前,容器会先销毁所有的Servlet和Filter过滤器
1.spring监听器
ContextLoaderListener
public class org.springframework.web.context.ContextLoaderListener extends org.springframework.web.context.ContextLoader implements
javax.servlet.ServletContextListener {
}
2.servlet监听器
ServletContextListener
public abstract interface javax.servlet.ServletContextListener extends java.util.EventListener {
}
3.ContextLoader
public class org.springframework.web.context.ContextLoader {
}
web项目启动tomcat成功执行某个操作(比如缓存加载/日志记录/加载配置数据/)或者tomcat关掉后执行某个操作(比如资源释放/日志记录),都可以依靠监听器实现
No1.实现ServletContextListener接口,自定义一个监听器
public class MyListerner implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("tomcat注销");
}
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("tomcat初始化");
}
}
No2.在web.xml中配置此监听器
<listener>
<listener-class>demo.MyListerner</listener-class>
</listener>
No3.启动tomcat并关闭,控制台会输出
tomcat初始化
tomcat注销
上述代码功能同样可以使用servlet实现
No1.创建一个普通的Servlet类
public class ContextLoaderServlet extends HttpServlet{
public ContextLoaderServlet() {
super();
}
@Override
public void destroy() {
super.destroy();
System.out.println("Servlet销毁");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.service(req, resp);
}
@Override
public void init() throws ServletException {
super.init();
System.out.println("Servlet初始化");
}
}
No2.在web.xml中配置servlet随容器加载而初始化
<servlet>
<servlet-name>ContextLoaderServlet</servlet-name>
<servlet-class>com.ttpod.common.view.servlet.ContextLoaderServlet</servlet-class>
<!-- 多个servlet值越小,加载优先级越大,销毁优先级越小 -->
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ContextLoaderServlet</servlet-name>
<url-pattern>/servlet/ContextLoaderServlet</url-pattern>
</servlet-mapping>
No3.启动tomcat并关闭,控制台会输出
Servlet初始化
Servlet销毁
<load-on-startup>2</load-on-startup>节点配置使Servlet的生命周期和容器生命周期绑定到了一起,所以效果等同于
tomcat初始化
tomcat注销
如果同时配置了listener和servlet的监听器,listener优先级高于servlet,启动tomcat并关闭,控制台会输出
tomcat初始化
Servlet初始化
Servlet销毁
tomcat注销
虽然servlet可以充当监听器,但servlet的主要功能不是监听器,所以监听器的实现最好使用listener
使用listener可以通过ServletContextEvent获得ServletContext对象,对于容器的控制更方便灵活有效
备注:
No1.web.xml中监听器、过滤器、Servlet顺序问题
配置顺序:
ServletContext(ContextParam)-> filter -> listener -> servlet
加载顺序:
ServletContext(ContextParam) -> listener -> filter -> servlet
No2.web项目启动就加载servlet,需要配置<load-on-startup>2</load-on-startup>,如有多个servlet配置,其值越小,优先级越高,此时会初始化此servlet,也就是执行inite()方法
<load-on-startup>2</load-on-startup>节点不存在情况下,servlet被请求时才被初始化
No3.使用servlet作为监听器,好处在于可以在监听器里面使用spring mvc的功能
无论是配置还是注解实例化bean,都可以使用以下方式获得有状态的Bean实例:
//从xml中加载spring应用上下文(spring-servlet.xml含注解配置)
ApplicationContext ac = (ApplicationContext) new ClassPathXmlApplicationContext(new String[]{"/config/spring/applicationContext.xml","/config/spring/spring-servlet.xml"});
//从xml配置文件里获取SessionFactory对象
SessionFactory factory = (SessionFactory)ac.getBean("sessionFactory");
//从注解里获取IHeadService接口
IHeadService headService = (IHeadService)ac.getBean("headService");
AdvertController advertController = (AdvertController)ac.getBean("advertController");
分享到:
相关推荐
在Java Web开发中,Servlet监听器(Servlet Listener)扮演着重要的角色,它是Servlet规范的一部分,允许开发者对Web应用程序中的特定事件进行监听和响应。在这个范例中,我们将深入探讨如何利用监听器来统计在线...
Servlet监听器是Java Web开发中的一个重要概念,它允许开发者在特定的Servlet容器事件发生时执行相应的代码。在本文中,我们将深入探讨Servlet监听器的工作原理、配置和使用,结合具体的"web.xml"配置以及JSP页面的...
Servlet监听器技术是Java Servlet规范中的一项重要特性,它允许开发者在特定的Servlet容器事件发生时执行自定义的代码逻辑。这些事件可以包括Web应用程序的初始化、终止,或者是Servlet或Servlet上下文...
"Servlet监听器在基于移动Web在线考试系统中的应用" Servlet监听器是Servlet规范中定义的一种特殊类,用于监听Web应用程序中的ServletContext、HttpSession和ServletRequest等域对象的创建与销毁事件,以及这些域...
Java Servlet监听器(Listener)是Java Web开发中的一个重要组件,它们允许开发者在特定事件发生时执行自定义逻辑,而无需直接修改原有的业务代码。监听器是Servlet规范的一部分,通过实现特定的接口,开发者可以...
Servlet监听器是Java Web开发中的一个重要概念,它允许开发者在特定事件发生时执行代码,比如在Web应用程序启动、停止时,或者在用户会话创建、销毁时。这为程序员提供了更多的控制权,使得他们能够更好地管理和监控...
Servlet监听器是Java Web开发中的一个重要概念,它允许开发者在特定事件发生时执行代码,比如在Web应用程序启动、停止,或者在某个Servlet被创建或销毁时。在这个“servlet监听器实现踢人小案例”中,我们将探讨如何...
Servlet监听器是Java Web开发中的一种关键组件,主要用于监控和响应Web应用程序中的特定事件。它们是Servlet规范中定义的特殊类,能够监听ServletContext、HttpSession和ServletRequest等域对象的生命周期事件,以及...
JAVA Servlet监听器是指在Servlet容器中,用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后做一些必要的处理。监听器可以分为多种类型,每种类型都有其特定的应用场景和用途。 ...
Servlet监听器是Java Web开发中的一个重要概念,它们是Servlet API的一部分,允许开发者在特定的Servlet容器事件发生时执行代码。这些事件可以是Web应用程序启动、关闭,或者与HTTP会话相关的事件,如创建、销毁或...
Servlet监听器是Java Web开发中的一个重要概念,它允许开发者在特定事件发生时执行代码,比如在Web应用程序启动或停止时,或者在某个Servlet实例被创建或销毁时。本教程将深入探讨Servlet监听器的工作原理、类型以及...
在Java Web开发中,Servlet监听器(Servlet Listeners)是一种重要的组件,它们可以在特定的事件发生时被调用,比如Web应用的初始化、用户会话的创建或销毁等。在这个例子中,我们将探讨如何利用Servlet监听器在系统...
### Servlet监听器总结 #### 一、Listener概念与作用 - **定义**:在Java Web开发中,Listener(监听器)是一种特殊的组件,主要用于监听容器内的特定事件,并根据这些事件的发生执行相应的处理逻辑。 - **功能**...
在本文中,我们将深入探讨Java EE(J2EE)中的Servlet监听器以及它们在Web应用程序中的作用,特别是在访问人数统计和引入MVC模式方面。首先,让我们了解什么是Servlet监听器。 Servlet监听器是Java Servlet规范的一...
servlet过滤器和监听器,servlet过滤器和监听器课件,servlet过滤器和监听器PPT
Servlet监听器是Java Web开发中的一个重要概念,它属于Java Servlet规范的一部分,主要应用于JSP/Servlet环境。在Java Web应用程序中,监听器(Listeners)扮演着观察者(Observer)的角色,能够监听特定事件的发生...