Heim  >  Artikel  >  Java  >  Einführung in mehrere Klassenlader in Tomcat

Einführung in mehrere Klassenlader in Tomcat

零下一度
零下一度Original
2017-07-24 09:26:512441Durchsuche

Um den Tomcat-Klassenlader zu erlernen, müssen Sie sich zunächst mehrere von der JVM bereitgestellte Klassenlader ansehen. Schließlich hängt der Tomcat-Klassenlader vom JVM-Klassenlader ab.

JVM-Klassenlader: Bootstrap-Klassenlader, Erweiterungs-Klassenlader, System-Klassenlader (auch als Anwendungs-Klassenlader, System-Klassenlader bekannt). Der Bootstrap-Klassenlader ist der übergeordnete Klassenlader der Erweiterung, der wiederum der übergeordnete Klassenlader des Systems ist.

(1) Bootstrap Classloader wird von JVM in C-Sprache mithilfe von JNI implementiert (d. h. es ist keine Unterklasse von Java.lang.ClassLoader). Verantwortlich für das Laden der Klassenbibliothek unter %JAVA_HOME%lib oder der durch die Option -Xbootclasspath angegebenen Klasse oder die Verwendung der Option -D zur Angabe der Systemeigenschaft sun.boot.class.path.

(2) Die Erweiterung ClassLoader wird von sun.misc.Launcher$ExtClassLoader implementiert und ist für das Laden der Klassenbibliothek in %JAVA_HOME%jrelibext oder der durch die Systemvariable java.ext.dirs angegebenen Klassenbibliothek verantwortlich.

(3) System ClassLoader wird von sum.misc.Launcher$AppClassLoader implementiert und ist für das Laden von Klassen verantwortlich, die an Java-Anwendungen beteiligt sind. Der Loader kann über ClassLoader.getSystemClassLoader() abgerufen werden


Beim Start von Tomcat werden mehrere Klassenlader erstellt:

1 Der Bootstrap-Boot-Klassenlader

lädt die für den JVM-Start erforderlichen Klassen sowie Standarderweiterungsklassen, die sich unter jre/lib/ext befinden.

2 System-Systemklassenlader

Lädt von Tomcat gestartete Klassen, z. B. bootstrap.jar, normalerweise in catalina.bat oder catalina.sh angegeben. Befindet sich unter CATALINA_HOME/bin.

3 Gemeinsamer universeller Klassenlader

Lädt einige für Tomcat und Anwendungen gemeinsame Klassen, die sich unter CATALINA_HOME/lib befinden, wie z. B. Servlet -api.jar

4 Webapp-Anwendungsklassenlader

Nachdem jede Anwendung bereitgestellt wurde, ein eindeutiger Klassenlader. Dieser Klassenlader lädt die Klasse in die JAR-Datei unter WEB-INF/lib und die Klassendatei unter WEB-INF/classes.

Wenn die Anwendung eine bestimmte Klasse benötigt, wird die Klasse in der folgenden Reihenfolge geladen :

1 Verwenden Sie Bootstrap, um den Klassenlader zu laden

2 Verwenden Sie den Systemklassenlader zum Laden

3 Verwenden Sie den Anwendungsklassenlader zum Laden in WEB-INF/classes

4 Verwenden Sie den Anwendungsklassenlader zum Laden in WEB-INF/lib

5 Verwenden Sie den allgemeinen Klassenlader, um

in CATALINA_HOME/lib zu laden. Ein weiterer zu erwähnender Punkt ist, dass das Platzieren von Java-Dateien im Ordner src in Eclipse den Klassen im JAR-Paket Priorität einräumt:

Dies liegt daran, dass die Java-Datei im src-Ordner in Eclipse und die JSP in webContent in Klassendateien kompiliert und beim Start von Tomcat in WEB-INF/class abgelegt werden. Das von Eclipse extern referenzierte JAR-Paket entspricht der Platzierung in WEB-INF/lib. Daher müssen aus Java-Dateien oder JSP-Dateien kompilierte Klassen zuerst geladen werden .

Beachten Sie außerdem, dass in CATALINA_HOME/lib und WEB-INF/lib unterschiedliche Versionen von JAR-Paketen abgelegt sind. Dies führt in einigen Fällen zu einem Fehler, der dazu führt, dass die Klasse nicht geladen werden kann.

Außerdem kann es zu Fehlern beim Laden von Klassen zwischen mehreren Anwendungen kommen, wenn mehrere Anwendungen dieselbe JAR-Paketdatei verwenden und mehrere Kopien platziert werden.

Das obige ist der detaillierte Inhalt vonEinführung in mehrere Klassenlader in Tomcat. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn