Tomcat容器

前言

1. 本系列文章基于 Tomcat9
2. 前置知识:servlet

定义

先来看看容器的定义,Tomcat 源码注释如下:

/**
 * A <b>Container</b> is an object that can execute requests received from
 * a client, and return responses based on those requests.  A Container may
 * optionally support a pipeline of Valves that process the request in an
 * order configured at runtime, by implementing the <b>Pipeline</b> interface
 * as well.
 * .....
 */

简单说就是执行客户端的 request,并返回 response。

Tomcat容器关系

这四种容器含义如下:

  • Wrapper:Servlet 的包装,为什么要包装呢?留个坑以后再写
  • Context:表示一个 web 应用,是 Wrapper 的容器
  • Host:表示一个虚拟主机,一个虚拟机下可以有多个 Context
  • Engine:用来管理多个虚拟主机

那这些容器如何组合在一起的呢? 这些接口都继承了 Container 接口,有设置父容器、子容器的方法

public interface Container extends Lifecycle {
    public void setName(String name);
    public Container getParent();
    public void setParent(Container container);
    public void addChild(Container child);
    public void removeChild(Container child);
    public Container findChild(String name);
}

每个容器都维护着自己的父子容器

 protected final HashMap<String, Container> children = new HashMap<>();
 protected Container parent = null;
如何定位请求的 Servlet

Mapper 类负责 Url 和 servlet 之间的映射,具体过程可以看 Mapper.map()

生命周期管理 - LifeCycle

LifeCycle 抽象了组件的生命周期,父容器驱动子容器,达到了一键式启停。做到了统一的管理、方便的调用,同时代码逻辑清晰易懂,值得学习。
下面是 LifeCycle 的接口的方法:

public void init() throws LifecycleException;
public void start() throws LifecycleException;
public void stop() throws LifecycleException;
public void destroy() throws LifecycleException;

public LifecycleState getState();
public String getStateName();

public void addLifecycleListener(LifecycleListener listener);
public void removeLifecycleListener(LifecycleListener listener);
public LifecycleListener[] findLifecycleListeners();

/** 下面是生命周期事件,用于扩展生命周期对应的操作*/
BEFORE_INIT_EVENT
AFTER_INIT_EVENT
START_EVENT
BEFORE_START_EVENT
AFTER_START_EVENT
STOP_EVENT
BEFORE_STOP_EVENT
AFTER_STOP_EVENT
AFTER_DESTROY_EVENT
BEFORE_DESTROY_EVENT
PERIODIC_EVENT
CONFIGURE_START_EVENT
CONFIGURE_STOP_EVENT

Reference

Tomcat系统架构(下):聊聊多层容器的设计

猜你喜欢

转载自www.cnblogs.com/walterlee/p/13176089.html
今日推荐