Tomcat容器
Posted walterlee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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容器的主要内容,如果未能解决你的问题,请参考以下文章
mysql jdbc源码分析片段 和 Tomcat's JDBC Pool