- 浏览: 827026 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
renzhengzhi:
请教一下楼主,公有云和私有云的开发,具体要做哪些工作呢?我拿到 ...
4,云的4 种模式 -
SangBillLee:
我用了solr5.5,用SolrQuery查询,没法高亮,不知 ...
solr5.x快速入门 -
lw900925:
这翻译读起来真是别扭。
solr in action翻译-第一章1.1 -
springjpa_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
Spring MVC性能提升 -
h416373073:
正遇到了此问题不知如何解决, 多谢分享
solr错误
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)的数组会被创建并将所有的元素存储到其中。
发表评论
-
21,tomcat关闭钩子
2012-11-22 20:35 6594在很多环境下,在关闭应用程序的时候需要做一些清理工作。问题在于 ... -
20,tomcat的XML解析---digester
2012-11-22 20:07 1518tomcat使用server.xml配置属性信息Tomcat使 ... -
19tomcat的服务器和服务
2012-11-20 20:10 1045Server服务器 Server接口表示整个Catalina ... -
18,tomcat的主机(host)和引擎
2012-11-16 09:13 2316如果需要在一个Tomcat部署中部署多个上下文,需要使用一个主 ... -
附,listener、 filter、servlet 加载顺序及其详解
2012-11-15 09:10 963一、 1、启动一个WEB项 ... -
17,tomcat中StandardContext
2012-11-15 08:59 4999一个上下文容器(Context)代表一个web应用,每一个上下 ... -
16,tomcat中StandardWrapper实现
2012-11-14 18:28 3835Wrapper接口在Catalina中的标准实现Standar ... -
15,tomcat安全
2012-11-14 09:02 1172有些web应用程序的内容是有限制的,只允许有权限的用户在提供正 ... -
14,tomcat session管理
2012-11-14 09:01 1073Catalina通过一个叫管理器的组建来完成Session的管 ... -
13.tomcat加载器
2012-11-13 13:21 1355库(repository)和源(res ... -
12,tomcat日志处理
2012-11-13 13:15 1223日志系统是一个记录信息的组件。在Catalina中,日志系统是 ... -
附:JAVA事件处理--观察者模式
2012-11-12 10:33 958简单地说,观察者模式 ... -
10.容器
2012-11-12 10:12 1327容器是一个处理用户servlet请求并返回对象给we ... -
9.Tomcat的默认连接器
2012-11-12 08:52 1147Tomcat连接器是一个可以插入servlet容器的独立模块, ... -
8.连接器
2012-11-12 08:46 902一个可以创建更好的请 ... -
7,Facade外观模式
2012-11-08 11:28 924外观模式:为子系统中的一组接口提供了一个一致的界面,此模式定义 ... -
6,一个简单的servlet容器
2012-11-08 11:10 825总的来说,一个全功能的servlet容器会为servlet的每 ... -
5.javax.servlet.Servlet接口
2012-11-08 09:18 922javax.servlet.Servlet接口Servlet编 ... -
4,一个简单的tomcat
2012-11-07 18:10 873流程图如下 -
3.ServerSocket 与 Socket的区别
2012-11-07 16:56 11001.1 ServerSocket类创建 ...
相关推荐
NULL 博文链接:https://yjhexy.iteye.com/blog/669427
在9.x系列的剩余生命周期内完全改变了: - 没有 可以添加以下类的公共接口以便 解决错误和/或添加新功能。没有现有的接口方法 已删除或更改,但可能已弃用。 - 没有 注意:随着Tomcat 9的成熟,以上列表将被添加到...
11、"=="和 equals 方法究竟有什么区别? ................................................................. 12 12、静态变量和实例变量的区别? ...............................................................
组件的生命周期方法由容器自动调用。 如何基于tomcat编写服务端动态应用? 基于tomcat编写JSP: JSP (Java Server Page) Java服务端页面生成技术 JSP的本质是一个Servlet类。 如何编写一个JSP? 1>创建...
Tomcat源码研究.pdf。Catalina脚本解析,Tomcat启动遇到的常见问题,架构探讨,JMX在tomcat中的应用,容器初探,生命周期
组件的生命周期管理 用Lifecycle管理启动、停止、关闭 Lifecycle接口预览 几个核心方法 Server中的init方法示例 为啥StandardServer没有init方法 LifecycleBase中的init与initInternal方法 为什么这么设计...
Servlet生命周期就是servlet从创建到销毁的过程,包括加载和实例化,初始化,服务,和销毁4步。 当客户第一次请求时,首先判断是否存在servlet对象,第一次请求时不存在,则由tomcat创建对象,调用init()方法对...
web项目:第一个Servlet程序 Servlet的生命周期:init--service--destroy、执行流程:构造器--init方法--循环[ service方法 ]--destory方法(正常关闭Tomcat)、启动tomcat测试
第6章 生命周期 第7章 日志记录器 第8章 载入器 第9章 session管理 第10章 安全性 第11章 standardwrapper 第12章 standardcontext类 第13章 host和engine 第14章 服务器组件和服务组件 第15章 digester库...
Tomcat 6.x的用户应该计划在Tomcat 6.x到达生命周期之前进行升级。 Apache Tomcat 5.x 的Apache Tomcat 5.x的是可以从档案下载。 的Apache Tomcat 5.5.X支持相同的Servlet和JSP规范版本的的Apache Tomcat 5.0.x中...
执行原理加图解 1.当服务器接受到服务器请求的时候,会先解析浏览器的UPL地址,获取访问服务的路径 2.然后查找WEB.xml文件,查看是否有对应的标签体...4.tomcat会将字节码文件加载进内存,并且创建其对象 5.调用其方法
使用JAVA语言写的项目管理软件,可以跟踪任务和bug的进度,实现对任务和bug全生命周期管理。 这个项目是很早之前开发的(大约在2008年前后),所以使用的技术是传统的JSP/Servlet+JDBC方式。虽然技术比较老了,但是...
2.3 servlet的生命周期..................................................................6 1、Servlet的生命周期分为四个阶段 ............................................6 2、在web.xml文件中配置Servlet...
servlet容器与servlet之间的接口是由java servlet api定义的,在此api中定义了servlet的各种方法,这些方法在servlet生命周期的不容阶段被servlet容器调用,servlet api还定义了servlet容器传递给servlet的对象类,...
详细的介绍了tomcat的组成结构、生命周期管理以及管道机制。