Tomcat源码架构笔记(servlet请求处理链路篇)

上一篇文章中,我们在debug模式下完整的跟踪程序走了一遍,对Tomcat start启动阶段所做的操作有了大概的了解。

这回,我们一起看看,Tomcat服务器接受到一个请求到处理这个请求之间经历了怎样的过程。


Servlet请求处理链路分析

  • 一个servlet如何被tomcat处理的?
  • servlet请求 -> 可以处理当前servlet请求的servlet实例 -> servlet.service()

Servlet请求处理链路和URL的对应关系Servlet请求处理链路和URL的对应关系

上一篇文章中我们知道Acceptor线程主要负责监听Socket嵌套字请求,并将其转给sekector(选择器)。

而poller线程,则负责检查sekector(选择器)中是否有数据到来的channel,如果有就进行处理。

NIO模型NIO模型

所以Servlet请求处理链路中最重要的就是poller线程,他负责控制这一系列的操作。

Tomcat源码架构笔记(init初始化篇)

上一篇文章里,我们基本上了解到Tomcat是如何启动的,和入口函数要执行的两大关键阶段:

  • init初始化阶段
  • start启动阶段(传送门

本篇文章详细展开在Tomcat init初始化阶段,具体干了些什么?是怎么干的?

TomcatTomcat


Tomcat init初始化阶段

Tomcat init初始化阶段Tomcat init初始化阶段

Tomcat源码架构笔记(入口篇)

上一篇文章简单的梳理了下Tomcat的架构,这里我们分析跟踪下Tomcat是如何启动的?做了点什么?

TomcatTomcat


一点前置知识

上篇文章中说了,Tomcat有好多组件(server -> service -> Connector/Contaniner -> Engine -> Host -> Context -> Wrapper),一层套一层的。

那么Tomcat如何管理众多且复杂的组件们呢?

这里就来说下Tomcat组件生命周期统一管理接口——LifeCycie

Tomcat组件生命周期(实例创建 -> 销毁),为了统一规范管理组件的生命周期,Tomcat抽象出LifeCycie生命周期接口。

Tomcat源码架构笔记(架构篇)

本片主要简单的介绍记录下Tomcat的设计架构,及其好处。

同时搭建一个Tomcat源码的阅读架构。

Tomcat是Apache基金会旗下的项目Tomcat是Apache基金会旗下的项目


Tomcat功能(需求)

Tomcat作为开发和调试Servlet、JSP 程序的首选JavaWeb服务器(免费、开源)。

其核心的功能是什么?

或者可是说是他需要完成些什么动作(需求)?

Tomcat工作流程(简单)Tomcat工作流程(简单)

Tomcat主要功能可以分成以下两部分:

  • http服务器

    • 接受解析http报文
    • socket通信(tcp/ip)
  • Servlet容器

    • 处理具体业务逻辑
    • 多个Servlet(自带+自定义)