成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Tomcat啟動核心流程示例詳解

瀏覽:462日期:2023-03-19 16:51:54
目錄
  • 一、Tomcat的啟動核心流程
    • 1.啟動的入口
    • 2.init方法
    • 3.load方法
    • 4.start方法
    • 5.核心流程的總結

一、Tomcat的啟動核心流程

前面給大家介紹了Tomcat中的生命周期的設計,掌握了這塊對于我們分析Tomcat的核心流程是非常有幫助的,也就是我們需要創建相關的核心組件,比如Server,Service肯定都繞不開生命周期的方法。

1.啟動的入口

你可以通過腳本來啟動Tomcat服務(startup.bat),但如果你看過腳本的命令,你會發現最終調用的還是Bootstrap中的main方法,所以我們需要從main方法來開始

然后我們去看main方法中的代碼,我們需要重點關注的方法有三個

  • bootstrap.init()方法
  • load()方法
  • start()方法

也就是在這三個方法中會完成Tomcat的核心操作。

2.init方法

我們來看下init方法中的代碼,非核心的我們直接去掉

    public void init() throws Exception {// 創建相關的類加載器initClassLoaders();// 省略部分代碼...// 通過反射創建了 Catalina 類對象Class<?> startupClass = catalinaLoader    .loadClass("org.apache.catalina.startup.Catalina");// 創建了 Catalina 實例Object startupInstance = startupClass.getConstructor().newInstance();// 省略部分代碼...String methodName = "setParentClassLoader";Class<?> paramTypes[] = new Class[1];paramTypes[0] = Class.forName("java.lang.ClassLoader");Object paramValues[] = new Object[1];paramValues[0] = sharedLoader;// 把 sharedLoader 設置為了 commonLoader的父加載器Method method =    startupInstance.getClass().getMethod(methodName, paramTypes);method.invoke(startupInstance, paramValues);// Catalina 實例 賦值給了 catalinaDaemoncatalinaDaemon = startupInstance;    }
  • 首先是調用了initClassLoaders()方法,這個方法會完成對應的ClassLoader的創建,這個比較重要,后面專門寫一篇文章來介紹。
  • 通過反射的方式創建了Catalina的類對象,并通過反射創建了Catalina的實例
  • 設置了類加載器的父子關系
  • 用過成員變量catalinaDaemon記錄了我們創建的Catalina實例

這個是通過bootstrap.init()方法我們可以獲取到的有用的信息。然后我們繼續往下面看。

3.load方法

然后我們來看下load方法做了什么事情,代碼如下:

    private void load(String[] arguments) throws Exception {// Call the load() methodString methodName = "load"; // load方法的名稱Object param[];Class<?> paramTypes[];if (arguments==null || arguments.length==0) {    paramTypes = null;    param = null;} else {    paramTypes = new Class[1];    paramTypes[0] = arguments.getClass();    param = new Object[1];    param[0] = arguments;}// catalinaDaemon 就是在 init中創建的 Catalina 對象Method method =    catalinaDaemon.getClass().getMethod(methodName, paramTypes);if (log.isDebugEnabled()) {    log.debug("Calling startup class " + method);}// 會執行 Catalina的load方法method.invoke(catalinaDaemon, param);    }

上面的代碼非常簡單,通過注釋我們也可以看出該方法的作用是調用 Catalina的load方法。所以我們還需要加入到Catalina的load方法中來查看,代碼同樣比較長,只留下關鍵代碼

    public void load() {if (loaded) {    return; // 只能被加載一次}loaded = true;initDirs(); // 廢棄的方法// Before digester - it may be neededinitNaming(); // 和JNDI 相關的內容 忽略// Create and execute our Digester// 創建并且執行我們的 Digester 對象  Server.xmlDigester digester = createStartDigester();// 省略掉了 Digester文件處理的代碼getServer().setCatalina(this); // Server對象綁定 Catalina對象getServer().setCatalinaHome(Bootstrap.getCatalinaHomeFile());getServer().setCatalinaBase(Bootstrap.getCatalinaBaseFile());// Stream redirectioninitStreams();// 省略掉了部分代碼... getServer().init(); // 完成 Server  Service Engine Connector等組件的init操作    }

把上面的代碼簡化后我們發現這個Load方法其實也是蠻簡單的,就做了兩件事。

  • 通過Apache下的Digester組件完成了Server.xml文件的解析
  • 通過getServer().init() 方法完成了Server,Service,Engin,Connector等核心組件的初始化操作,這塊和前面的LifecycleBase呼應起來了。

如果生命周期的內容不清楚,請看前面內容介紹

4.start方法

最后我們來看下start方法的代碼。

    public void start() throws Exception {if (catalinaDaemon == null) {    init(); // 如果 catalinaDaemon 為空 初始化操作}// 獲取的是 Catalina 中的 start方法Method method = catalinaDaemon.getClass().getMethod("start", (Class [])null);// 執行 Catalina 的start方法method.invoke(catalinaDaemon, (Object [])null);    }

上面的代碼邏輯也很清楚,就是通過反射的方式調用了Catalina對象的start方法。所以進入Catalina的start方法中查看。

    public void start() {if (getServer() == null) {    load(); // 如果Server 為空 重新 init 相關的組件}if (getServer() == null) {    log.fatal("Cannot start server. Server instance is not configured.");    return;}// Start the new server  關鍵方法---&gt;啟動Servertry {    getServer().start();} catch (LifecycleException e) {    // 省略...}// 省略...// Register shutdown hook  注冊關閉的鉤子if (useShutdownHook) {    // 省略...}if (await) {    await();    stop();}    }

通過上面的代碼我們可以發現核心的代碼還是getServer.start()方法,也就是通過Server對象來嵌套的調用相關注解的start方法。

5.核心流程的總結

我們可以通過下圖來總結下Tomcat啟動的核心流程

從圖中我們可以看到Bootstrap其實沒有做什么核心的事情,主要還是Catalina來完成的。

以上就是Tomcat啟動核心流程示例詳解的詳細內容,更多關于Tomcat啟動流程的資料請關注其它相關文章!

標簽: Tomcat
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
成人免费视频国产在线观看| 欧美一区二区三区小说| 欧洲人成人精品| www国产精品av| 亚洲一区二区在线免费观看视频| 紧缚奴在线一区二区三区| 色综合中文综合网| 好吊一区二区三区| 色欧美日韩亚洲| 久久久99精品久久| 男人的天堂亚洲一区| 欧美婷婷在线| 欧美老女人在线| 亚洲乱码日产精品bd| 国产成人啪免费观看软件| 国产精品久久久久久久久婷婷| 日韩欧美国产1| 午夜久久久影院| 欧美欧美天天天天操| 欧美性猛交xxxx黑人交| 亚洲精品少妇30p| 91视频免费看| 欧美乱妇一区二区三区不卡视频| 亚洲精品ww久久久久久p站| 国产91精品精华液一区二区三区 | 日韩精品一级二级| 欧美日韩精品一本二本三本| 欧美精选一区二区| 午夜精品爽啪视频| 一区二区视频在线观看| 91精品国产免费| 男人的j进女人的j一区| 国产伦精品一区二区三区视频黑人| 国产精品一页| 国产区日韩欧美| 欧美精品一区二区三区视频| 精品一区二区三区免费毛片爱| 99亚洲一区二区| 日本一区二区在线不卡| 国产成人在线视频网站| 欧美亚洲日本国产| 日本美女一区二区三区视频| 国产日韩欧美三区| 捆绑变态av一区二区三区| 石原莉奈在线亚洲三区| 9久草视频在线视频精品| 国产精品久久国产愉拍 | 久久久www成人免费毛片麻豆| 中文字幕在线一区免费| 麻豆91在线看| 国内精品国语自产拍在线观看| 色综合久久66| 国产亚洲欧美日韩俺去了| 五月婷婷色综合| 91香蕉视频污| 欧美亚洲国产一区二区三区va | 亚洲色图欧洲色图| 国产精品一区久久久久| 亚洲看片一区| 精品三级av在线| 视频在线观看国产精品| 欧美在线三区| 欧美色综合影院| 亚洲免费在线播放| av色综合久久天堂av综合| 色哟哟日韩精品| 亚洲精品视频观看| 成人福利电影精品一区二区在线观看| 午夜宅男欧美| 国产精品短视频| 成人午夜激情视频| 欧洲精品视频在线观看| 亚洲美女屁股眼交3| 成人av电影免费在线播放| 91精品91久久久中77777| 亚洲日本在线观看| 99久久99久久精品国产片果冻| 欧美性三三影院| 亚洲成av人**亚洲成av**| 亚洲国产精品www| 国产日韩欧美在线一区| 粉嫩在线一区二区三区视频| 色婷婷久久一区二区三区麻豆| 91久久精品www人人做人人爽| 色噜噜狠狠成人网p站| 亚洲欧美aⅴ...| 欧美午夜影院| 久久综合999| 99久久综合色| 日韩一区和二区| 国产在线精品一区在线观看麻豆| 蜜桃av一区| 亚洲精品欧美综合四区| 亚洲高清123| 国产精品成人一区二区三区夜夜夜| 成人一区在线看| 日韩一区二区精品| 国产精品中文字幕日韩精品| 欧美日韩久久久一区| 蜜桃一区二区三区在线| 老牛影视一区二区三区| 一区二区三区精品久久久| 亚洲国产午夜| 亚洲国产一区二区在线播放| 中日韩在线视频| 一区二区不卡在线播放 | 免费欧美日韩| 亚洲国产乱码最新视频| 久久精品人人| 日本三级亚洲精品| 欧美伊人久久大香线蕉综合69| 琪琪久久久久日韩精品| 日本精品一级二级| 韩国理伦片一区二区三区在线播放| 久久一区国产| 精品一区二区av| 91精品国产福利在线观看| 国产成人av电影在线观看| 青青国产91久久久久久| 国产精品免费av| 欧美日韩综合一区| 亚洲精品激情| 国产麻豆欧美日韩一区| 亚洲精品久久嫩草网站秘色| 91麻豆精品国产无毒不卡在线观看| 亚洲性图久久| 成人一区二区三区中文字幕| 亚洲自拍都市欧美小说| 26uuu国产日韩综合| 久久福利电影| 91丝袜呻吟高潮美腿白嫩在线观看| 日韩高清国产一区在线| 国产精品久久久久影院老司 | 99国产欧美久久久精品| 奇米影视一区二区三区小说| 亚洲免费观看高清完整版在线观看 | 亚洲人123区| 精品国产乱码久久久久久浪潮 | 国产成人av电影免费在线观看| 亚洲午夜一区二区三区| 国产日韩欧美综合一区| 日韩一卡二卡三卡四卡| 91成人免费在线视频| 亚洲精品在线二区| 午夜精品影院| 成人午夜看片网址| 国产制服丝袜一区| 日韩av一二三| 亚洲影院在线观看| 亚洲视频精选在线| 中文字幕第一区综合| 精品久久久影院| 91麻豆精品国产91久久久更新时间 | 亚洲欧美激情视频在线观看一区二区三区| 日韩情涩欧美日韩视频| 欧美老女人在线| 日本国产一区二区| 久久久久久久久久久久久9999| 亚洲国产欧美日韩| 欧美精品尤物在线| 97精品电影院| 成人小视频免费观看| 韩国av一区二区三区| 久久奇米777| 一区二区高清| 欧美日韩国产成人精品| 99精品欧美一区二区蜜桃免费| 国产精品一区二区三区99| 日韩不卡免费视频| 日本麻豆一区二区三区视频| 日韩电影在线一区| 国产精品精品国产色婷婷| 这里只有精品99re| 在线观看网站黄不卡| 亚洲精品人人| 91在线码无精品| 狠狠色2019综合网| 午夜欧美视频在线观看| 国产欧美日韩一区二区三区在线观看| 欧美最猛性xxxxx直播| 亚洲精品偷拍| 欧美高清视频一区| 成人性生交大片免费看中文网站| 亚洲高清三级视频| **网站欧美大片在线观看| 精品久久久久久久久久久院品网| 91久久免费观看| 国产欧美在线| 怡红院精品视频在线观看极品| 丁香激情综合五月| 国产综合色视频| 日产国产欧美视频一区精品| 亚洲另类在线视频| 亚洲少妇最新在线视频| 国产精品网友自拍| 精品国产1区二区| 精品久久久久久久人人人人传媒| 欧美一区二区三区爱爱| 欧美老女人第四色| 欧美私人免费视频|