您的位置:首页 > 运维架构 > Tomcat

Tomcat学习之Container

2016-07-25 08:44 525 查看
http://blog.csdn.net/aesop_wubo/article/details/7654895

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

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

[html] view
plain copy

print?

public Container getParent();

public void setParent(Container container);

public ClassLoader getParentClassLoader();

public void setParentClassLoader(ClassLoader parent);

public void addChild(Container child);

public void removeChild(Container child);

public Container findChild(String name);

public Container[] findChildren();

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

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

[html] view
plain copy

print?

public int getBackgroundProcessorDelay();

public void setBackgroundProcessorDelay(int delay);

public void backgroundProcess();

delay是一个整形值,用于表示当前容器调用backgroundProcess及其子容器调用backgroundProcess的时间间隔,backgroundProcess方法主要做了以下事:

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

(2)重新加载web应用

(3)清除已过期的session

(4)刷新缓冲区等

3、与组件有关的方法

[html] view
plain copy

print?

public Cluster getCluster();

public void setCluster(Cluster cluster);

public Pipeline getPipeline();

public Realm getRealm();

public void setRealm(Realm realm);

public DirContext getResources();

public void setResources(DirContext resources);

public Manager getManager();

public void setManager(Manager manager);

public Log getLogger();

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的!

类图如下:



每个容器的具体细节后续介绍......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java tomcat