没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
—————————————————————————————
1
Tomcat 系统架构分析
Tomcat 的结构很复杂,但是 Tomcat 也非常的模块化,找到了
Tomcat 最核心的模块,您就抓住了 Tomcat 的
“
七寸
”
。
1).Tomcat 整体结构
• Tomcat 总体结构图
从上图中可以看出 Tomcat 的心脏是两个组件:Connector 和
Container,关于这两个组件将在后面详细介绍。Connector 组件是
可以被替换,这样可以提供给服务器设计者更多的选择,因为这个组 件
是如此重要,不仅跟服务器的设计的本身,而且和不同的应用场景
—————————————————————————————
2
也十分相关,所以一个 Container 可以选择对应多个 Connector。
多个 Connector 和一个 Container 就形成了一个 Service,Service
的概念大家都很熟悉了,有了 Service 就可以对外提供服务了,但是
Service 还要一个生存的环境,必须要有人能够给她生命、掌握其生
死大权,那就非 Server 莫属了。所以整个 Tomcat 的生命周期由
Server 控制。
• 以 Service 作为“婚姻”
我们将 Tomcat 中 Connector、Container 作为一个整体比作一对情
侣的话,Connector 主要负责对外交流,可以比作为 Boy,Container
主要处理 Connector 接受的请求,主要是处理内部事务,可以比作
为 Girl。那么这个 Service 就是连接这对男女的结婚证了。是
Service 将它们连接在一起,共同组成一个家庭。当然要组成一个家
庭还要很多其它的元素。
说白了,Service 只是在 Connector 和 Container 外面多包一层,
把它们组装在一起,向外面提供服务,一个 Service 可以设置多个
Connector,但是只能有一个 Container 容器。这个 Service 接口的
方法列表如下:
—————————————————————————————
3
1). Service 接口
从 Service 接口中定义的方法中可以看出,它主要是为了关联
Connector 和 Container,同时会初始化它下面的其它组件,注意接
口中它并没有规定一定要控制它下面的组件的生命周期。所有组件的
生命周期在一个 Lifecycle 的接口中控制,这里用到了一个重要的设
计模式,关于这个接口将在后面介绍。
Tomcat 中 Service 接口的标准实现类是 StandardService 它不仅实
现了 Service 借口同时还实现了 Lifecycle 接口,这样它就可以控制
它下面的组件的生命周期了。StandardService 类结构图如下:
—————————————————————————————
【更多 Java – Android 资料下载,可访问尚硅谷(中国)官网 www.atguigu.com 下载区】
public void setContainer(Container container) {
Container oldContainer = this.container;
if ((oldContainer != null) && (oldContainer instanceof Engine))
((Engine) oldContainer).setService(null);
this.container = container;
if ((this.container != null) && (this.container instanceof Engine))
((Engine) this.container).setService(this);
if (started && (this.container != null) && (this.container instanceof Lifecycle))
{
try {
((Lifecycle) this.container).start();
} catch (LifecycleException e) {
;
}
}
synchronized (connectors) {
for (int i = 0; i < connectors.length; i++)
connectors[i].setContainer(this.container);
}
if (started && (oldContainer != null) && (oldContainer instanceof Lifecycle)) {
try {
((Lifecycle) oldContainer).stop();
} catch (LifecycleException e) {
;
}
}
support.firePropertyChange("container", oldContainer, this.container);
下面看一下 StandardService 中主要的几个方法实现的代码,下面是
setContainer 和 addConnector 方法的源码:
3). StandardService. SetContainer
5
剩余35页未读,继续阅读
资源评论
心兰相随引导者
- 粉丝: 775
- 资源: 5486
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功