Tomcat7源码解读(一) —— 容器静态结构概述

概述: Tomcat源码解读已经有不少人已经发过各种文章了,大致看了下大多都是抄袭的。所以决定自己耐心从头到尾仔细看一遍,边看边写些博文。

 


 在Tomcat的$CATALINA_HOME/conf/web.xml中默认配置了上图所示的内容。仔细阅读这个XML文件的内容就可以大致的看出Tomcat的各个容器组件之间的关系。要是想深入的了解各个组件的详细关系,并且对XML配置文件做充分的优化,则需要进一步的理解各个组件的关系结构。


                                          图1-2
 

        仔细查看上图,不难发现其中的Connecotr组件以及与Container组建是Tomcat的核心。一个Server可以有多个Service,而一个Service可以包含了多个Connector组件和一个Engine容器组件,一个Engine可以由多个虚拟主机Host组成,每一个Host下面又可以由多个Web应用Context构成,每一个的Context下面可以包含多个Wrapper(Servlet的包装器)组成。

        Tomcat将Engine,Host,Context,Wrapper统一抽象成Container。一个抽象的Container模块可以包含各种服务。例如,Manager(Session管理),管道阀门Value(访问日志通过Pipeline实现),访问控制管理(Realm)等。Lifecycle接口统一定义了容器的生命周期,通过事件机制实现各个容器间的内部通讯。而容器的核心接口Container的抽象实现中定义了一个Pipeline,一个Manager,一个Realm以及ClassLoader统一了对于外部模块的实。连接器(connector)组件的主要任务是为其所接收到的每一请求(可以是HTTP,也可以AJP),委托给具体相关协议的解析类ProtocolHandler,构造出request 对象和response 对象。然后将这两个对象传送给容器(container)进行处理。容器(container)组件收到来自连接器(connector)的request 和response 对象后,负责调用servlet 的service 方法。不过在调用Servlet之前容器还负责很多事情。例如,要记录访问日志(AccessLogValue),需要加载servlet(类加载器ClassLoader);给用户授权(Realm);更新该用户的session 信息(Manager)等等。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值