Tomcat源码阅读之Container与Pipeline的设计

本文深入探讨Tomcat的内部结构,重点分析Container作为其他组件容器的角色,以及Container如何通过Pipeline管理和调度Valve对象处理请求。ContainerBase的实现包括子Container管理、Listener处理,以及初始化和启动流程。Pipeline维护Valve链,每个Valve通过invoke方法处理请求。StandardPipeline则详细定义了Valve链的操作。
摘要由CSDN通过智能技术生成

还是继续看Tomcat的源码吧,前面分析过了在tomcat中比较重要的一个东西Connector部分。。。

先来看一张图:



可以将tomcat的结构大概这样描述吧:

(1)sever对象是service对象的容器,

(2)service对象是connector对象和container对象的容器,同一个service对象可以包含多个connector对象,但是只能包含一个container对象。。。

(3)container对象是属于自包含的,自己又可以包含多个子container对象,

(4)同时container对象包含一个pipeline对象,pipeline对象可以理解为是valve对象的容器。。。

这里先来贴一下container接口的实现吧:

//主要是定义了父子container的管理以及pipeline的管理
public interface Container extends Lifecycle {

	//一些基本的事件的定义
    public static final String ADD_CHILD_EVENT = "addChild";  //添加了child的事件

    public static final String ADD_VALVE_EVENT = "addValve";   //在pipeline上面添加了valve的事件

    public static final String REMOVE_CHILD_EVENT = "removeChild";   //移除child的事件

    public static final String REMOVE_VALVE_EVENT = "removeValve";   //移除valve的事件

    public Log getLogger();

    //用于在jmx上面注册的名字
    public ObjectName getObjectName();

    public String getDomain();

    public String getMBeanKeyProperties();

    //pipeline,用于管理关联的values
    public Pipeline getPipeline();

    //返回关联的cluster
    public Cluster getCluster();
    public void setCluster(Cluster cluster);

    //后台运行的延迟
    public int getBackgroundProcessorDelay();
void setBackgroundProcessorDelay(int delay);

    //当前container对象的名字
    public String getName();


    public void setName(String name);

    //返回父container
    public Container getParent();

    //设置父container
    public void setParent(Container container);

    //获取父classLoader,如果当前没有的话,如果有parent那么返回parent的,否则返回applicationclassloader
    public ClassLoader getParentClassLoader();

    public void setParentClassLoader(ClassLoader parent);

    //返回realm对象,如果当前container对象没有的话,那么返回parent的realm对象
    public Realm getRealm();

    public void setRealm(Realm realm);


    // --------------------------------------------------------- Public Methods

    // 在后台执行一些周期性的工作
    public void backgroundProcess();

    //添加child对象
    public void addChild(Container child);

    // 添加listener对象,用于响应当前container对象的事件
    public void addContainerListener(ContainerListener listener);

    //添加属性改变的listener
    public void addPropertyChangeListener(PropertyChangeListener listener);

    //根据名字返回子child
    public Container findChild(String name);

    //返回所有的child
    public Container[] findChildren();

    //返回所有的containerlistener对象
    public ContainerListener[] findContainerListeners();

    //移除一个child对象
    public void removeChild(Container child);

    //移除一个containerlistener对象
    publ
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值