Pour apprendre le chargeur de classe Tomcat, vous devez d'abord regarder plusieurs chargeurs de classe fournis par la JVM. Après tout, le chargeur de classe Tomcat dépend du chargeur de classe JVM.
Chargeur de classe JVM : chargeur de classe d'amorçage, chargeur de classe d'extension, chargeur de classe système (également connu sous le nom de chargeur de classe d'application, chargeur de classe système). Le chargeur de classe d'amorçage est le parent du chargeur de classe d'extension, qui à son tour est le parent du chargeur de classe système.
(1) Bootstrap Classloader est implémenté par JVM en langage C en utilisant JNI (c'est-à-dire qu'il ne s'agit pas d'une sous-classe de Java.lang.ClassLoader). Responsable du chargement de la bibliothèque de classes sous %JAVA_HOME%lib ou de la classe spécifiée par l'option -Xbootclasspath ou de l'utilisation de l'option -D pour spécifier la propriété système sun.boot.class.path.
(2) L'extension ClassLoader est implémentée par sun.misc.Launcher$ExtClassLoader et est responsable du chargement de la bibliothèque de classes dans %JAVA_HOME%jrelibext ou de la bibliothèque de classes spécifiée par la variable système java.ext.dirs.
(3) System ClassLoader est implémenté par sum.misc.Launcher$AppClassLoader et est responsable du chargement des classes impliquées dans les applications Java. Le chargeur peut être obtenu via ClassLoader.getSystemClassLoader()
Lorsque Tomcat démarre, plusieurs chargeurs de classes seront créés :
1 Le chargeur de classe de démarrage Bootstrap
charge les classes requises pour le démarrage de la JVM, ainsi que les classes d'extension standard, situées sous jre/lib/ext.
2 Chargeur de classe système système
Charge les classes démarrées par Tomcat, telles que bootstrap.jar, généralement spécifiées dans catalina.bat ou catalina.sh. Situé sous CATALINA_HOME/bin.
3 Chargeur de classes universel commun
Charge certaines classes communes à Tomcat et aux applications, situées sous CATALINA_HOME/lib, telles que le servlet -api.jar
4 chargeurs de classes d'applications Web
Après le déploiement de chaque application, un chargeur de classe unique. Ce chargeur de classe chargera la classe dans le fichier jar situé sous WEB-INF/lib et le fichier de classe sous WEB-INF/classes.
Lorsque l'application a besoin d'une certaine classe, la classe sera chargée dans l'ordre suivant :
1 Utilisez bootstrap pour charger le chargeur de classe
2 Utilisez le chargeur de classe système pour charger
3 Utilisez le chargeur de classe d'application pour charger dans WEB-INF/classes
4 Utilisez le chargeur de classe d'application pour charger dans WEB-INF/lib
5 Utilisez le chargeur de classes commun pour charger
dans CATALINA_HOME/lib Un autre point à mentionner est que placer les fichiers Java dans le dossier src dans Eclipse donnera la priorité aux classes du package jar :
En effet, le fichier java dans le dossier src dans Eclipse et le JSP dans webContent seront compilés en fichiers de classe et placés dans WEB-INF/class au démarrage de Tomcat. Le package jar référencé en externe par Eclipse équivaut à être placé dans WEB-INF/lib. Par conséquent, les classes compilées à partir de fichiers Java ou de fichiers JSP doivent être chargées en premier .
De plus, veuillez noter que différentes versions des packages jar sont placées dans CATALINA_HOME/lib et WEB-INF/lib. Cela entraînera une erreur indiquant que la classe ne peut pas être chargée dans certains cas.
De plus, si plusieurs applications utilisent le même fichier de package jar et que plusieurs copies sont placées, cela peut provoquer des erreurs de chargement de classe entre plusieurs applications.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!