Tomcat系统架构分析

来源:互联网 发布:java equals int 编辑:程序博客网 时间:2024/05/21 03:26

Tomcat系统架构分析

为什么要去研究Tomcat系统架构,最初目的是希望搞明白servlet被加载到servlet容器的过程以及相关参数初始化的流程。
有如下问题:
在Servlet源码中抽象类GenericServlet继承自Servlet接口,并实现了一些默认的方法。在init方法中,初始化了类变量ServletConfig,源代码和对应的方法注释如下:

/**     *     * Called by the servlet container to indicate to a servlet that the     * servlet is being placed into service.  See {@link Servlet#init}.     *     * <p>This implementation stores the {@link ServletConfig}     * object it receives from the servlet container for later use.     * When overriding this form of the method, call      * <code>super.init(config)</code>.     *     * @param config            the <code>ServletConfig</code> object     *                  that contains configutation     *                  information for this servlet     *     * @exception ServletException  if an exception occurs that     *                  interrupts the servlet's normal     *                  operation     *     *      * @see                 UnavailableException     *     */    public void init(ServletConfig config) throws ServletException {        this.config = config;        this.init();    }

注释中有一段话: Called by the servlet container to indicate to a servlet that the servlet is being placed into service.
表明该方法是由servlet容器进行调用,那么,Servlet容器是如何获得ServletConfig,又是如何调用Servlet的init方法,并把获得的ServletConfig传入init方法中的。这就需要分析Tomcat整体架构和启动流程。

Tomcat核心组件

Tomcat两个核心的组件是: Connector和Container。这两个组件以及其他为他们提供服务的组件共同组成一个Service服务。一个Service中可以包含多个Connector,但是只能有一个Container。Service存在于Server中,用于对外提供服务。
Connector组件的主要功能是: 接收浏览器发来的TCP连接请求,并创建request和response对象。之后创建一定数量的线程池。当收到请求时,激活线程,并由httpProcessor进行http协议的解析以及封装request和response。之后,将request和response传给container进行一次servlet处理。可以说,httpProcessor是连接Container和httpConnector的关键。所有线程的调用和执行都是在httpProcessor进行操作的。httpConnector只是初始化serverSocket等待接收外部的请求。
Container组件:Container接口是所有Container组件中所有容器的父接口,所有自容器都必须实现这个接口。Container容器采用的是责任链的设计模式。它由四个子容器构成,分别是: Engine,Host,Context,Wrapper。这四个子容器是父子关系,最底层的Wrapper对应一个servlet class。Context容器代表了Servlet的运行环境,Servlet在Context中是以Wrapper的形式出现的。而Wrapper则负责管理一个Servlet,包括Servlet的装载,初始化,执行以及资源回收。Wrapper的实现类是StandardWrapper,StandardWrapper还实现了包含Servlet初始化信息的ServletConfig。

Tomcat工作原理
Tomcat所涉及的设计模式

0 0
原创粉丝点击