=1)log(sm.getString("webappLoad" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Tomcat從零開始(十一)WebappLoader概述

系統 2210 0

好的,我們先看看這個 WebappLoader 到底在開始的時候做了什么,先看看他的 start() 方法。

        public void start() throws LifecycleException {



        // 校驗 和 更新 當前的組件狀態。

        if (started)

            throw new LifecycleException

                (sm.getString("webappLoader.alreadyStarted"));

        if (debug >= 1)

            log(sm.getString("webappLoader.starting"));

        lifecycle.fireLifecycleEvent(START_EVENT, null);

        started = true;



        if (container.getResources() == null)

            return;



        // 給JNDI protocol注冊一個stream handler factory  

        URLStreamHandlerFactory streamHandlerFactory =

            new DirContextURLStreamHandlerFactory();

        try {

            URL.setURLStreamHandlerFactory(streamHandlerFactory);

        } catch (Throwable t) {

            // 吃掉了異常

        }



        //基于我們當前的 庫    構建一個classLoader

        try {



            classLoader = createClassLoader();

            classLoader.setResources(container.getResources());

            classLoader.setDebug(this.debug);

            classLoader.setDelegate(this.delegate);



            for (int i = 0; i < repositories.length; i++) {

                classLoader.addRepository(repositories[i]);

            }



            //配置我們的 庫

            setRepositories();

            setClassPath();



            setPermissions();



            if (classLoader instanceof Lifecycle)

                ((Lifecycle) classLoader).start();



            // 綁定webAppClassLoader的路徑

            DirContextURLStreamHandler.bind

                ((ClassLoader) classLoader, this.container.getResources());



        } catch (Throwable t) {

            throw new LifecycleException("start: ", t);

        }



        validatePackages();



        // 啟動一個后臺線程來自動重載

        if (reloadable) {

            log(sm.getString("webappLoader.reloading"));

            try {

                threadStart();

            } catch (IllegalStateException e) {

                throw new LifecycleException(e);

            }

        }



    }


  


?

那么我們就來逐步分析一下。首先之前的 狀態監測 JNDI 就不多做介紹了,我們來看第二個 try 塊中的語句。首先就是classLoader = createClassLoader();這里的classLoader是定義的private WebappClassLoader;那我們就看看createClassLoader 的代碼。

        private WebappClassLoader createClassLoader()

        throws Exception {



        Class clazz = Class.forName(loaderClass);

        WebappClassLoader classLoader = null;



        if (parentClassLoader == null) {

            classLoader = (WebappClassLoader) clazz.newInstance();

        } else {

            Class[] argTypes = { ClassLoader.class };

            Object[] args = { parentClassLoader };

            Constructor constr = clazz.getConstructor(argTypes);

            classLoader = (WebappClassLoader) constr.newInstance(args);

        }



        return classLoader;



    }
  

?

        private String loaderClass =

        "org.apache.catalina.loader.WebappClassLoader";
  


?

我們可以看見,可以通過 setLoaderClass getLoaderClass 這兩個方法可以更改loaderClass的值。所以也就意味著,我們可以自己定義一個繼承webappClassLoader 的類,來更換系統自帶的。

?

之后就是setRepositories,上回我說過了,另外我說的讓大家自己找的哪里設置了/lib文件夾不知大家找到了沒有,其實就是 setJarPath 方法.

?

再之后,我就說說這個reload,上節課,我就說了一個大概,就是modified(),檢測這個是否被更改了就成,如果更改了。就重新載入,所以,以我們自己的思路,如果要實現這個東西,肯定得用一個新的線程,去檢測文件最后的修改時間,之后如果發現時間不一致的話,那么就重新加載。其實tomcat就是這樣實現的。

?

?

另外就是緩存了,緩存這個東西其實tomcat并沒有太多的實現,java.lang.ClassLoader自己維護了一個Vector,而且也是由其管理。之后tomcat自己維護了一個 所有/classes下面的可加載類 。在hashMap中。

?

今天說的也都結束了。

?

Tomcat從零開始(十一)WebappLoader概述


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!?。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产人成久久久精品 | 日本免费人做人一区在线观看 | 99玖玖| 久久精品只有这里有 | 小明看看成人免费 | 在线日产一区二区 | 极品美女一级毛片免费 | 51国产午夜精品免费视频 | 久久伊人久久 | 天天操天天干天天做 | 九色蝌蚪自拍 | 精品一区二区三区中文 | 一级毛片a免费播放王色 | 亚洲一区二区三区福利在线 | 精品视频午夜一区二区 | 午夜精品成年片色多多 | 国产精品久久久久999 | 亚洲视频三区 | 亚洲毛片一级带毛片基地 | 国产ar高清视频+视频 | xxxx免费国产在线视频 | 久久久久久久久综合影视网 | a v在线男人的天堂观看免费 | 大色佬视频在线观看 | 欧美区一区二 | 日本高清不卡二区 | 久久精品国产亚洲a不卡 | 日日摸夜夜添夜夜添欧美毛片 | 九九九网站| 日韩欧美在线观看视频 | 国产在线精品一区二区三区 | 亚洲国产精品乱码一区二区三区 | 福利在线免费 | 亚洲欧美卡通成人制服动漫 | 99热最新网址| 精品欧美一区二区三区 | 久久久久免费精品视频 | 欧美亚洲国产日韩一区二区三区 | 国产99福利视频在线 | 好吊妞视频在线观看 | 日本在线播放一区 |