[size=medium]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方法。
[color=blue]*对于观察者(监听器)模式的理解:
先注册监听器,然后在某个方法中(该方法中传入了event(如一个鼠标事件))执行listeners(从注册监听器的地方拿)的handleEvent(Event e)方法。
[/color]
[color=darkred]上面addLifecycleListener 为注册监听器, 而start()方法则是触发事件的地方。
这就是为什么Lifecycle接口要上面5个方法一起的原因。[/color]
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负责启动/关闭。[color=red]WebappLoader类还是先了java.lang.Runnable接口,这样就可以使用另一个线程来重复调用其类载入器的modified方法来检查是否有类被修改了。若modified方法返回true,WebappLoader实例会通知其container来重新载入类(注意,不是WebappLoader执行类的重载)。(此处的多线程实现值得研究)[/color]
调用WebappLoader类的start方法后要执行的重要任务包括:
(1)创建一个类载入器
(2)设置repository
(3)设置类路径
(4)设置访问权限
(5)为类的自动重载打开一个新线程
[color=darkblue]
下一个总结将是session管理[/color]
[/size]
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方法。
[color=blue]*对于观察者(监听器)模式的理解:
先注册监听器,然后在某个方法中(该方法中传入了event(如一个鼠标事件))执行listeners(从注册监听器的地方拿)的handleEvent(Event e)方法。
[/color]
[color=darkred]上面addLifecycleListener 为注册监听器, 而start()方法则是触发事件的地方。
这就是为什么Lifecycle接口要上面5个方法一起的原因。[/color]
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负责启动/关闭。[color=red]WebappLoader类还是先了java.lang.Runnable接口,这样就可以使用另一个线程来重复调用其类载入器的modified方法来检查是否有类被修改了。若modified方法返回true,WebappLoader实例会通知其container来重新载入类(注意,不是WebappLoader执行类的重载)。(此处的多线程实现值得研究)[/color]
调用WebappLoader类的start方法后要执行的重要任务包括:
(1)创建一个类载入器
(2)设置repository
(3)设置类路径
(4)设置访问权限
(5)为类的自动重载打开一个新线程
[color=darkblue]
下一个总结将是session管理[/color]
[/size]