About Programming/web 2009/01/15 18:23
Context를 생성하는 방법은 크게 두가지로 나눌 수 있는데요.
첫번째는, CATALINA_HOME/conf/server.xml 파일을 수정하는 방법과
두번째는, CATALINA_HOME/conf/Catalina/localhost/ 디렉토리에 context xml파일을 생성하는 방법이 있습니다.
미리 말해두자면, 두번째 방법이 추천하는 방법입니다.
첫번째, server.xml을 수정하는 방법은
server.xml파일을 열어서 <Host>태그를 찾아 그 사이에 <Context>태그를 추가 하는 겁니다.
예를 들면 아래와 같이 됩니다.
- <Host name="localhost" ......>
- ...
- <Context path="/myContext" docBase="c:\myContext\webapps"
- debug="0" privileged="true">
- </Context>
- ...
위의 path 속성에는 생성하고자 하는 Context의 이름을 지정하구요,
나중에 Http URL을 통해 접근할때 hostname 바로 다음에 위치하게 되요.
docBase 속성은 서비스 될 실제 웹파일(html, gif, jsp)들이 위치하는 디렉토리 입니다.
두번째, context xml을 추가 하는 방법은
CATATLINA_HOME/conf/Catalina/localhost 디렉토리에 context이름으로 xml파일을 생성해서 아래의 내용과 같이 기재하시면 됩니다.
<Context path="/myContext" docBase="c:\myContext\webapps"
debug="0" privileged="true">
</Context>
두번째 방법이 당연히 쉽고 편하겠죠.
왜냐하면 server.xml을 잘못 건드리면 뭐가 잘못되었는지 찾아야 하는 불편이 있지만, 새로 파일을 만들게 되면 잘 안되었을때 지우고 다시 만들면 되니까요.
이렇게 생성된 context의 docBase에는 서비스할 웹파일은 물론 WEB-INF 라는 디렉토리가 반드시 존재해야 하구요. 그 안에는 web.xml이라는 파일이 존재해야 하는것 쯤은 아시겠죠?
WEB-INF/classes,lib 디렉토리에는 context에서 사용할 class 파일이나 jar파일을 저장하면 되는데요. 여기에 위치한 class와 jar 파일은 별도의 CALASSPATH를 지정하지 않아도 접근이 가능합니다.
그런데 만약 어떠한 이유에서든 WEB-INF/classes, lib 디렉토리에 class, jar파일을 위치하지 않으려면 CLASSPATH에 지정해도 Tomat은 찾지 못하게 됩니다.
그 이유는 Tomcat이 System class loader를 이용하여 서비스 할 Class들을 로딩하지 않기 때문인데요.
그래서 Tomcat은 용도별로 3군데의 classes, lib 디렉토리를 가지게 하고 그곳에 적절히 class 또는 jar파일을 위치하게 하고 있어요. 그게 어딘지는 아래에 표로 설명했습니다.
CATALINA_HOME/server/lib, classes |
Tomcat 엔진에서 사용할 class, jar |
CATALINA_HOME/common/lib, classes |
Tomcat 내부적으로 사용하거나, web applicatoin이 사용할 class, jar (예:JDBC Driver) |
CATALINA_HOME/shared/lib, classes |
모든 Web Application들이 사용할 class, jar |
이와 같이 3곳과 context 내의 WEB-INF/classes, lib에 자신이 만들 context에서 사용할 class와 jar파일을 위치 시키면 되는 데요.
또 어떠한 이유에서 지정된 디렉토리에 class와 jar파일을 옮겨 둘 수 없는 경우가 있을 겁니다.
그럴때는 CATALINA_HOME/conf/catalina.properties 라는 파일을 수정해서 CATALINA_HOME 디렉토리 영역 바깥 어디에 있는 class나 jar파일도 지정해 줄수가 있어요.
calalina.properties 파일을 열어 보면 주석으로 장황하게 기재되어 있지만, 실제로는 아래와 같이 3줄만이 있을 뿐입니다.
common.loader=${catalina.home}/ <..생략..> ${catalina.home}/common/lib/*.jar
server.loader=${catalina.home}/serve<..생략..>${catalina.home}/server/lib/*.jar
shared.loader=${catalina.base}/share<..생략..>,${catalina.base}/shared/lib/*.jar
위의 3줄은 앞서 설명한 3군데의 디렉토리를 지정하고 있구요. 각 영역의 의미에 맞는 class나 jar파일을 해당 라인 끝에 연결해서 원하는 디렉토리의 class나 jar파일을 지정해 주시면 됩니다.
보시면 아시겠지만, 앞서 설명한 3군데의 디렉토리도 이곳 catalina.properties파일에 지정되어 있죠. 무슨 의미인지 아시겠죠?
끝으로, 힌트 한가지.
내가 생성할 Context 의 path(이름)을 그냥 루트(/)로 하고 싶으면, 별도의 context를 만드실 필요 없이 CATALINA_HOME/webapps/ROOT 디렉토리를 context의 docBase로 사용하시면 되구요.
별도의 디렉토리로 docBase를 지정하고 싶다면, context xml파일을 생성할때 path 속성을 공백으로 두시면 됩니다. 이렇게요.
<Context path="" docBase="c:\myContext\webapps"
debug="0" privileged="true">
</Context>
자 오늘은 여기 까지 입니다.
출처 : http://rainer.tistory.com/31