인디노트

[펌] 톰캣 server.xml 설명 본문

개발 플랫폼 및 언어

[펌] 톰캣 server.xml 설명

인디개발자 2020. 1. 8. 08:52

[펌] http://blog.daum.net/nsh777/5494233

[펌] http://blog.daum.net/nsh777/5494233

[펌] http://blog.daum.net/nsh777/5494233

[펌] http://blog.daum.net/nsh777/5494233

 

 

▣ server.xml 파일이란?

1. 말그대로.. server에 대한 설정 파일이다.

 

▣ 디렉토리 위치?

:%CATALINA_HOME%\conf\server.xml         //CATALINA_HOME은 톰캣의 홈디렉토리!~

 

▣ 구조

톰캣을 설치한 후, 가장 기본적 형태!~ parent-children 관계이다..

 

Server는 전체 JVM을 대표하는 단 하나의 요소이다.
Server는 한개 이상의 Service 객체를 가지고 지정된 포트로 shutdown 커맨드를 listen한다.

Server는 그 자체가 Container가 아니므로 'Valves'나 'Loggers'같은 것은 정의할 수 없다.

<Server port="8005" shutdown="SHUTDOWN">

    필요한 리스너 등록!~

    <Listener className="org.apache.catalina.core.AprLifecycleListener" />

    Global JNDI resources!~
    <GlobalNamingResources>
        <Environment name="simpleValue" ... />
        <Resource name="UserDatabase" ... />
    </GlobalNamingResources>

    Service는 하나의 Container를 공유하는 한개 이상의 Connectors의 모임이다.
    일반적으로.. 위에서 호칭한 Container를 'Engine'이라 한다.
    Service태그에서 톰캣의 독립 서비스를 정의하자

    <Service name="Catalina">

        Connector는 요청을 받고 응답을 리턴하는 endpoint이다.
        각 Connector는 요청을 처리하기 위해 연관된 Container에게 요청을 넘긴다.

        <Connector port="8080" ... />
        <Connector port="8009" ... />

        Engine은 적절한 Host(virtual host)로 처리를 넘기는 entry point이다.
        <Engine name="Catalina" defaultHost="localhost">
            <Realm className="org.apache.catalina.realm.UserDatabaseRealm" .../>

            default virtual Host 정의
            <Host name="localhost" appBase="webapps">
            </Host>
        </Engine>
    </Service>
</Server>

 

 

▣ 기타 설명


1. HTTP 포트를 80으로 바꾸면 http://localhost:8080을 안 써도 된다.

즉 http://localhost 만 쓰면 된다는 말!~

<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" maxHttpHeaderSize="8192"              // 8080 -> 80
           maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
           enableLookups="false" redirectPort="8443" acceptCount="100"
           connectionTimeout="20000" disableUploadTimeout="true" />

 

2. Context ?

: Context는 특별한 Viertual Host에서 작동하는 하나의 Web Application 이다..

 

3. Web Application을 추가 하기 위해서(deploy)

Application Context를 추가해야 하는데..

위에서 설명한 <Host></Host> 사이에 <Context>를 추가하는 것이 예전 방법 이었다.(Tomcat 4.x 이하)

 

그러나!!

 

자카르타에서는 더이상 server.xml 내에 Context를 추가하는 것을 권장하지 않는다..

(그것도 강력히 비추한다 -ㅇ-..)

그러면 방법은??

 

▣ 톰캣(tomcat)에 어플리케이션을 추가하는 방법은 두가지가 있다.

하나씩 알아보도록 하자.

 

1. webapps 디렉토리 밑에 넣는 방법

장점 : 웹 어플리케이션의 폴더구조만 가지고 있다면 자동으로 웹어플리케이션이 설정된다.

단점 : 지정된 디렉토리(톰캣\webapps\'어플리케이션명')의 하위 이외에는 설정이 불가하다.

방법 :

  기본 설치된 톰캣 디렉토리에서 '톰캣\webapps\어플리케이션명' 이렇게 넣어주기만 하면..

  바로.. http://localhost/어플리케이션명 ........ 으로 접근 가능하다.

 

참고1) 웹 어플리케이션의 폴더구조

어플리케이션명\WEB-INF                 ----------> 이 디렉토리 필수!

어플리케이션명\WEB-INF\web.xml  ----------> 이 파일 필수!

 

참고2) web.xml의 최소내용

<?xml version="1.0" encoding="euc-kr"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
</web-app>

 

참고3) index.html이 있어야 되겠죠?

  web.xml에 설정한 welcome파일이 있어야 해당 context가 정상적으로 호출이 된답니다

  ----> web.xml중 <welcome-file-list>태그에 적은 거 기억나시죠?

 

참고4) 어플 추가후 톰캣서버리부팅없이 바로 접근가능하답니다 ㅎㅎ

 

2. 임의의 디렉토리에 웹어플리케이션을 위치시키고 싶을 때.

장점 : '톰캣\webapps\' 디렉토리에 구속될 필요가 없다.

방법 :

이전에 설명한.. server.xml에서 설정하는 방법도 있으나 이것은 자카르타에서 비추하는 방법이기 때문에

설명은 생략토록 한다.

 

앞으로는 xml형식의 파일로 Application Context를 저장하라고 하고 있다.

아래처럼!~

 

%CATALINA_HOME%\conf\Catalina\localhost\컨텍스트명.xml

 

