tomcat各个组件功能

jopen 10年前

Server提供一个接口,由1至多个Service组成,让其它程序可以访问到这个Service集合,同时维护各个Service的生命周期,包括如何初始化,如何结束服务,如何找到别人请求的服务。

Service又由1-n个Connector及单个Container组成,只是在Container和Connector外多包了一层,提供各种服务

Connector组件是可选择替换的,负责接收浏览器发过来的TCP连接请求,创建Request/Response,分配线程,将创建的对象传递给Container来处理请求

Container是容器的父接口,由四个容器组成,分别是Engine,Host,Context,Wrapper。其中Engine包含Host,Host包含Context,Content包含Wrapper,一个Servlet class对应一个Wrapper

Engine容器是作为顶级Container组件来设计的,由Host组成,其作用相当于一个Container的门面。有了Engine,请求的处理过程变为:浏览器发出请求,Connector接受请求,将请求交由Container(这里是Engine)处理,Container(Engine来担当)查找请求对应的Host并将请求传递给它,Host拿到请求后查找相应的应用上下文环境,准备 servlet环境并调用service方法。

Host容器是Engine的子容器,一个Host在Engine中代表一个虚拟主机,这个主机可以运行多个应用,他负责安装和展开这些应用,并且标识这个应用,以便能够区分他们。它的子容器通常是Context,他除了关联子容器外,还保存一个主机应有的信息。Host不是必需的,但是要运行 war程序,就必须要使用Host,因为在war中必有web.xml文件,这个文件解析就需要Host,如果有多个Host就需要定义一个top容器 Engine,而Engine没有父容器,一个Engine就代表一个完整的Servlet引擎

Context代表Servlet的Context,它具备Servlet运行的基本环境,理论上只要有Context就能运行Servlet,简单的Tomcat可以没有Engine和Host。其最重要的功能就是管理Servlet实例,Servlet实例在Context中是以Wrapper 出现的。

Wrapper代表一个Servlet,它负责管理Servlet,包括装载,初始化,执行以及资源回收。它是最底层的容器。

服务器接口 org.apache.catalina.Server
生命周期接口 org.apache.catalina.Lifecycle
监听并接收请求 org.apache.catalina.connector.Connector
处理请求 org.apache.catalina.Container
Web应用 org.apache.catalina.Context(继承了Container)
虚拟主机 org.apache.catalina.Host(继承了Container)
服务接口 org.apache.catalina.Service
Engine org.apache.catalina.Engine

对于Tomcat服务器来说,除了Server代表它自己以外,其它组件都是功能组件,都有其职责范围。Service为最顶层的组件,可以添加 Connector和Container组件。Engine是Container的最顶层组件,可以添加Host组件,但不能添加父组件。Host组件的父组件是Engine,Host下面包含有Context组件。

浏览器发出请求,Connector接受请求,将请求交由Container处理,Container查找请求对应的Host并将请求传递给它,Host拿到请求后查找相应的应用上下文环境,准备servlet环境并调用service方法。

组件的生命周期由包含它的父组件控制,所以调用组件的start方法也就是调用其包含的子组件的start方法