Tomcat源码分析 -- 5

作者: sschrodinger | 来源:发表于2019-03-07 14:55 被阅读0次

    Tomcat源码分析 -- 5

    sschrodinger

    2018/01/01


    参考


    • 《深入剖析 Tomcat》 - 基于Tomcat 4.x
    • 《Tomcat 架构解析》刘光瑞 著
    • 《大话设计模式》程杰 著
    • Tomcat 8.5.x 源码

    server组件


    Server 组件是 Catalina 直接持有的对象。通过 org.apache.catalina.startup.Catalina 类的 createStartDigester() 创建并持有,具体语句如下:

    digester.addObjectCreate("Server",
                                     "org.apache.catalina.core.StandardServer",
                                     "className");
    digester.addSetProperties("Server");
    digester.addSetNext("Server",
                                "setServer",
                                "org.apache.catalina.Server");
    

    server 组件的默认实现org.apache.catalina.core.StandardServer继承 org.apache.catalina.util.LifecycleMBeanBase 并实现了 org.apache.catalina.Server 接口,主要功能是持有多个 service 组件和全局名命服务组件。

    同时,我们可以看到在 Catalina 类的 start() 方法中,有 await() 代码片段。该片段调用 Catalina 类持有的 server 组件的 await() 方法,等待 server 的结束, 所以,Server 组件的实现也保证了 server 可以控制整个 服务器的生命周期。


    service 组件


    service 组件持有多个 Connector 组件和 Container 组件。除了 Connector 组件和 Container 组件,service 组件还持有了 Mapper ,用于实现 servlet API 的映射规则。

    note

    • tomcat 有四种 Container 组件,分别实现了 Engine 接口,Host 接口,Context 接口和 wrapper 接口。service 类只直接持有顶层组件,即 Engine 组件。

    相关文章

      网友评论

        本文标题:Tomcat源码分析 -- 5

        本文链接:https://www.haomeiwen.com/subject/invcpqtx.html