tomcat 源码总结

一、Tomcat的功能
        对于一个web开发者而言,Tomcat 是一个请求处理的第一步,然后再进行我们业务处理。如下图:
       

    从上图可以看出,Tomcat有2大块非常重要的功能:1、HTTP服务器的功能:socket 通信、解析报文。2、servlet 容器的功能。
下面我们具体看下这2部分的功能(本文主要关注coyote、Catalina模块,对于EL、Jasper没做分析)。

二、Tomcat的架构
     Tomcat 为了完成上述的功能,封装了很对的组件,各个组件之间的关系就形成了Tomcat的架构。下面我们首先看下官网提供的一个架构图,根据上面提供的组件我们逐个分析。
 

除了Connetor和Catalina组件外,Tomcat还定义了很多其他的组件来工作,如:server->servcie->connector/Container->engine->host->context->wrapper。这些个组件采用一层套用一层的方式组成了 Tomcat 的架构,这个结构同时也是和serve.xml配置中的标签结构一样的。PS:如果一个组件包含了其他组件,那么也可以把这个组件成为容器。

1、server:

2、service:

3、engine和host:

4、context:

5、wrapper:

三、组件的初始化
        Tomcat的各个组件初始化以及启动都是通过生命周期来控制的,每个组件都直接或者间接的实现了 Lifecycle 接口。这里有个从Tomcat 开源出去的一个解析XML工具 Digster 把我们的server.XML 配置文件中的节点都解析成了相应的对象,如:StandardServer、StandardService等,下面我们看下组件的初始化和启动流程:

这里的 init 和 start 就是一层调用一层的进行,这里主要记录一下 在Engine 调用 HOST 的时候使用线程池并发进行的,如果我们server.xml 没有对 context 等配置,那么是如果对 host 后面的组件context等进行启动的呢?      
这里有个生命周期监听接口 : LifecycleListener。我们在StandardEngine 的 startInternal 方法中最终是调用了父类ContainerBase的 startInternal 方法。在这个方法的后面有一个状态设置:
setState(LifecycleState.STARTING); 这个通过修改状态触发了监听,最终通过从而完成了context等的启动。即Host 拉起Context 是通过HostConfig 监听实现,同理Context 拿到具体web.xml的servlet 是通过ContextConfig来实现。
如果对Tomcat的类加载机制有兴趣可以了解StandardContext。 

四、请求的处理流程
 对于一个 Tomcat是如果处理一个HTTP请求的,一个流程图可以先看下:

对于请求的流程关注一下 Poller 线程拿到数据后,然后通过processor和adapter处理成ServletRequest 和 ServletResponse 后交给了容器,然后在根据对应请求URL想找到相应的Host、context、servlet,然后构造一个filterchain,经过一系列filter后,最后执行到service方法。
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值