Tomcat 에서 ClassLoader 의 상하구조는 다음 그림과 같습니다.

 

      Bootstrap

          |

       System

          |

       Common

      /      \

 Catalina   Shared

             /   \

        Webapp1  Webapp2 ... 

 

그런데 class 를 찾는 순서는 Tomcat version 에 따라 순서가 다르다는 것을 발견했습니다.

 

Tomcat 4.x Class 를 찾는 순서

  • /WEB-INF/classes of your web application
  • /WEB-INF/lib/*.jar of your web application
  • Bootstrap classes of your JVM
  • System class loader classses (described above)
  • $CATALINA_HOME/common/classes
  • $CATALINA_HOME/common/endorsed/*.jar
  • $CATALINA_HOME/common/lib/*.jar
  • $CATALINA_HOME/shared/classes
  • $CATALINA_HOME/shared/lib/*.jar

Tomcat 5.x Class 를 찾는 순서

  • Bootstrap classes of your JVM
  • System class loader classses (described above)
  • /WEB-INF/classes of your web application
  • /WEB-INF/lib/*.jar of your web application
  • $CATALINA_HOME/common/classes
  • $CATALINA_HOME/common/endorsed/*.jar
  • $CATALINA_HOME/common/lib/*.jar
  • $CATALINA_BASE/shared/classes
  • $CATALINA_BASE/shared/lib/*.jar

문제는 환경변수에 CLASSPATH 로 설정된 jar 와 context 의 WEB-INF/lib 밑의 jar 중에서 어떤 jar 를 먼저 찾는가 입니다.

CLASSPATH 에서 jar 를 읽어오는 ClassLoader 는 System class loader 입니다.

 

따라서 4.x 에서는 WEB-INF/lib 밑의 jar 가 CLASSPATH 로 설정된 jar 보다 먼저 읽히고

5.x 에서는 CLASSPATH 로 설정된 jar 가 WEB-INF/lib 밑의 jar 보다 먼저 읽힙니다.

 

Tomcat 의 ClassLoader 에 대해서는 아래 문서를 보시라.

 

http://jakarta.apache.org/tomcat/tomcat-5.0-doc/class-loader-howto.html


출처 - http://blog.daum.net/cjsxowls/11338538


===================================================================================


Tomcat5.5 클래스 로딩 순서
Bootstrap classes of your JVM 
System class loader classses (described above) 
/WEB-INF/classes of your web application 
/WEB-INF/lib/*.jar of your web application 
$CATALINA_HOME/common/classes 
$CATALINA_HOME/common/endorsed/*.jar 
$CATALINA_HOME/common/i18n/*.jar 
$CATALINA_HOME/common/lib/*.jar 
$CATALINA_BASE/shared/classes 
$CATALINA_BASE/shared/lib/*.jar

Tomcat5.0 클래스로딩 순서
Bootstrap classes of your JVM 
System class loader classses (described above) 
/WEB-INF/classes of your web application 
/WEB-INF/lib/*.jar of your web application 
$CATALINA_HOME/common/classes 
$CATALINA_HOME/common/endorsed/*.jar 
$CATALINA_HOME/common/lib/*.jar 
$CATALINA_BASE/shared/classes 
$CATALINA_BASE/shared/lib/*.jar

Tomcat4.1 클래스로딩 순서
/WEB-INF/classes of your web application 
/WEB-INF/lib/*.jar of your web application 
Bootstrap classes of your JVM 
System class loader classses (described above) 
$CATALINA_HOME/common/classes 
$CATALINA_HOME/common/endorsed/*.jar 
$CATALINA_HOME/common/lib/*.jar 
$CATALINA_BASE/shared/classes 
$CATALINA_BASE/shared/lib/*.jar 



출처 - http://jace.tistory.com/114

Posted by linuxism

댓글을 달아 주세요