기존에 존재하는 host-manager.xml, manager.xml 등의 파일을 저장해서 이름을 바꾸고

안에 내용중 docBase와 path만 바꾸면 끝!~

설정이 훨씬 쉽게 되었다!!! ㅎㅎ

 

- path : 웹어플리케이션의 경로명(http://localhost/'요기 붙을 내용')

- docBase : 웹어플리케이션이 위치한 폴더의 경로명(실제 경로)

 

<Context path="/myTest" docBase="C:\myTest"
              debug="0" privileged="true" reloadable="true">
    <Logger className="org.apache.catalina.logger.FileLogger"
                 directory="logs"  prefix="localhost_log." suffix=".txt"
                 timestamp="true"/>
</Context>

 

 

※ROOT로 만들고 싶다면 ROOT.xml로 만들면 됨.

※server.xml의 HOST 항목중 appbase 속성값과 위의 docBase가 동일하면 톰캣 콘솔에..

에러가 발생하므로 경로를 다르게 해주자!~

 


▣ Context 속성(참조 : http://www.jakartaproject.com/article/jakarta/110284482002600 )

 

 속성

설명

 backgroundProcessorDelay   이 값은 컨텍스트와 그 자식 컨테이너에서 background process method가 invoke되는 delay 시간을 나타낸다.
이 값을 양수로 설정하면 어떤 쓰레드가 분기되어 일정 시간 후에 이 쓰레드가 해당 host와 자식 컨테이너에서 background process method를 실행시킵니다
만약 설정하지 않으면 디폴트값인 -1을 가지며 음수의 값은 부모 host의 background processing 정책을 사용한다는 것입니다.
참고로 컨텍스트는 세션을 종료하거나 클래스 리로딩을 위한 모니터링등을 위해 background processing을 사용합니다.
 className  

사용할 Java 구현체 클래스의 이름. 이 클래스는 반드시 org.apache.catalina.Context 인터페이스를 구현해야 합니다. 지정하지 않으면 표준값 (아래에 정의됩니다)이 사용됩니다

 cookies  

true(디폴트)로 지정하면 클라이언트가 쿠키를 지원하는 경우 세션확인의 통신수단(session identifier communication)으로 쿠키를 사용합니다. false로 지정하면 세션확인의 통신수단으로 쿠키 사용을 하지 않고, 어플리케이션에 의한 URL 다시쓰기(URL rewriting)에만 의존한다는 의미입니다.

 crossContext  

true로 지정하면 이 어플리케이션에서 ServletContext.getContext() 호출을 통해, 이 가상호스트에서 실행중인 다른 웹어플리케이션에 대한 요청디스패쳐(request dispatcher)를 성공적으로 얻을 수 있습니다. 보안상의 이유로 false(디폴트)로 지정하면 getContext()는 언제나 null을 반환하게 됩니다.

 docBase  

이 웹어플리케이션에 대한 Document Base (Context Root로도 알려져 있습니다) 디렉토리, 또는 웹어플리케이션 아카이브 파일의 경로명(웹어플리케이션을 WAR 파일로 직접 실행하는 경우)을 나타냅니다. 이 디렉토리나 WAR 파일에에 대한 절대경로명을 지정할 수도 있고, 이 Context가 정의된 Host의 appBase 디렉토리에 대한 상대경로명을 지정할 수도 있습니다

 override  true로 설정하면 DefaultContext element를 관련된 host에서 명백하게 상속받아 사용합니다
기본값으로 Defaultcontext element가 사용됩니다
 privileged  

true로 설정하면 이 컨텍스트는 관리자서블릿(manager servlet) 같은 컨테이너 서블릿을 사용할 수 있습니다.

 path  

이 웹어플리케이션의 컨텍스트 경로(context path)를 나타내며, 각 요청 URI의 시작부분이 컨텍스트 경로와 같을 때 해당 웹어플리케이션이 그 요청을 처리하게 됩니다. 하나의 특정 Host 내의 컨텍스트 경로들은 모두 각각 유일해야 합니다. 만약 컨텍스트 경로를 빈 스트링("")으로 지정하면, 이 Context는 이 Host에 대한 디폴트 웹어플리케이션으로 정의된 것입니다. 디폴트 웹어플리케이션은 다른 Context 들에 해당되지 않는 모든 요청을 처리할 것입니다.

 reloadable  

true로 지정하면, Catalina는 /WEB-INF/classes/와 /WEB-INF/lib 안 클래스 들의 변경여부를 감시하다가, 변경이 발견되면 웹어플리케이션을 자동으로 재적재(reload)합니다. 이 기능은 개발중에는 매우 유용하지만 얼마간의 실행부하(runtime overhead)가 발생하므로, 실제 운영할 용도로 어플리케이션을 배치(deploy)할 때는 사용하지 않도록 합니다. 그러나 이미 배치가 끝난 어플리케이션이라도 Manager 웹어플리케이션을 이용하면 필요할 때 재적재 하도록 할 수 있습니다

 wrapperClass  

이 Context로 관리할 서블릿 들에 대해 사용할 org.apache.catalina.Wrapper 구현체 클래스의 Java 클래스명입니다. 지정하지 않으면 표준값이 사용됩니다

 

 

 

 

 

 

 

 

[펌] http://blog.daum.net/nsh777/5494233

[펌] http://blog.daum.net/nsh777/5494233

[펌] http://blog.daum.net/nsh777/5494233

[펌] http://blog.daum.net/nsh777/5494233

반응형
Comments