熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Tomcat類加載機制

2022-06-13   來源: Java開源技術 

  Tomcat Server在啟動的時候將構造一個ClassLoader樹以保證模塊的類庫是私有的
    Tomcat Server的ClassLoader結構如下


代碼


        Bootstrap  
              |            
        System   
              |  
        Common  
         /             \  
    Catalina  Shared  
                          /    \  
           WebApp  WebApp  

其中
Bootstrap 載入JVM自帶的類和$JAVA_HOME/jre/lib/ext/*jar
System 載入$CLASSPATH/*class
Common 載入$CATALINA_HOME/common/它們對TOMCAT和所有的WEB APP都可見
Catalina 載入$CATALINA_HOME/server/它們僅對TOMCAT可見對所有的WEB APP都不可見
Shared 載入$CATALINA_HOME/shared/它們僅對所有WEB APP可見對TOMCAT不可見(也不必見)
WebApp 載入ContextBase?/WEBINF/它們僅對該WEB APP可見

  每個運行中的線程都有一個成員contextClassLoader用來在運行時動態地載入其它類系統默認的 contextClassLoader是systemClassLoader所以一般而言java程序在執行時可以使用JVM自帶的類$ JAVA_HOME/jre/lib/ext/中的類和$CLASSPATH/中的類可以使用ThreadcurrentThread() setContextClassLoader();更改當前線程的contextClassLoader來改變其載入類的行為

  ClassLoader被組織成樹形一般的工作原理是
) 線程需要用到某個類於是contextClassLoader被請求來載入該類
) contextClassLoader請求它的父ClassLoader來完成該載入請求
) 如果父ClassLoader無法載入類則contextClassLoader試圖自己來載入
注意WebApp?ClassLoader的工作原理和上述有少許不同
它先試圖自己載入類(在ContextBase?/WEBINF/中載入類)如果無法載入再請求父ClassLoader完成

  由此可得
對於WEB APP線程它的contextClassLoader是WebApp?ClassLoader
對於Tomcat Server線程它的contextClassLoader是CatalinaClassLoader

 

From:http://tw.wingwit.com/Article/program/Java/ky/201311/28494.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.