前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tomcat启动分析(3)catalinaload和start

tomcat启动分析(3)catalinaload和start

作者头像
平凡的学生族
发布2019-05-25 09:03:08
4360
发布2019-05-25 09:03:08
举报
文章被收录于专栏:后端技术后端技术

Digester

Digester教程

load

initDirs

该方法是用来确保一些与路径相关的环境变量已经设置。具体来讲,是要确保以下三个环境变量的设置:

  1. Globals.CATALINA_HOME_PROP,将确保用一个值设置,没设置也会用别的值填充
  2. Globals.CATALINA_BASE_PROP,将确保用一个值设置,没设置也会用别的值填充
  3. "java.io.tmpdir",变量必须被设置,路径存在且是文件夹,否则报错。

initNaming

一堆环境变量的设置

剩余部分

  1. 打开配置文件流: 中间大部分代码都是试图打开conf/server.xml,如果没有,则试图打开server-embed.xml的读入流
  2. digester解析输入流: inputSource.setByteStream(inputStream); digester.push(this); digester.parse(inputSource);
  3. 设置双向引用: getServer().setCatalina(this); 其中getServer()返回的server成员变量,在之前用Digester解析 已经生成
  4. 重置输入流initStreams
  5. 调用getServer().init();初始化

start

主要就是这句话

代码语言:javascript
复制
getServer().start();

启动服务器。 然后输出启动耗时,再添加一个jvm退出时的钩子。钩子的行为如下。可以看出,钩子的行为是为了让jvm能优雅地退出。Catalina.this.stop();内部会调用到Server s = getServer();s.stop();s.destroy();完成服务器的生命周期。

代码语言:javascript
复制
protected class CatalinaShutdownHook extends Thread {
        @Override
        public void run() {
            try {
                if (getServer() != null) {
                    Catalina.this.stop();
                }
            }
            ...
            }
        }
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.04.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Digester
  • load
    • initDirs
      • initNaming
        • 剩余部分
        • start
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档