Tomcat的启动逻辑是基于观察者模式设计的,所有的容器都会继承Lifecycle接口,他管理着容器的整个生命周期,所有容器的修改和状态的改变都会由他去通知已经注册的观察者(Listener)。Tomcat启动的时序图如下图所示。

Servlet容器的启动过程。

上图描述了在Tomcat的启动过程中主要类之间的时序关系,下面我们将会重点关注添加examples应用所对应的StandardContext容器的启动过程。

当Context容器初始化状态设为init时,添加到Context容器的Listener将会被调用。ContextConfig继承了LifecycleListener接口,他是在调用Tomcat.addWebapp时被加入到StandardContext容器中的。ContextConfig类会负责整个Web应用的配置文件的解析工作。

ContextConfig的init方法将会主要完成以下工作。

  •     创建用于解析XML配置文件的contextDigester对象。
  •     读取默认的context.xml配置文件,如果存在则解析它。
  •     读取默认的Host配置文件,如果存在则解析他。
  •     读取默认的Context自身的配置文件,如果存在则解析他。
  •     设置Context的DocBase。

ContextConfig的init方法完成后,Context容器就会执行startInternal方法,这个方法的启动逻辑比较复杂,主要包括如下几部分。

  •     创建读取资源文件的对象。
  •     创建ClassLoader对象。
  •     设置应用的工作目录。
  •     启动相关的辅助类,如logger、realm、resources等。
  •     修改启动状态,通知感兴趣的观察者(Web应用的配置)。
  •     子容器的初始化。
  •     获取ServletContext并设置必要的参数。
  •     初始化“load on startup”的Servlet。

相关文章:

  • 2021-10-21
  • 2021-10-29
  • 2021-07-25
  • 2022-01-16
  • 2021-05-22
  • 2022-03-09
猜你喜欢
  • 2021-09-10
  • 2021-11-08
  • 2021-08-27
  • 2021-12-10
  • 2021-12-05
  • 2022-12-23
  • 2021-08-15
相关资源
相似解决方案