文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Tomcat9中容器结构与生命周期的示例分析

2023-06-02 14:25

关注

这篇文章将为大家详细讲解有关Tomcat9中容器结构与生命周期的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

容器的生命周期

容器的结构

Tomcat9中容器结构与生命周期的示例分析
上图为Tomcat容器的类图结构,所有容器会继承LifecycleMBeanBase,而基类LifecycleMBeanBase实现了两个接口,Lifecycle和MBeanRegistration,其中Lifecycle描述的容器的主要行为以及生命周期的变化,而MBeanRegistration则为Tomcat通过JMX进行监控。

org.apache.catalina.Lifecycle
Tomcat9中容器结构与生命周期的示例分析
Lifecycle中主要的方法为init、start、stop、destory, Lifecycle包含12个状态,每个操作方法均对应状态的改变,构成了Tomcat容器的从初始创建到最终销毁的完整生命周期,Lifecycle的接口注释对此做出很好的解释。

下图为上一篇中Tomcat内部容器类结构图,可以看到各种类型的容器均实现了Lifecycle接口,各种类型容器按照机构进行聚合和组合,int()、start()等方法按照层级进行调用。
Tomcat9中容器结构与生命周期的示例分析

观察者模式

容器的状态发生变化时,Tomcat采用观察者模式,触发注册在容器上的监听,下面以LifecycleBase.init()方法为例进行说明。

org.apache.catalina.util.LifecycleBase

 @Override    public final synchronized void init() throws LifecycleException {        if (!state.equals(LifecycleState.NEW)) {            invalidTransition(Lifecycle.BEFORE_INIT_EVENT);        }        try {            setStateInternal(LifecycleState.INITIALIZING, null, false);            initInternal();            setStateInternal(LifecycleState.INITIALIZED, null, false);        } catch (Throwable t) {            handleSubClassException(t, "lifecycleBase.initFail", toString());        }    }//根据状态调用监听private synchronized void setStateInternal(LifecycleState state, Object data, boolean check)            throws LifecycleException {       ...省略其他代码...        this.state = state;        String lifecycleEvent = state.getLifecycleEvent();        if (lifecycleEvent != null) {            fireLifecycleEvent(lifecycleEvent, data);        }    } //调用监听protected void fireLifecycleEvent(String type, Object data) {        LifecycleEvent event = new LifecycleEvent(this, type, data);        for (LifecycleListener listener : lifecycleListeners) {            listener.lifecycleEvent(event);        }    }

Tomcat运行时序图

Tomcat9中容器结构与生命周期的示例分析

关于“Tomcat9中容器结构与生命周期的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