Tomcat의 Class Loader HOW-TO

톰캣이 시작할때 아래 같이 부모 자식 관계로 구성되는 클래스로더 집합을 생성합니다.

       Bootstrap
          |
        System
          |
       Common
       /     \
  Webapp1   Webapp2 ...

  
  

각각의 클래스로더에 대해서 설명을 하면

  1. Bootstrap - JVM에서 제공되는 클래스들과 $JAVA_HOME/jre/lib/ext 에 존재 하는 JAR 파일 및 클래스가 포함되어 있습니다.

  2. System - CLASSPATH 환경변수로 $CATALINA_HOME/bin/catalina.sh or %CATALINA_HOME%\bin\catalina.bat 에서 설정 할 수 있다.

  3. Common - 톰켓에 전역으로 로딩되는 클래스로더 $CATALINA_BASE/conf/catalina.properties 에서 선언하고 있거나 아래의 폴더에 JAR파일이나 압축이 풀린 클래스와 리소스들이다.

  • $CATALINA_BASE/lib
  • $CATALINA_HOME/lib
  1. WebappX - 해당 클래스로더는 웹앱 하나당 하나씩 생성이 됩니다.
  • /WEB-INF/classes

  • /WEB-INF/lib

  • Bootclass는 java 에 의해 로딩되면 JVM이 초기화되면서 필요한 클래스들로 이루어져 있다.System.getProperty(“sun.boot.class.path”) 와 System.getProperty(“java.ext.dirs”)에서 확인할 수 있다.

  • JVM초기화 과정이 끝나면 java는 java.lang.ClassLoader를 통해서 어플리케이션 클래스들을 로딩한다. System.getProperty(“java.class.path”)에서 값을 확인할 수 있다.

참조