首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

学习tomcat 初记(3)

2012-12-27 
学习tomcat 小记(3)1)Lifecyclepublic interface Lifecycle {public void addLifecycleListener(Lifecycle

学习tomcat 小记(3)
1)Lifecycle
public interface Lifecycle {
   public void addLifecycleListener(LifecycleListener listener);
   public LifecycleListener[] findLifecycleListeners();
   public void removeLifecycleListener(LifecycleListener listener);

   public void start() throws LifecycleException;
   public void stop() throws LifecycleException;
}

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

其中,当监听的事件发生时,触发lifecycleEvent方法。

*对于观察者(监听器)模式的理解:
先注册监听器,然后在某个方法中(该方法中传入了event(如一个鼠标事件))执行listeners(从注册监听器的地方拿)的handleEvent(Event e)方法。

上面addLifecycleListener 为注册监听器, 而start()方法则是触发事件的地方。
这就是为什么Lifecycle接口要上面5个方法一起的原因。


2)Logger
Logger是catalina中用于记录消息的组件。在catalina中,logger是与container相关联的,与其他组件相比,稍简单一些。在org.apache.catalina.logger包中,tomcat提供了不同类型的logger。

tomcat提供了三个logger,分别是FileLogger,SystemErrorLogger和SystemOutLogger。他们都位于org.apache.catalina.logger包下,均继承自org.apache.catalina.logger.LoggerBase类。在tomcat4中LoggerBase实现了org.apache.catalina.Logger接口,在tomcat5中,它还实现了Lifecycle和MBeanRegistration接口。


3)Loader接口
tomcat的loader指的是web应用loader,而不是类loader。
tomcat的loader组件通常使用getContainer方法和setContainer方法与某个context容器相关联。若是context中的某个类修改了之后,loader可以进行重载。

Reloader接口
为了支持类的自动重载功能,类载入器需要实现org.apache.catalina.loader.Reloader接口。该接口定义如下:
package org.apache.catalina.loader;
public interface Reloader {
   public void addRepository(String repository);
   public String[] findRepositories ();

   public boolean modified();
}

其中最重要的方法是modified方法,该方法返回web应用中类是否被修改了。


WebappLoader类
org.apache.catalina.loader.WebappLoader类实现了Loader接口,表示一个web应用中的loader,负责为web应用载入需要的类。WebappLoader会创建一个org.apache.catalina.loader.WebappClassLoader的实例作为其类载入器。像其他catalina组件一样,WebappLoader类要实现org.apache.catalina.Lifecycle接口,由其container负责启动/关闭。WebappLoader类还是先了java.lang.Runnable接口,这样就可以使用另一个线程来重复调用其类载入器的modified方法来检查是否有类被修改了。若modified方法返回true,WebappLoader实例会通知其container来重新载入类(注意,不是WebappLoader执行类的重载)。(此处的多线程实现值得研究)
调用WebappLoader类的start方法后要执行的重要任务包括:
(1)创建一个类载入器
(2)设置repository
(3)设置类路径
(4)设置访问权限
(5)为类的自动重载打开一个新线程



下一个总结将是session管理

热点排行