Tomcat系统架构分析

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所涉及的设计模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值