Tomcat Server在啟動的時候將構造一個ClassLoader樹,以保證模塊的類庫是私有的 代碼
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 其中: - 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?/WEB-INF/...,它們僅對該WEB APP可見
每個運行中的線程都有一個成員contextClassLoader,用來在運行時動態地載入其它類,系統默認的contextClassLoader是systemClassLoader,所以一般而言java程序在執行時可以使用JVM自帶的類、$JAVA_HOME/jre/lib/ext/中的類和$CLASSPATH/中的類,可以使用Thread.currentThread().setContextClassLoader(...);更改當前線程的contextClassLoader,來改變其載入類的行為 ClassLoader被組織成樹形,一般的工作原理是: 由此可得: |