加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

深入Tomcat 架构及启动过程「含部署」

发布时间:2019-05-27 23:29:25 所属栏目:业界 来源:今日头条
导读:这个标题命的着实是很大的,写的时辰照旧很忐忑的,但我尽也许把这个进程描写清晰。由于这是读过源码往后写的总结,在写的进程中也许会忽略一些条件前提,假若有哪些较量突兀就呈现,或欠好领略的处所可以给我提 Issue,我会尽快增补修订相干内容。 许多东

Tomcat Start[Deployment]

深入Tomcat 架构及启动进程「含陈设」
  • 图中从 StandardHost Start StandardContext 的这步着实在真正的执行流程中会直接跳过,由于 conf/server.xml 文件中并没有设置任何的 Context,以是在 findChildren() 查找子容器时会返回空数组,以是之后遍历子容器来启动子容器的 for 轮回就直接跳过了。
  • 触发 Host 的 BEFORE_START_EVENT 生命周期变乱,HostConfig 挪用其 beforeStart() 要领建设 $CATALINA_BASE/webapps& $CATALINA_BASE/conf/// 目次。
  • 触发 Host 的 START_EVENT 生命周期变乱,HostConfig 挪用其 start() 要领开始陈设已在 $CATALINA_BASE/webapps & $CATALINA_BASE/conf/// 目次下的应用措施。
  1. 理会 $CATALINA_BASE/conf/// 目次下全部界说 Context 的 XML 文件,并添加到 StandardHost。这些 XML 文件称为应用措施描写符。正由于云云,我们可以设置一个假造路径来生涯应用措施顶用到的图片,具体的设置进程请参考 开拓情形设置指南 – 6.3. 设置图片存放目次
  2. 陈设 $CATALINA_BASE/webapps 下全部的 WAR 文件,并添加到 StandardHost。
  3. 陈设 $CATALINA_BASE/webapps 下全部已解压的目次,并添加到 StandardHost。
  • 出格的,添加到 StandardHost 时,会直接挪用 StandardContext 的 start() 要领来启动应用措施。启动应用措施步调请看 Context Start 一节。
  • 在 StandardEngine 和 StandardContext 启动时城市挪用各自的 threadStart() 要领,该要了解建设一个新的靠山线程来处理赏罚该该容器和子容器及容器内各组件的靠山变乱。StandardEngine 会直接建设一个靠山线程,StandardContext 默认是不建设的,和 StandardEngine 共用统一个。靠山线程处理赏罚机制是周期挪用组件的 backgroundProcess() 要领。详情请看 Background process 一节。
  • MapperListener
  1. addListeners(engine) 要了解将该监听器添加到 StandardEngine 和它的全部子容器中
  2. registerHost() 会注册全部的 Host 和他们的子容器到 Mapper 中,利便后期哀求处理赏罚时行使。
  3. 当有新的应用(StandardContext)添加进来后,会触发 Host 的容器变乱,然后通过 MapperListener 将新应用的映射注册到 Mapper 中。
  • Start 事变都做完往后 Catalina 会建设一个 CatalinaShutdownHook 并注册到 JVM。CatalinaShutdownHook 担任了 Thread,是 Catalina 的内部类。其 run 要领中直接挪用了 Catalina 的 stop() 要领来封锁整个处事器。注册该 Thread 到 JVM 的缘故起因是防备用户非正常终止 Tomcat,好比直接封锁呼吁窗口之类的。当直接封锁呼吁窗口时,操纵体系会向 JVM 发送一个终止信号,然后 JVM 在退出前会一一启动已注册的 ShutdownHook 来封锁响应资源。

Context Start

深入Tomcat 架构及启动进程「含陈设」
  • StandRoot 类实现了 WebResourceRoot 接口,它容纳了一个应用措施的全部资源,普通的来说就是陈设到 webapps 目次下对应 Context 的目次里的全部资源。由于我对 Tomcat 的资源打点部门暂且不是很感乐趣,以是资源打点相干类只是做了简朴相识,并没有深入研究源代码。
  • resourceStart() 要了解对 StandardRoot 举办初始设置
  • postWorkDirectory() 用于建设对应的事变目次 $CATALINA_BASE/work///, 该目任命于存放姑且文件。
  • StardardContext 只是一个容器,而 ApplicationContext 则是一个应用措施真正的运行情形,相干类及操纵会在哀求处理赏罚流程看完往后举办增补。
  • StardardContext 触发 CONFIGURE_START_EVENT 生命周期变乱,ContextConfig 开始挪用 configureStart() 对应用措施举办设置。
  1. 这个进程会理会并归并 conf/web.xml & conf///web.xml.default & webapps//WEB-INF/web.xml 中的设置。
  2. 设置设置文件中的参数到 StandardContext, 个中首要的包罗 Servlet、Filter、Listener。
  3. 由于从 Servlet3.0 往后是直接支持注解的,以是处事器必需可以或许处理赏罚加了注解的类。Tomcat 通过说明 WEB-INF/classes/ 中的 Class 文件和 WEB-INF/lib/ 下的 jar 包将扫描到的 Servlet、Filter、Listerner 注册到 StandardContext。
  4. setConfigured(true),长短常要害的一个操纵,它标识了 Context 的乐成设置,若未配置该值为 true 的话,Context 会启动失败。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读