Tomcat的系统架构与模式设计分析

Tomcat的系统架构与模式设计分析

ID:39468932

大小:718.00 KB

页数:25页

时间:2019-07-04

Tomcat的系统架构与模式设计分析_第1页
Tomcat的系统架构与模式设计分析_第2页
Tomcat的系统架构与模式设计分析_第3页
Tomcat的系统架构与模式设计分析_第4页
Tomcat的系统架构与模式设计分析_第5页
资源描述:

《Tomcat的系统架构与模式设计分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Tomcat的系统架构与设计模式(君山,11/20/2009)如有错误之处请指出(junshan@taobao.com)前言:从标题看上去很大,Tomcat很复杂,不是一篇文章就能说清楚的,就算我想说恐怕我也说不清楚,我主要是想知道Tomcat如何分发请求的,如何处理多用户同时请求的,还有他的容器是如何工作的。这也是一个Web服务器要解决的两个关键问题。这也是我写这个文档的目的。一、Tomcat总体设计这里所说的Tomcat是以Tomcat5为基础,也兼顾最新的Tomcat6。Tomcat基本的设计思路还是有连贯性的。1.Tomcat总体结构Tomcat的结构复杂,但是Tomca

2、t也非常的模块化,找到了Tomcat最主要的模块其实Tomcat就能被你抓住“七寸”了。下面是Tomcat的总体结构图:图1.Tomcat的总体结构从上图中可以看出Tomcat的心脏是两个组件:Connector和Container,关于这两个组件将在后面详细介绍。Connector组件是可以被替换,这样可以提供给服务器设计者更多的选择,因为这个组件是如此重要,不仅跟服务器的设计者本身,而且和不同的应用场景十分相关,所以一个Container可以选择对应多个Connector。多个Connector和一个Container就形成了一个Service,Service的概念大家都很熟

3、悉了,有了Service就可以对外提供服务了,但是Service还要一个生存的环境,必须要有人能够给她生命、掌握其生死大权,那就非Server莫属了。所以整个Tomcat的生命周期由Server控制。1.1以Service作为“婚姻”我们将Tomcat中Connector、Container和其他一些组件作为一个整体比作一对情侣的话,Connector主要负责对外交流,可以比作为Boy,Container主要处理Connector接受的请求,主要是处理内部事务,可以比作为Girl。那么这个Service就是连接这对男女的结婚证了。是Service将他们连接在一起,共同组成一个家庭

4、。说白了,Service只是在Connector和Container外面多包一层,把他们组装在一起,向外面提供服务,一个Service可以设置多个Connector,但是只能有一个Container容器。这个Service接口的类图如下:图2.Service类图从Service接口中定义的方法中可以看出,它主要是为了关联Connector和Container,同时会初始化它下面的其他组件,注意接口中它并没有规定他一定要控制了它下面的组件的生命周期。所有组件的生命周期在一个Lifecycle的接口中控制,这里用到了一个重要的设计模式,关于这个接口将在后面介绍。Tomcat中Serv

5、ice接口的标准实现类是StandardService它不仅实现了Service接口同时还实现了Lifecycle以可以控制它下面的组件的生命周期。StandardService类结构图如下:图3StandardService的类结构图从上图中可以看出除了Service接口的方法的实现以及控制组件生命周期的Lifecycle接口的实现,还有几个方法是用于在事件监听的方法的实现,不仅是这个Service组件,Tomcat中其他组件也同样有这几个方法,这也是一个典型的设计模式,将在后面介绍。下面看一下StandardService中主要的几个方法实现的代码,下面是setContain

6、er(Container)和addConnector(Connector)方法的源码:publicvoidsetContainer(Containercontainer){ContaineroldContainer=this.container;if((oldContainer!=null)&&(oldContainerinstanceofEngine))((Engine)oldContainer).setService(null);this.container=container;if((this.container!=null)&&(this.containerinstanc

7、eofEngine))((Engine)this.container).setService(this);if(started&&(this.container!=null)&&(this.containerinstanceofLifecycle)){try{((Lifecycle)this.container).start();}catch(LifecycleExceptione){;}}synchronized(connectors){for(inti=0;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。