了解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 应用的核心配置文件,负责管理 Web 应用的生命周期、Servlet 的加载顺序、Filter 的配置等。下面对 web.xml 文件中的重要元素进行详细解释。 context-param 元素 context-param 元素...
标题 "Tomcat 生命周期与事件管理——LifeCycle & Event" 涉及到的是Apache Tomcat服务器的核心运行机制。Tomcat是Java Servlet和JavaServer Pages(JSP)技术的开源Web应用服务器,它遵循Java EE规范,是开发和部署...
Lifecycle接口由StandardService类实现,StandardService类不仅实现了Service接口,还实现了Lifecycle接口,从而拥有了对子组件生命周期的控制能力。 五、设计模式的使用 Tomcat的架构设计中使用了多个设计模式,...
Tomcat的生命周期是由Server组件控制的,Server相当于整个Tomcat的“家”,它负责管理和协调整个Tomcat环境。Server包含了至少一个Service,即在Tomcat启动时至少会有一个Service对外提供服务。Server组件负责整个...
开发者可以通过实现这些接口,监控和干预Tomcat组件的生命周期。 7. **Pipeline and Valve**: Tomcat的Pipeline和Valve机制提供了请求处理的链式结构。Valve是处理请求的基本单元,Pipeline则负责串联Valve。通过...
- 默认实现类`StandardService`同时实现了`Service`接口和`Lifecycle`接口,以控制组件的生命周期。 - 关键方法`setContainer`和`addConnector`用于设置`Container`和添加`Connector`组件。 - `setContainer`方法...
3. **生命周期管理**:每个Tomcat组件都有自己的生命周期,包括初始化、启动、停止和销毁。源码中,这些生命周期方法的实现有助于理解Tomcat的内部工作流程。 4. **部署与加载**:Tomcat可以自动或手动部署Web应用...
3. **Servlet生命周期**:Servlet在Tomcat中的生命周期包括加载、初始化、服务、销毁四个阶段。Tomcat通过Servlet容器管理Servlet实例,确保其正确地创建、初始化和销毁。 4. **请求处理**:当一个HTTP请求到达时,...
它遵循Servlet规范,通过容器来管理Servlet生命周期。容器分为两个层次:Engine(引擎)、Host(主机)和Context(上下文)。Engine负责处理所有请求,Host处理特定域名的请求,而Context对应一个Web应用。 2. **...
生命周期方法通常包括init(), start(), stop(), destroy()等,通过这些方法,可以对组件进行精确的控制。 通过对Tomcat源码的研究,我们可以更深入地了解Web服务器的工作原理,掌握其架构设计以及如何进行故障排查...
Tomcat 中的 Lifecycle 模式主要用于控制组件的生命周期。Lifecycle 模式可以使得组件的生命周期更加可控和灵活。 三、Tomcat 的总体结构 Tomcat 的总体结构图可以看出,Tomcat 的核心组件是 Connector 和 ...
在整体架构中,Server是最高级别的组件,负责管理整个Tomcat实例的生命周期。Service是连接Connector和Container的桥梁,它可以拥有多个Connector,但仅对应一个Container。Connector,如同Tomcat的“门面”,负责与...
在`org.apache.catalina.util.LifecycleBase`类中,可以看到Tomcat组件的生命周期管理,包括初始化、启动、停止和销毁等状态的转换。这对于理解如何在Tomcat中管理和控制自定义组件的生命周期至关重要。 4. **连接...
- 对所有Tomcat组件提供生命周期管理,包括初始化、启动、停止和销毁等阶段。 6. **Pipeline和Valve组件** - **Pipeline** 类似于管道,Valve则相当于管道中的阀门,每个Valve执行特定的任务。请求和响应在...
Servlet生命周期是Java Web开发中一个关键的概念,它描述了Servlet从创建到销毁的整个过程,这个过程由Servlet容器(如Tomcat)进行管理。Servlet生命周期主要分为三个阶段:初始化阶段、运行阶段和销毁阶段。 1. ...
Tomcat中的组件都遵循生命周期接口,包括初始化、启动、停止和销毁四个阶段。这些接口使得开发者可以在各个阶段添加自定义逻辑。 4. **类加载机制** Tomcat使用自定义的类加载器来加载Web应用中的类,以实现不同...
1. **Catalina**:这是Tomcat的核心组件,负责Servlet容器的主要功能,管理Servlet的生命周期,并处理HTTP请求。 2. **Jasper**:Tomcat中的Jasper模块用于编译和执行JSP页面,将JSP转换为Java Servlet并在运行时...
3. 生命周期管理器(Lifecycle):生命周期管理器是Tomcat中的一个接口,它定义了组件生命周期的管理方法,如初始化、启动、停止和销毁等。所有Tomcat组件都遵循这一生命周期,使得整个服务器可以在启动时初始化所有...
1. **Catalina**:这是Tomcat的核心组件,负责Servlet容器的主要功能,如容器管理、生命周期管理和请求处理。Catalina包含Context、Host和Engine等层次结构,它们分别对应于Web应用、虚拟主机和整个服务器。 2. **...
8. **生命周期监听器(Lifecycle Listeners)**:监听器可以在Tomcat组件的生命周期事件(如启动、停止)发生时执行特定操作。API文档中的`org.apache.catalina.LifecycleListener`接口及其实现类,如`org.apache....