您的位置:首页 > 运维架构 > Tomcat

tomcat源码阅读笔记一

2018-01-03 15:02 363 查看

很好奇tomcat是怎么运行的,写的项目为什么能在tomcat中运行,让全世界看到,所以阅读了tomcat源码。
首先看整体印象:




(此图来源于网络)
一个tomcat,整体就是一个Server,

一个Server里面可以包含多个Service(至少一个),

每个service都包含一个Container和一个Connector,

Container包含四个等级的子Container:1、Engine,2、Host,3、Context,4、Wrapper,其具体实现为1、StandarEngine,2、StandarHost、3、StandarContext,4、StandarWrapper,共同继承自ConainerBase,这些Container主要是为了加载web工程,如静态html资源、开发人员写的代码、session、权限管理、集群等;

每一个等级的Container都包含一个Pipeline,一个Pipeline由许多valve组成,Container启动后启动pipeline,也就是启动valve,具体实现为StandarEngineValve,StandarHostValve,StandarContextValve,StandarWrapperValve,这些valve供Connector调用;

Container全部启动后,Connector接着启动,Connector包含一个protocolHandler,protocolHandler目前有三种协议:bio、nio、apr,可以按需求启用相应的协议。

每个协议protocolHandler包含一个endpoint,在endpoint中开启线程池,等待请求,然后发送给Container中的valve处理。
综上:

无论是container,还是connect,还是最上层的server,都是在服务器活着的前提下存在的,因此他们都受tomcat服务器生命周期LifecycleBase的管理。

像生命周期这种抽象,在tomcat设计中用的很多,如container的抽象ContainerBase,valve的抽象ValveBase,协议protocol的抽象AbstractProtocol,endpoit的抽象AbstractEndpoint等,到最后回到最终的目的,用最少的代码(提升代码复用性),做尽可能多的事(扩展性能良好)。即快,少,灵活。
这篇博文也很好 http://blog.csdn.net/c929833623lvcha/article/details/44677569
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tomcat