前言 前文中讲到了 Connector 的初始化与启动,其中最关键的就是 ProtocolHandler 的初始化与启动。tomcat 中 ProtocolHandler 的默认实现类是 Http11NioProtocol。tomcat9.0.16 中 ProtocolHandler 的实现类中还有一个…
前言 前文讲到了 ProtocolHandler 及其默认实现类 Http11NioProtocol,在 Http11NioProtocol 的构造方法中创建了一个 NioEndpoint 对象,并且在 Http11NioProtocol 的 init 和 start 方法中最重要的步骤是调用这个 NioEndpoint 对象的 init 和 start…
前言 前文介绍了 NioEndpoint,其中讲到了在 NioEndpoint#startInternal 方法里创建并启动了 Acceptor 和 Poller,线程。本篇文章先看 Acceptor,下篇文章再看 Poller。 1. Acceptor Acceptor 的构造方法声明为: private final…
前言 前文里讲到了 NioEndpint 的启动过程中创建了多个 Poller 对象,并启动了 Poller 线程。在 上篇文章 中介绍了 Acceptor 的 run 方法,其中讲到了 Acceptor 的工作就是接受客户端的连接并转交给 Poller 线程处理,本文将分析 Poller 和 PollerEvent。Poller 和…
前言 前文中分析了 Poller 和 PollerEvent,Poller#processSocket 方法里获取了一个 SocketProcessorBase 来处理SocketChannel 的读写事件,在 SocketProcessorBase 的子类 SocketProcessor#doRun 方法里通过…
前言 前文讲到了 Engine 的 init 和 start 方法,在 Engine 的 start(ContainerBase#startInternal) 方法里调用了子容器的 start 方法,而 Engine 的子容器就是 Host。在 Engine 的 init 方法中并没有调用子容器的 init 方法,而是在 start 方法中调用子容器的…
前言 前文简单介绍了 Host,讲到了Context的启动时机,就是在 Engine 的 start 方法中调用了子容器的 start 方法(在ContainerBase#startInternal),子容器又调用子容器的方法,以此类推,所有子容器的start 方法都会被调用。 1. StandardContext#initInternal…
前言 前文讲到了Context的启动,在 Context 的 startInternal 方法中调用了子容器的 start 方法,Context 的子容器则是 Wrapper,Wrapper 的实现类是 StandardWrapper。StandardWrapper 没有重载 initInternal 方法。 1.…
前言 前文讲到了 Wrapper 的启动,之前也提到了 Pipeline 和 Valve。Pipeline的实现类是 StandardPipeline,StandardPipeline 继承自 LifecycleBase,而 Valve 的实现类则比较多,这些实现类都继承自基类 ValveBase,而 ValveBase 继承自…
前言 在前文中,介绍了 Tomcat 中 Container 及其相关组件,包括 Engine、Host、Context、Wrapper、Pipeline 和 Valve。之前也分析到了 Service 的 initInternal 和 startInternal 方法,在其中就调用了 Connector 的 init 和 start…