Tomcat总体结构。

Tomcat的结构很复杂,但是Tomcat也非常模块化,找到了Tomcat最核心的模块,你就抓住Tomcat的“七寸”了。下图是Tomcat的总体结构图。

从上图中可以看出,Tomcat的心脏有两个组件:Connector和Container。Connector组件是可以被替换的,这样可以给服务器设计者提升更多的选择,因为这个组件是如此重要,不仅跟服务器本身的设计相关,而且和不同的应用场景也十分相关,所以一个Container可以选择对应多个Connector。多个Connector和一个Container就形成了一个Service,Service的概念大家都很熟悉了,有了Service就可以对外提供服务了。但是Service还要有一个生存的环境,必须能给其生命、掌握其生死大权,这时就非Server莫属了。所以整个Tomcat的生命周期由Server控制。

以Service作为“婚姻”

我们将Tomcat中的Connector、Container作为一个整体,比作一对情侣,Connector主要负责对外交流,可以比作男孩,Container主要处理Connector接受的请求,主要处理内部事务,可以比作女孩。那么这个Service就是连接这对男女的结婚证了,是Service将这对男女连接在一起,共同组成一个家庭。当然要组成一个家庭还要有很多其他元素。

说白了,Service只是在Connector和Container外面多包一层,把他们组装在一起,向外面提供服务。一个Service可以设置多个Connector,但是只能有一个Container容器。

从Service接口中定义的方法可以看出,他主要是为了关联Connector和Container,同时会初始化他下面的其他组件。注意,在接口中并没有规定一定要控制他下main的组件的生命周期。所有组件的生命周期在一个Lifecycle的接口中控制。

在Tomcat中Service接口的标准实现类是StandardService,他不仅实现了Service接口,同时还实现了Lifecycle接口,这样他就可以控制下面组件的生命周期了。

以Server为“居”

前面说一对情侣因为Service而成为一对夫妻,有了能够组成一个家庭的基本条件,但是他们还要有个实体的家,这时他们在社会上的生存之本,有了家他们就可以安心的为人民服务并一起为社会创造财富了。

Service要完成的任务很简单,就是提供一个接口让其他程序能够访问到这个Service集合,同时要维护他所包含的所有Service的生命周期,包括如何初始化、如何结束服务、如何找到别人要访问的Service。还有其他的一些次要的任务,类似于你住在这个地方要向当地整副去登记,可能还要配合当地公安机关日常的安全检查等。

他的标准实现类StandardService实现了上面这些方法,同时也实现了Lifecycle、MbeanRegistration两个接口的所有方法。

组件的生命线“Lifecycle”

前面一直在说Service和Server管理他下面组件的生命周期,那他们是如何管理的呢?

在Tomcat中组件的生命周期是通过Lifecycle接口来控制的,组件只要继承这个接口并实现其中的方法就可以统一被拥有他的组件控制了。这样一层一层的直到一个最高级的组件就可以控制Tomcat中所有组件的生命周期了,这个最高级的组件就是Server,而控制Server的是Startup,也就是启动和关闭Tomcat。

除了控制生命周期的Start和Stop方法外,还有一个监听机制,在生命周期开始和结束时做一些额外的操作。这个机制在其他框架中也被使用,如在Spring中。

Lifecycle接口的方法的实现都在其他组件中,就像前面说的,组件的生命周期由包含他的父组件控制,所以他的Start方法自然就是调用他下面的组件的Start方法,Stop方法也是一样。

猜你喜欢

转载自blog.csdn.net/en_joker/article/details/81624662
今日推荐