본문 바로가기
운영체제/리눅스

Tomcat Path, Context Path, Root Path

by Cloud_Park 2020. 1. 8.

톰캣은 기본적으로 server.xml 에서 <Host> 항목의 webapp 설정을 담당합니다.
/TOMCAT_HOME/config/ 안에 있는 server.xml 파일을 열면

<Host name="localhost" appBase="[webapps_path]" ... > //Tomcat_HOME]/webapps 를 기본 어플리케이션 베이스디렉토리

                                                                                     [appBase_path]/ROOT/test.jsp

<Context path="[path] "docBase="base_path">             //   localhost/test.jsp  ==> /base_path/test.jsp

</Host> 


 상대경로 이므로 [Tomcat_HOME]/webapps 를 기본 어플리케이션 베이스디렉토리가 된다.
appBase 디렉토리가 설정되면 URL 상의 기본웹루트는 [appBase]/ROOT/ 에서 부터 시작한다.
즉, http://localhost/inexjsp 를 호출하면 이것은 "[appBase]/ROOT/test.jsp" 를 출력하게 된다는 뜻이다.

만일 <Context path=" "docBase=" "> 에서 path 는 URL상의 주소가 되고 docBase 는 어플리케이션의 서버상 위치가 된다. 만일 docBase가 상대경로면 appBase 부터의 상대경로가 되며, 절대경로로 설정되면 서버의 절대경로가 된다.

<Context path="/" docBase="/web" .... />

위와 같이 설정되어 있다면, http://localhost/test.jsp 는  "/web/test.jsp" 를 출력하게 된다.

한편 server.xml 에 설정되는 <Context> 구문과는 별도로 appBase 에는 사용자가 임의의 xml 파일을 만들어 추가적인 Context 를 정의할 수 있다.
예를 들어 appBase/AAA.xml 을 다음과 같이 만들어 위치시키면

<Context path="/BBB" docBase="/web1" .... />

http://localhost/BBB/test.jsp 를 요청할경우 /web1/test.jsp 를 호출하게 된다.

 

 


5.5 버전 이후부터는 <Context> 의 설정 위치가 변경되었다.
일단 server.xml 에서 Context 설정이 분리되었으며, appBase 에 위치하던 xml 파일도 
[$CATALINA_BASE]/conf/[enginename]/[hostname]/ 로 옮겨졌다.
(이것은 context 설정을 server.xml 에서 분리함으로써 변경후에도 톰캣을 재시작할 필요가 없어 유지보수가 용이하게 하기 위함이다)

ROOT.xml 파일은 디폴트 설정파일로서 ROOT.xml 파일에 설정된 Context 구문으로 가장 기본으로 삼게 된다.
문법은 위에서 설명한 규칙과 동일하다.
(ROOT.xml 파일에 정의된 Context 의 path 는 "/" 로 설정된다)

한편, 임의로 추가적인 Context 를 추가할 수 있는데, [파일명].xml 과 같이 xml 파일을 만들어서 추가하면
톰캣은 [파일명] 을 "context path" 즉, URL 로 삼고 해당 xml 파일내에 Context 구문으로 정의된 docBase 를 어플리케이션 경로로 판단한다. (경로가 "/aaa/bbb" 와 같이 다단계일 경우는 aaa#bbb.xml 와 같이 파일명을 작성한다.)
예를들어, 다음과 같은 AAA.xml 파일을 만들어서  conf/Catalina/localhost/AAA.xml  위치로 놓게 되면,

AAA.xml 내용 :
<Context docBase="/web2" .... />

http://localhost/AAA/test.jsp 를 요청하면 톰캣은 /web2/test.jsp 파일을 호출하게 된다. (이 경우도 docBase 가 상대경로일 경우, Host 엘리먼트의 appBase 에 대한 상대경로로 설정된다)

5.5 버전에서도 아무 설정이 없을 경우, 즉 ROOT.xml 이 없을 경우, server.xml 의 <Host> 항목에 설정된 appBase 를 기본으로 삼으며 appBase 디렉토리의 ROOT 디렉토리를 context path="/" 로 판단하는 것도 이전 버전과 같다.
한편, appBase 의 서브 디렉토리들은 별도의 context 설정 없이 WebRoot 의 서브경로로 취급된다.
(단, context 가 명시적으로 설정된 경로가 우선한다)