> Linux服务器 > Tomcat >

Tomcat学习之Container

容器主要负责处理来自客户端的请求,并把响应结果返回给客户端。前面提到一个Service是由一个容器和多个连接器组成的,接口org.apache.catalina.Container是对容器的抽象,来看看这个接口中都有哪些方法?

1、与容器层次结构有关的方法

 

[html] view plaincopyprint?
 
  1. public Container getParent();  
  2. public void setParent(Container container);  
  3. public ClassLoader getParentClassLoader();  
  4. public void setParentClassLoader(ClassLoader parent);  
  5. public void addChild(Container child);  
  6. public void removeChild(Container child);  
  7. public Container findChild(String name);  
  8. public Container[] findChildren();  

可以为一个容器添加子容器,可以查找容器等。其中setParent和addChild方法要注意一点,如果两个容器不允许有父子关系,会抛出异常。

2、与后台处理有关的方法

 

[html] view plaincopyprint?
  1. public int getBackgroundProcessorDelay();  
  2. public void setBackgroundProcessorDelay(int delay);  
  3. public void backgroundProcess();  
delay是一个整形值,用于表示当前容器调用backgroundProcess及其子容器调用backgroundProcess的时间间隔,backgroundProcess方法主要做了以下事:

 

(1)检查WAR包有没有变化

(2)重新加载web应用

(3)清除已过期的session

(4)刷新缓冲区等

3、与组件有关的方法

 

[html] view plaincopyprint?
 
  1. public Cluster getCluster();  
  2. public void setCluster(Cluster cluster);  
  3. public Pipeline getPipeline();  
  4. public Realm getRealm();  
  5. public void setRealm(Realm realm);  
  6. public DirContext getResources();  
  7. public void setResources(DirContext resources);  
  8. public Manager getManager();  
  9. public void setManager(Manager manager);  
  10. public Log getLogger();  
  11. public AccessLog getAccessLog();  
容器可以选择性地添加一些组件,比如:日志、安全检查、集群、session管理等!

ContainerBase是Container抽象类实现,如果要继承ContainerBase需要实现getObjectNameKeyProperties方法,这个方法返回一个代表该容器的字符串,在注册容器的时候会用到。

Tomcat一共有四种类型的容器:

Engine:代表完整的Servlet引擎,是最顶层的容器,在这个容器上调用setParent会抛出异常。一个Engine由多个Host容器组成。

Host:代表一个虚拟主机,可以运行多个应用,它负责安装和展开这些应用,其子容器为Context。

Context:代表ServletContext,管理多个Servlet,理论上只要有Context就可以运行Servlet了,其子容器为Wrapper。

Wrapper:代表一个Servlet,是最底部的容器,它没有子容器。它负责管理一个Servlet,包含Servlet的装载、初始化、执行和卸载等。只有Wrapper也是可以运行Servlet的!

类图如下:

每个容器的具体细节后续介绍......

 
(责任编辑:IT)