`
侯上校
  • 浏览: 223415 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

tomcat各组件生命周期控制

 
阅读更多
了解tomcat的同学们都知道,apache搞的模块化开发,如tomcat就定义了一大堆的组件, 各个组件负责的责任不同,但是我们的这些组件的生命周期是怎么进行控制的呢,接下来就分析一下如果实现此功能(GOF的观察者模式)的,好了,不费话了,
第一:tomcat定义了一个生命周期的接口
Lifecycle.java接口中定义了几个方法

public void start() throws LifecycleException;
public void stop() throws LifecycleException;
//以上二个方法主要是在组件启动或者停止的时候被调用,
    public void addLifecycleListener(LifecycleListener listener);
    public LifecycleListener[] findLifecycleListeners();
    public void removeLifecycleListener(LifecycleListener listener);
//以上二个方法主要是观察者的注册、移除、事件变更通知
第二:每个组件都实现了此接口并且实现了这些方法
   如:Server组件、Service组件、Connector组件、各个Container容器等
第三:使用LifecycleSupport.java类来进行注册组件变更事件的观察者管理
此类的实例在每一个组件中都保持它的一个实例
 private LifecycleSupport lifecycle = new LifecycleSupport(this);
每有注册、移除、事件变更通知时使用此属性调用来管理
在此类中定义了一个private LifecycleListener listeners[] = new LifecycleListener[0];数组在对观察都进行管理的
eg:当某个观察者想注册Server组件的话,调用过程如下:
StandardServer.java类中
public void addLifecycleListener(LifecycleListener listener) {

        lifecycle.addLifecycleListener(listener);

    }
LifecycleSupport.java类中的处理如下:
public void addLifecycleListener(LifecycleListener listener) {

      synchronized (listenersLock) {
          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;
      }

    }
//以此类推,移除某个观察者也是这样的,下来看一看组件事件变更通知吧,
public void start() throws LifecycleException {

        // Validate and update our current component state
        if (started) {
            log.debug(sm.getString("standardServer.start.started"));
            return;
        }

        // Notify our interested LifecycleListeners
        lifecycle.fireLifecycleEvent(BEFORE_START_EVENT, null);

        [b]lifecycle.fireLifecycleEvent(START_EVENT, null);[/b]//启动事件变更通知
在LifecycleSupport.java中处理变更事件如下:
public void fireLifecycleEvent(String type, Object data) {

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

    }
///还有如stop事件等
public void stop() throws LifecycleException {

        // Validate and update our current component state
        if (!started)
            return;

        // Notify our interested LifecycleListeners
        lifecycle.fireLifecycleEvent(BEFORE_STOP_EVENT, null);

        lifecycle.fireLifecycleEvent(STOP_EVENT, null);
  public void fireLifecycleEvent(String type, Object data) {

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

    }
注意对组件进行了一个封闭成一个事件进行后续的处理,
public void fireLifecycleEvent(String type, Object data) {

        [b]LifecycleEvent event = new LifecycleEvent(lifecycle, type, data);[/b]//这里的继承关系可以查看一下源码
        LifecycleListener interested[] = listeners;
        for (int i = 0; i < interested.length; i++)
            interested[i].lifecycleEvent(event);

    }

看看这东东,对开闭原则守的,软件重用非常的好,观察者到此结束……

分享到:
评论

相关推荐

    Tomcat中用web.xml控制Web应用详解

    Tomcat 中 web.xml 文件是 Web 应用的核心配置文件,负责管理 Web 应用的生命周期、Servlet 的加载顺序、Filter 的配置等。下面对 web.xml 文件中的重要元素进行详细解释。 context-param 元素 context-param 元素...

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

    标题 "Tomcat 生命周期与事件管理——LifeCycle & Event" 涉及到的是Apache Tomcat服务器的核心运行机制。Tomcat是Java Servlet和JavaServer Pages(JSP)技术的开源Web应用服务器,它遵循Java EE规范,是开发和部署...

    tomcat 架构 分析

    Lifecycle接口由StandardService类实现,StandardService类不仅实现了Service接口,还实现了Lifecycle接口,从而拥有了对子组件生命周期的控制能力。 五、设计模式的使用 Tomcat的架构设计中使用了多个设计模式,...

    Tomcat系统架构分析

    Tomcat的生命周期是由Server组件控制的,Server相当于整个Tomcat的“家”,它负责管理和协调整个Tomcat环境。Server包含了至少一个Service,即在Tomcat启动时至少会有一个Service对外提供服务。Server组件负责整个...

    Tomcat 接口文档 API

    开发者可以通过实现这些接口,监控和干预Tomcat组件的生命周期。 7. **Pipeline and Valve**: Tomcat的Pipeline和Valve机制提供了请求处理的链式结构。Valve是处理请求的基本单元,Pipeline则负责串联Valve。通过...

    tomcat架构的源码分析

    - 默认实现类`StandardService`同时实现了`Service`接口和`Lifecycle`接口,以控制组件的生命周期。 - 关键方法`setContainer`和`addConnector`用于设置`Container`和添加`Connector`组件。 - `setContainer`方法...

    tomcat6的源码

    3. **生命周期管理**:每个Tomcat组件都有自己的生命周期,包括初始化、启动、停止和销毁。源码中,这些生命周期方法的实现有助于理解Tomcat的内部工作流程。 4. **部署与加载**:Tomcat可以自动或手动部署Web应用...

    Tomcat深入剖析pdf+源码(Tomcat运行原理)

    3. **Servlet生命周期**:Servlet在Tomcat中的生命周期包括加载、初始化、服务、销毁四个阶段。Tomcat通过Servlet容器管理Servlet实例,确保其正确地创建、初始化和销毁。 4. **请求处理**:当一个HTTP请求到达时,...

    tomcat工作原理-组件

    它遵循Servlet规范,通过容器来管理Servlet生命周期。容器分为两个层次:Engine(引擎)、Host(主机)和Context(上下文)。Engine负责处理所有请求,Host处理特定域名的请求,而Context对应一个Web应用。 2. **...

    Tomcat源码研究.pdf

    生命周期方法通常包括init(), start(), stop(), destroy()等,通过这些方法,可以对组件进行精确的控制。 通过对Tomcat源码的研究,我们可以更深入地了解Web服务器的工作原理,掌握其架构设计以及如何进行故障排查...

    Tomcat系统架构与设计模式[整理].pdf

    Tomcat 中的 Lifecycle 模式主要用于控制组件的生命周期。Lifecycle 模式可以使得组件的生命周期更加可控和灵活。 三、Tomcat 的总体结构 Tomcat 的总体结构图可以看出,Tomcat 的核心组件是 Connector 和 ...

    Tomcat_系统架构与模式设计分析.doc

    在整体架构中,Server是最高级别的组件,负责管理整个Tomcat实例的生命周期。Service是连接Connector和Container的桥梁,它可以拥有多个Connector,但仅对应一个Container。Connector,如同Tomcat的“门面”,负责与...

    tomcat5.5源代码

    在`org.apache.catalina.util.LifecycleBase`类中,可以看到Tomcat组件的生命周期管理,包括初始化、启动、停止和销毁等状态的转换。这对于理解如何在Tomcat中管理和控制自定义组件的生命周期至关重要。 4. **连接...

    Tomcat架构解析文档.zip

    - 对所有Tomcat组件提供生命周期管理,包括初始化、启动、停止和销毁等阶段。 6. **Pipeline和Valve组件** - **Pipeline** 类似于管道,Valve则相当于管道中的阀门,每个Valve执行特定的任务。请求和响应在...

    解读servlet生命周期

    Servlet生命周期是Java Web开发中一个关键的概念,它描述了Servlet从创建到销毁的整个过程,这个过程由Servlet容器(如Tomcat)进行管理。Servlet生命周期主要分为三个阶段:初始化阶段、运行阶段和销毁阶段。 1. ...

    tomcat8源码

    Tomcat中的组件都遵循生命周期接口,包括初始化、启动、停止和销毁四个阶段。这些接口使得开发者可以在各个阶段添加自定义逻辑。 4. **类加载机制** Tomcat使用自定义的类加载器来加载Web应用中的类,以实现不同...

    tomcat6.0.35_tomcat_

    1. **Catalina**:这是Tomcat的核心组件,负责Servlet容器的主要功能,管理Servlet的生命周期,并处理HTTP请求。 2. **Jasper**:Tomcat中的Jasper模块用于编译和执行JSP页面,将JSP转换为Java Servlet并在运行时...

    tomcat架构

    3. 生命周期管理器(Lifecycle):生命周期管理器是Tomcat中的一个接口,它定义了组件生命周期的管理方法,如初始化、启动、停止和销毁等。所有Tomcat组件都遵循这一生命周期,使得整个服务器可以在启动时初始化所有...

    tomcat源码+文档pdf+源码解析

    1. **Catalina**:这是Tomcat的核心组件,负责Servlet容器的主要功能,如容器管理、生命周期管理和请求处理。Catalina包含Context、Host和Engine等层次结构,它们分别对应于Web应用、虚拟主机和整个服务器。 2. **...

    Tomcat-9.0-API

    8. **生命周期监听器(Lifecycle Listeners)**:监听器可以在Tomcat组件的生命周期事件(如启动、停止)发生时执行特定操作。API文档中的`org.apache.catalina.LifecycleListener`接口及其实现类,如`org.apache....

Global site tag (gtag.js) - Google Analytics