상세 컨텐츠

본문 제목

tomcat context ROOT 변경하기

IT 세상

by 이현민 (지후지율아빠) 2009. 11. 17. 16:29

본문

---------------------------
5.5 이전 버전의 경우
---------------------------
톰캣은 기본적으로 server.xml 에서 <Host> 항목의 webapp 설정을 기본으로 한다.
즉, 다음과 같은 설정에서

<Host name="localhost" appBase="webapps" ....>

이것은 상대경로 이므로 [Tomcat 설치디렉토리]/webapps 를 기본 어플리케이션 베이스디렉토리가 된다.
appBase 디렉토리가 설정되면 URL 상의 기본웹루트는 [appBase]/ROOT/ 에서 부터 시작한다.
즉, http://localhost/test.jsp 를 호출하면 이것은 "[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 이후 버전의 경우
--------------------------
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 가 명시적으로 설정된 경로가 우선한다)




















  tomcat 5.x에서 사용하는 방법입니다.

 {tomcat root}/conf/server.xml 파일의

<Host>...</Host>안에 추가하면 됩니다.

<Context path="/test" docBase="C:/tomcat/webapps/test" debug="0" reloadable="true" crossContext="true"/>

<Context path="/project" docBase="C:/tomcat/webapps/project" debug="0" reloadable="true" crossContext="true"/>

 

 

 

 

{tomcat root}/conf/Catalina/localhost 안에 설정하는 방법은 제 블로그에 작성된 내용을 가져와 작성했습니다. 

 

  
우선 기존의 톰캣버전보다 설정이 굉장히 쉬워졌어요..

톰캣설치한 폴더가 C:\Tomcat5.5 라면 이 경로가 ${catalina.home} 가 됩니다.

따로 환경변수 잡아줄 필요 없구요.. 자동으로 잡힙니다.

만들고자 하는 컨텍스트를 testContext 라고 하고 싶으면 C:\Tomcat5.5\conf\Catalina\localhost 폴더에

testContext.xml 파일을 생성하시면 됩니다. 파일의 내용은 설치하면 있던 manager.xml 파일의 내용을 복사하셔서 docBase 부분만 변경시켜 주시면 됩니다. 예제로 제가 설정했던 파일은 다음과 같습니다.

 

(1) 손권남님의 스트럿츠 가이드의 web 폴더를 context 로 설정한 겁니다

 

(2) context 명 : web

 

(3) context 의 실제경로 : C:\Tomcat5.5\StrutsGuide1\web

 

(4) web.xml 파일의 내용

 

docBase="${catalina.home}/StrutsGuide1/web"
         privileged="true" antiResourceLocking="false" antiJARLocking="false">

 


(5) web.xml 파일을 C:\Tomcat5.5\conf\Catalina\localhost 에 복사

 

(6) 톰캣 시작후 http://localhost:8080/web/Welcome.do 입력하면 해당 context가 설정된것을 확인할 수 있음

 

출처 : http://www.okjsp.pe.kr/78488 sangtojin님




prject 이름의 xml 파일을 catalina_home의 conf폴더 아래에 있는 catalina\localhost\폴더에 생성한다.
예)
프로젝트명 abc, 파일명 abc.xml
디스크의 프로젝트 폴더경로  c:\choongang\web
컨텍스트경로 abc //임의의 URL Context

다음은 abc.xml의 내용임
======================== abc.xml ===========================
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="디스크의 폴더 경로" path="/컨텍스트 경로">
  <Realm className="org.apache.catalina.realm.JDBCRealm"
   connectionPassword="데이타베이스 접속 패스워드"
   userCredCol="유저 테이블의 PASSWORD 컬럼"
   userTable="유저 테이블"
   debug="0"
   validate="true"
   driverName="com.mysql.jdbc.Driver"
   roleNameCol="유저 권한 테이블의 권한컬럼"
   digest="MD5"
   connectionName="root"
   connectionURL="jdbc:mysql://localhost:3306/database"
   userNameCol="유저 권환 테이블과 유저테이블의 유저 번호 컬럼"
   userRoleTable="유저권한테이블"
   />

