250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- AJAX
- myBatis
- 오픈소스
- git
- maven
- Docker
- Spring Boot
- ubuntu
- Open Source
- Source
- PostgreSQL
- MySQL
- IntelliJ
- Eclipse
- 문서
- JDBC
- Thymeleaf
- spring
- error
- 설정
- oracle
- Core Java
- MSSQL
- Python
- jpa
- SpringBoot
- Tomcat
- Exception
- STS
- JavaScript
Archives
- Today
- Total
헤르메스 LIFE
[문서] 톰캣 6.0 클래스로더 구조 본문
728x90
원문 : http://whiteship.tistory.com/2587
http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html
BootStrap CL: JVM 코어, 확장 라이브러리용 클래스 로더
System CL: $CATALINA_HOME/bin/bootstrap.jar와 CATALINA_HOME/bin/tomcat-juli.jar를 가지고 시스템 클래스 로더를 생성함. 일반적인 애플리케이션의 시스템 클래스 로더와는 동작 방식이 다름. 일반적인 애들은 시스템 클래스로더에서 CLASSPATH에 있는 것들을 로딩하지만, 톰캣의 스크립트(($CATALINA_HOME/bin/catalina.sh 또는 %CATALINA_HOME%\bin\catalina.bat)가 이를 무시해버림.
Common CL: $CATALINA_HOME/lib에 위치한 톰캣 내부 클래스와 웹 애플리케이션이 공통으로 참조할 라이브러리를 로딩한다.
웹 애플리케이션 CL: 각각의 웹 애플리케이션당 해당 애플리케이션의 /WEB-INF/classes와 /WEB-INF/lib 디렉토리에 있는 클래스와 리소스를 로딩한다.
SRV.9.7.2 Web Application ClassloaderThe classloader that a container uses to load a servlet in a WAR must allow thedeveloper to load any resources contained in library JARs within the WARfollowing normal J2SE semantics using getResource. It must not allow theWAR tooverride J2SE or Java servlet API classes. It is further recommended that the loadernot allow servlets in theWAR access to the web container’s implementation classes.It is recommended also that the application class loader be implemented so that classes and resources packaged within the WAR are loaded in preference to classes and resources residing in container-wide library JARs.
위와 같은 서블릿 2.3 스펙에 따라 웹 애플리케이션 CL은 다음의 순서로 클래스를 로딩한다.
1. Bootstrap classes of your JVM
2. System class loader classes (described above)
3. /WEB-INF/classes of your web application
4. /WEB-INF/lib/*.jar of your web application
5. $CATALINA_HOME/lib
6. $CATALINA_HOME/lib/*.jar
1번은 웹 애플리케이션 CL의 최상위 CL인 BootStrap CL에 의해 로딩될 것이고, 거기서 못찾는다면
2번 System CL에 의해서 로딩 된다. 거기서도 못찾는거라면 일단 자바의 코어 라이브러리나 확장 라이브러리도 아니며 톰캣의 내부 클래스(톰캣 서버를 실행하는 클래스와 톰캣의 Commons logging API와 java.util.logging LogManager를 찾는게 아닐것이다. 그런 경우.
3번과 4번에서 웹 애플리케이션 CL 자신의 클래스패스에 있는 라이브러리를 찾아보고.. 거기에 없는 경우
5, 6번 Commons CL의 클래스패스에서 찾아본다.
클래스 로더의 동작 방식이 웹 애플리케이션이 아닌 경우가 웹 애플리케이션인 경우가 다르며, 이것 마저도 웹 서버 마다 다를 수 있으니 자신이 사용하는 컨테이너의 클래스로더 동작 방식을 알고 있어야겠다.
흠.. 스프링의 TC 서버는 어떨지 궁금하다. 그것도 톰캣을 확장한 거니까 이것과 비슷하지 않을까. DM 서버는 왠지 완전히 다를 것 같다.
728x90
'문서' 카테고리의 다른 글
[UML] UML 시퀀스 다이어그램: 참조 (0) | 2012.05.30 |
---|---|
[UML] UML 시퀀스 다이어그램의 조각으로 제어 흐름 설명 (0) | 2012.05.30 |
[문서] Understanding Class.forName (0) | 2012.05.16 |
JavaScript 및 Dojo로 인한 브라우저 메모리 누출 발견 및 해결하기 (0) | 2012.01.04 |
DHTML과 XML을 사용하여 풍부한 Ajax 슬라이드 쇼 만들기 (한글) (0) | 2012.01.04 |