ㅋㅋㅋ 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()를 통해 얻을 수 있습니다.1 Bootstrap 부트 클래스 로더
JVM 시작에 필요한 클래스 및 표준 확장을 로드합니다. 클래스는 jre/lib/ext 아래에 있습니다.2 시스템 시스템 클래스 로더
Bootstrap.jar과 같이 tomcat에 의해 시작된 클래스를 로드하며 일반적으로 catalina.bat 또는 catalina.sh에 지정됩니다. CATALINA_HOME/bin 아래에 있습니다.3 공통 범용 클래스 로더
CATALINA_HOME/lib에 있는 tomcat 및 애플리케이션에 공통적인 일부 클래스를 로드합니다(예: servlet-api.jar4 webapp 애플리케이션 클래스 로더
각 애플리케이션이 배포된 후 고유한 클래스 로더가 생성됩니다. 이 클래스 로더는WEB-INF/lib 아래에 있는 jar 파일의 클래스와 WEB-INF/classes 아래의 클래스 파일을 로드합니다.
애플리케이션에 특정 클래스가 필요한 경우 클래스는 다음 순서로 로드됩니다:
1 부트스트랩 클래스 로더를 사용하여 로드 2 시스템 클래스 로더를 사용하여 로드 3 애플리케이션 클래스 로더 사용 서버는 WEB-INF/classes에 로드됩니다. 4 애플리케이션 클래스 로더를 사용하여 WEB-INF/lib에 로드합니다. 5 공통 클래스 로더를 사용하여 CATALINA_HOME/lib에 로드합니다. 또 다른 이야기는 java입니다. Eclipse의 src 폴더에 파일이 저장되면 jar 패키지의 클래스에 우선순위가 부여됩니다. Tomcat이 시작될 때 Eclipse의 src 폴더에 있는 java 파일과 webContent의 JSP 파일이 클래스 파일로 컴파일되기 때문입니다. WEB-INF/클래스에서. Eclipse에서 외부적으로 참조하는 jar 패키지는 WEB-INF/lib에 배치되는 것과 동일합니다. 따라서 Java 파일이나 JSP 파일에서 컴파일된 클래스를 먼저 로드해야 합니다. 또한 CATALINA_HOME/lib 및 WEB-INF/lib에 서로 다른 버전의 jar 패키지가 배치되어 있어 경우에 따라 클래스를 로드할 수 없는 오류가 발생할 수 있습니다.
또한 여러 애플리케이션이 동일한 jar 패키지 파일을 사용하고 여러 복사본이 배치되는 경우 여러 애플리케이션 간에 클래스 로딩 오류가 발생할 수 있습니다.
위 내용은 Tomcat의 여러 클래스 로더 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!