`
Rambing
  • 浏览: 31343 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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)等等。

 

 

 

  • 大小: 20.5 KB
  • 大小: 12.9 KB
  • 大小: 125.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics