ホームページ >Java >&#&チュートリアル >Tomcat のいくつかのクラスローダーの紹介

Tomcat のいくつかのクラスローダーの紹介

零下一度
零下一度オリジナル
2017-07-24 09:26:512545ブラウズ

Tomcat クラスローダーを学ぶには、まず JVM によって提供されるいくつかのクラスローダーを確認する必要があります。結局のところ、Tomcat クラスローダーは JVM クラスローダーに依存しています。

JVM クラスローダー: ブートストラップ クラス ローダー (ブートストラップ クラス ローダー)、拡張クラス ローダー (拡張クラス ローダー)、システム クラス ローダー (アプリケーション クラス ローダー、システム クラス ローダーとも呼ばれます)。ブートストラップ クラス ローダーは拡張クラス ローダーの親であり、拡張クラス ローダーはシステム クラス ローダーの親です。

(1) ブートストラップ クラスローダーは、JNI を使用して C 言語の JVM によって実装されます (つまり、Java.lang.ClassLoader のサブクラスではありません)。 %JAVA_HOME%lib の下のクラス ライブラリ、または -Xbootclasspath オプションで指定されたクラス、または -D オプションを使用して sun.boot.class.path システム プロパティを指定したクラスをロードします。

(2) 拡張 ClassLoader は sun.misc.Launcher$ExtClassLoader によって実装され、%JAVA_HOME%jrelibext 内のクラス ライブラリ、またはシステム変数 java.ext.dirs で指定されたクラス ライブラリをロードします。

(3) System ClassLoader は sum.misc.Launcher$AppClassLoader によって実装され、Java アプリケーションに関連するクラスのロードを担当します。ローダーは ClassLoader.getSystemClassLoader() を通じて取得できます


Tomcat が起動すると、いくつかのクラス ローダーが作成されます:

1 ブートストラップ ブート クラス ローダー

JVM の起動に必要なクラスをロードします。 jre/lib/ext の下にあるクラス。

2 システム システム クラス ローダー

通常、catalina.bat または catalina.sh で指定される bootstrap.jar など、Tomcat によって開始されるクラスをロードします。 CATALINA_HOME/bin にあります。 3 Common Universal Classローダー各アプリケーションがデプロイされた後、固有のクラス ローダーが作成されます。このクラスローダーは、

WEB-INF/lib の下にある jar ファイル内のクラス

と、WEB-INF/classes の下にあるクラスファイル

をロードします。

アプリケーションで特定のクラスが必要な場合、クラスは次の順序でロードされます

:

1 ブートストラップ クラス ローダーを使用してロードします

2 システム クラス ローダーを使用してロードします

3 アプリケーション クラス ローダーを使用しますサーバーは WEB-INF/classes にロードされます 4 アプリケーション クラス ローダーを使用して WEB-INF/lib にロードします

5 共通クラス ローダーを使用して CATALINA_HOME/lib にロードします もう 1 つ話すべきことは、Java の場合ですファイルが Eclipse の src フォルダーに配置されると、jar パッケージ内のクラスが優先されます: これは、Eclipse の src フォルダー内の Java ファイルと webContent 内の JSP が、Tomcat の起動時にクラス ファイルにコンパイルされるためです。 WEB-INF/クラス内。 Eclipse によって外部参照される jar パッケージは、WEB-INF/lib に配置されるのと同じです。したがって、Java ファイルまたは JSP ファイルからコンパイルされたクラスを最初にロードする必要があります

また、CATALINA_HOME/libとWEB-INF/libに異なるバージョンのjarパッケージが配置されているため、場合によってはクラスをロードできないエラーが発生することにも注意してください。

また、複数のアプリケーションが同じjarパッケージファイルを使用し、複数のコピーを配置すると、複数のアプリケーション間でクラスロードエラーが発生する可能性があります。

以上がTomcat のいくつかのクラスローダーの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。