`
韩悠悠
  • 浏览: 839767 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

11.tomcat生命周期

 
阅读更多

 Catalina由多个组件组成,当Catalina启动的时候,这些组件也会启动。当Catalina停止的时候,这些组件也必须有机会被清除。
例如,当一个容器停止工作的时候,它必须唤醒所有加载的servlet的destroy方法,而session管理器要保存session到二级存储器中。
保持组件启动和停止一致的的机制通过实现org.apache.catalina.Lifecycle接口来实现。
一个实现了Lifecycle接口的组件同是会触发一个或多个下列事件:BEFORE_START_EVENT, START_EVENT, AFTER_START_EVENT, BEFORE_STOP_EVENT, STOP_EVENT, and AFTER_STOP_EVENT。
当组件被启动的时候前三个事件会被触发,而组件停止的时候会触发后边三个事件。另外,如果一个组件可以触发事件,那么必须存在相应的监听器来对触发的事件作出回应。
监听器使用org.apache.catalina.LifecycleListener来表示。

 

 

Lifecycle接口

 

public interface Lifecycle { 
	public static final String START_EVENT = "start"; 
	public static final String BEFORE_START_EVENT = "before_start"; 
	public static final String AFTER_START_EVENT = "after_start"; 
	public static final String STOP_EVENT = "stop"; 
	public static final String BEFORE_STOP_EVENT = "before_stop"; 
	public static final String AFTER_STOP_EVENT = "after_stop"; 
	public void addLifecycleListener(LifecycleListener listener); 
	public LifecycleListener[] findLifecycleListeners();
	public void removeLifecycleListener(LifecycleListener listener); 
	public void start() throws LifecycleException;
	public void stop() throws LifecycleException; 
}

 

LifecycleEvent类
LifecycleEvent表示一个生命周期事件

 

public final class LifecycleEvent extends EventObject {
	public LifecycleEvent(Lifecycle lifecycle, String type) { 
		this(lifecycle, type, null); 
	}
	public LifecycleEvent(Lifecycle lifecycle, String type, Object data) {
		super(lifecycle); 
		this.lifecycle = lifecycle; 
		this.type = type;
		this.data = data; 
	}
	
	private Object data = null;
	 private Lifecycle lifecycle = null; 
	rivate String type = null;

	public Object getData() { return (this.data); } 
	public Lifecycle getLifecycle() { return (this.lifecycle); } 
	public String getType() { return (this.type); }
}

 

LifecycleListener接口
LifecycleListener接口可以表示生命周期监听器

 

public interface LifecycleListener { 
	public void lifecycleEvent(LifecycleEvent event);
 }

 

LifecycleSupport类
Catalina提供了一个公用类org.apache.catalina.util.LifecycleSupport来简化组件处理监听器和触发生命周期事件

public final class LifecycleSupport {


    // ----------------------------------------------------------- Constructors


    /**
     * Construct a new LifecycleSupport object associated with the specified
     * Lifecycle component.
     *
     * @param lifecycle The Lifecycle component that will be the source
     *  of events that we fire
     */
    public LifecycleSupport(Lifecycle lifecycle) {

        super();
        this.lifecycle = lifecycle;

    }


    // ----------------------------------------------------- Instance Variables


    /**
     * The source component for lifecycle events that we will fire.
     */
    private Lifecycle lifecycle = null;


    /**
     * The set of registered LifecycleListeners for event notifications.
     */
    private LifecycleListener listeners[] = new LifecycleListener[0];


    // --------------------------------------------------------- Public Methods


    /**
     * Add a lifecycle event listener to this component.
     *
     * @param listener The listener to add
     */
    public void addLifecycleListener(LifecycleListener listener) {

      synchronized (listeners) {
          LifecycleListener results[] =
            new LifecycleListener[listeners.length + 1];
          for (int i = 0; i < listeners.length; i++)
              results[i] = listeners[i];
          results[listeners.length] = listener;
          listeners = results;
      }

    }


    /**
     * Get the lifecycle listeners associated with this lifecycle. If this 
     * Lifecycle has no listeners registered, a zero-length array is returned.
     */
    public LifecycleListener[] findLifecycleListeners() {

        return listeners;

    }


    /**
     * Notify all lifecycle event listeners that a particular event has
     * occurred for this Container.  The default implementation performs
     * this notification synchronously using the calling thread.
     *
     * @param type Event type
     * @param data Event data
     */
    public void fireLifecycleEvent(String type, Object data) {

        LifecycleEvent event = new LifecycleEvent(lifecycle, type, data);
        LifecycleListener interested[] = null;
        synchronized (listeners) {
            interested = (LifecycleListener[]) listeners.clone();
        }
        for (int i = 0; i < interested.length; i++)
            interested[i].lifecycleEvent(event);

    }


    /**
     * Remove a lifecycle event listener from this component.
     *
     * @param listener The listener to remove
     */
    public void removeLifecycleListener(LifecycleListener listener) {

        synchronized (listeners) {
            int n = -1;
            for (int i = 0; i < listeners.length; i++) {
                if (listeners[i] == listener) {
                    n = i;
                    break;
                }
            }
            if (n < 0)
                return;
            LifecycleListener results[] =
              new LifecycleListener[listeners.length - 1];
            int j = 0;
            for (int i = 0; i < listeners.length; i++) {
                if (i != n)
                    results[j++] = listeners[i];
            }
            listeners = results;
        }

    }


}

 

LifecycleSupport类存储所有的生命周期监听器到一个数组中,该数组为listenens,它初始化的时候没有任何成员。
private LifecycleListener listeners[] = new LifecycleListener[0];
当一个监听器通过addLifecycleListener方法被添加的时候,一个新的数组(长度比旧数组大1)会被创建。
然后就数组中的元素会被拷贝到新数组中并把新事件添加到数组中。
当一个事件被删除的时候,一个新的数组(长度为旧数组-1)的数组会被创建并将所有的元素存储到其中。

 

分享到:
评论

相关推荐

    com.sysdeo.eclipse.tomcat_3.3.0.rar

    每个插件都有自己的生命周期和API,与其他插件协作以提供特定服务。 5. **Tomcat 插件功能**:集成插件通常包括如下特性: - **服务器视图**:在Eclipse的工作台中展示Tomcat服务器的结构,便于浏览和管理Web应用...

    tomcat 生命周期,和事件管理—— lifeCycle & event

    在描述中提到的InstanceSupport.edx文件可能是一个教学资源,可能包含了关于Tomcat生命周期和事件管理的详细讲解和实例。通常,这种类型的文件可能是教育平台如EdX上的课程资料,用于辅助学习者理解相关概念。 了解...

    孙卫琴.Tomcat与Java.Web开发技术详解pdf+源码

    接着,深入探讨Servlet的生命周期、请求处理机制,以及如何在Tomcat中部署和运行Servlet。对于JSP,书籍会介绍其语法、EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library),这些都是JSP开发...

    Packtpub.Apache.Tomcat.7.Essentials.Mar.2012.rar

    包括Servlet生命周期、请求响应处理、会话管理等。 6. **Web应用程序部署**:讨论WAR文件的创建和部署,以及如何通过修改context.xml配置文件来定制部署。 7. **安全配置**:涵盖如何设置用户访问权限,实现基于...

    java.Tomcat.zip插件解压可用

    开发者可以通过这些脚本来管理Tomcat服务器的生命周期。 2. **conf目录**:这是Tomcat的配置文件存储的地方,其中`server.xml`是最重要的配置文件,定义了服务器的全局设置,包括端口号、连接器、Context等。其他如...

    study.tomcat.zip

    Tomcat的核心组件之一是`catalina.jar`,它是Tomcat服务器的主要运行时库,包含了处理HTTP请求、容器管理和Servlet生命周期管理等核心功能。当项目中出现与Tomcat相关的错误时,`catalina.jar`可能是排查问题的关键...

    孙卫琴.Tomcat与Java.Web开发技术详解

    此外,还详细介绍了Tomcat的目录结构,如WEB-INF目录下的web.xml文件,这是配置Web应用的关键,书中会讲解如何配置Servlet、过滤器和监听器,以及它们在Web应用生命周期中的作用。 Java Web开发中,JSP和Servlet是...

    37.Tomcat&Servlet.zip

    Servlet生命周期包括加载、初始化、服务、销毁四个阶段,开发者可以自定义这些阶段的行为。 **三、Tomcat与Servlet的结合** 当用户向Tomcat服务器发送请求时,Tomcat会根据web.xml配置文件找到对应的Servlet,并...

    优化提高tomcat性能.Tomcat参数调优

    - `-XX:NewRatio`: 控制年轻代和老年代的比例,对于Tomcat这样的短生命周期对象较多的应用,通常年轻代应较大。 - `-XX:SurvivorRatio`: 年轻代中Eden区和两个Survivor区的比例,可以适当调整以优化垃圾回收。 3....

    Tomcat与java web 开发技术详解-孙卫琴-第二版

    3. **Servlet编程**:作者深入浅出地解释了Servlet生命周期,包括初始化、服务、销毁等阶段,以及如何编写Servlet类和重写其方法来处理请求和响应。同时,讲解了Servlet的多线程问题和session管理。 4. **JSP技术**...

    apache-tomcat-8.5.53.tar.gz(tomcat安装包).zip

    在Tomcat中,Servlet和JSP的生命周期由容器(如Tomcat)管理。Servlet实例化、初始化、服务、销毁等阶段都由容器控制。JSP在首次请求时会被编译成对应的Servlet,然后按照Servlet的生命周期执行。 总结起来,...

    tomcat-jdbc.jar+tomcat-juli.jar

    它提供了许多高级特性,如连接验证、空闲检测、公平锁、生命周期回调等。通过使用这个连接池,开发者可以有效地管理数据库连接,避免资源浪费,提高应用性能。例如,它支持预热连接,即在应用启动时初始化一定数量的...

    apache-tomcat-9.0.55

    这可能包括日志记录、部署流程、生命周期管理等方面的改进。 6. **API更新**:Tomcat 9.0.55可能包含对现有API的扩展或修改,以更好地支持现代Web应用程序的开发和集成。 7. **文档更新**:官方文档也会得到相应的...

    ServletaJSP_Tomcat_Api.rar_tomcat API_tomcat a_tomcat lang api_t

    例如,Tomcat提供了`org.apache.catalina`包,其中包含了容器管理、会话管理、部署和生命周期管理等核心组件。此外,还有`org.apache.coyote`包,用于处理请求/响应协议,如HTTP/1.1。 3. **Tomcat AJP API**: AJP...

    apache-tomcat-7.0.100

    10. **扩展性**:Tomcat支持通过添加Valve组件来扩展其核心功能,Valve是处理请求的组件,可以在请求生命周期的不同阶段介入。此外,还可以通过JMX(Java Management Extensions)来管理和监控Tomcat实例。 总结来...

    最新版linux apache-tomcat-9.0.54.tar.gz

    对于开发人员来说,理解Tomcat的工作原理,如Servlet生命周期、JSP转换过程以及如何配置连接池、线程池等高级特性至关重要。同时,掌握如何优化Tomcat性能,如调整内存设置、开启压缩、减少重定向等也是提升应用效率...

    tomcat-8.5.57-src.zip

    通过查看源代码,开发者可以深入学习Tomcat的生命周期管理、请求处理流程、连接器(Connector)和容器(Container)架构等核心概念。 3. **构建过程**:解压后,开发者可以使用Apache Maven或Ant工具来编译和构建...

    Tomcat-8.5.60

    5. **JSP与Servlet**:Tomcat支持JSP和Servlet的生命周期,JSP会被编译成Servlet,然后由Tomcat执行。开发者可以利用JSP的声明式编程(HTML嵌入Java代码)和脚本元素,或者使用Servlet的更控制流的编程模型。 6. **...

    apache-tomcat-9.0.52-linux.zip

    Tomcat作为Servlet容器,负责加载、实例化Servlet,并管理其生命周期。 2. **JSP (JavaServer Pages)**:JSP是一种动态网页技术,允许开发者在HTML中嵌入Java代码,以简化Web应用的开发。Tomcat可以解析JSP文件并...

Global site tag (gtag.js) - Google Analytics