标签:
主要介绍tomcat启动涉及到的一些接口和类。
tomcat作为一个服务器,它的主要功能就是接收请求——处理请求——返回,如果是我们自己实现一个最简单的服务器,启动一个线程监听某个端口,该端口有数据进来的话就接收数据,然后在启动一个线程去处理接收到的数据并返回。那么启动一个服务器最重要的就是启动一个线程监听某个端口,tomcat也是,只不过tomcat包含很多组件,首先要完成组件的初始化,然后再依次启动各个组件。所以要知道tomcat 的启动过程,首先了解下tomcat的组件。
其实还包括Processor、Session、Manager、Deployer等,但是在启动过程中,这些不是最重要的,在了解了整个过程之后在进行具体学习。
生命周期组件里面主要包含一个接口、一个类、一个enum:Lifecycle、LifecycleEvent、LifecycleState。
接口org.apache.catalina.Lifecycle包含以下定义:
抽象类LifecycleBase实现了Lifecycle接口,主要提供了基本的start和stop实现,并增加了以下方法
抽象类LifecycleMBeanBase继承了LifecycleBase类,这个类实现了LifecycleBase的一些方法,提供了一些MBean的基本管理,tomcat提供了对JMX的支持。
org.apache.catalina.LifecycleEvent 继承自 java.util.EventObject ,表示lifecycle触发的事件,和事件紧密关联的就是listener了,所有想感知组件生命周期状态变化的类都要事先这个接口 (org.apache.catalina.LifecycleListener) 来监听对应的事件。事实上比如ContextConfig的初始化就是监听了Context的事件。
提供了lifecycle的变化的各种状态,参考下图(tomcat javadoc)
其实tomcat作为servlet容器作重要的部分就是Container组件,Container组件是四层架构,类图如下:
简单介绍容器的四层架构:
在刚开始我们说过了,自己实现服务器的话就是监听一个端口,接收请求,这也是tomcat Connector组件的作用,最后监听端口是由JIoEndpoint的一个内部类Acceptor来完成的,所以当JIoEndpoint$Acceptor线程启动的时候,整个tomcat服务器也就启动完成了。
tomcat支持http和ajp协议,所以提供了Http11Protocol和AjpProtocol来处理对应的协议(上面主要画出了http协议的部分)。
以上是tomcat启动所涉及到的主要类和接口,当然了其中涉及到的远不止于此,但是一开始我也说了对于不同的目的,可以有针对性的学习,所以以上只关注了一些户主要的类。还有一个问题就是,我还是有点纠结的:其实我觉得记录的时候没有必要添加大段代码,因为这些代码都比较好懂,而且如果真要阅读的话可以随时找得到,当然了,对于一些很是重要或者经典的代码还是很有必要专门分析的。
在阅读的过程中记了一些笔记和绘制了一些图(这些在tomcat源码阅读的最后再附上),但是感觉都比较琐碎,经过这么一整理感觉更加明晰了。
How Tomcat works — 二、tomcat启动(1)
标签:
原文地址:http://www.cnblogs.com/sunshine-2015/p/5744721.html