<Resource
      auth="Container"
      name="jdbc/MySQLDataSource"
      type="javax.sql.DataSource"
   driverClassName="com.mysql.jdbc.Driver"
   password="데이타베이스접속패스워드"
   maxIdle="2"
   maxWait="5000"
   username="데이타베이스접속유저"
   url="jdbc:mysql://localhost:3306/database"
   maxActive="4"/>
</Context>

======================== server.xml===========================
아래와 같이 Context를 디폴트로 사용하지도 않고, 따로 관리 사용하지도 않는 경우 server.xml안에 context 설정을 집어넣을 수 있다.

<?xml version="1.0" encoding="UTF-8"?>
<Server>
  <Listener className="org.apache.catalina.core.AprLifecycleListener"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
  <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
  <GlobalNamingResources>
    <Environment
      name="simpleValue"
      type="java.lang.Integer"
      value="30"/>
    <Resource
      auth="Container"
      name="UserTransaction"
      type="javax.transaction.UserTransaction"/>

    <Resource
      auth="Container"
      description="User database that can be updated and saved"
      name="UserDatabase"
      type="org.apache.catalina.UserDatabase"
      pathname="conf/tomcat-users.xml"
      factory="org.apache.catalina.users.MemoryUserDatabaseFactory"/>
 
   </GlobalNamingResources>
  <Service
      name="Catalina">
    <Connector
        port="8080"
        redirectPort="8443"
        minSpareThreads="25"
        connectionTimeout="20000"
        uRIEncoding="UTF-8"
        maxSpareThreads="75"
        maxThreads="150">
    </Connector>
    <Connector
        port="8009"
        redirectPort="8443"
        protocol="AJP/1.3">
    </Connector>
    <Engine
        defaultHost="localhost"
        name="Catalina">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
 
      <Host  appBase="webapps"   name="localhost">
  
 <Context docBase="디스크의 폴더 경로" path="/컨텍스트 경로">
  <Realm className="org.apache.catalina.realm.JDBCRealm"
   connectionPassword="데이타베이스 접속 패스워드"
   userCredCol="유저 테이블의 PASSWORD 컬럼"
   userTable="유저 테이블"
   debug="0"
   validate="true"
   driverName="com.mysql.jdbc.Driver"
   roleNameCol="유저 권한 테이블의 권한컬럼"
   digest="MD5"
   connectionName="root"
   connectionURL="jdbc:mysql://localhost:3306/database"
   userNameCol="유저 권환 테이블과 유저테이블의 유저 번호 컬럼"
   userRoleTable="유저권한테이블"
   />

<Resource
      auth="Container"
      name="jdbc/MySQLDataSource"
      type="javax.sql.DataSource"
   driverClassName="com.mysql.jdbc.Driver"
   password="데이타베이스접속패스워드"
   maxIdle="2"
   maxWait="5000"
   username="데이타베이스접속유저"
   url="jdbc:mysql://localhost:3306/database"
   maxActive="4"/>
</Context>
 
      </Host>
    </Engine>
  </Service>
</Server>

 

======================== context.xml===========================

이 context 파일은 conf 폴더에 있는 파일로써 기본 설정을 사용할 때 사용한다.

<?xml version="1.0" encoding="UTF-8"?>
<Context>

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
 
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
 <Resource
      auth="Container"
      name="jdbc/MySQLDataSource"
      type="javax.sql.DataSource"
   driverClassName="com.mysql.jdbc.Driver"
   password="1234"
   maxIdle="2"
   maxWait="5000"
   username="root"
   url="jdbc:mysql://localhost:3306/database"
   maxActive="4"/>
</Context>

 

 

반응형

'IT 세상' 카테고리의 다른 글

EUC-KR로 표현할 수 없는 한글 처리  (0) 2009.12.09
결함많다던 YF 후배차 시승기  (0) 2009.12.04
nohup Command  (0) 2009.11.04
[펌]Euc-kr 사이트를 utf-8 로 변경하는방법  (0) 2009.09.15
OS bit 확인  (0) 2009.08.14

관련글 더보기