<?xml version="1.0" encoding="UTF-8"?>
<Server port="${tomcat.shutdown.port}" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="${tomcat.startup.port}" protocol="HTTP/1.1" address="${tomcat.server.ipaddr}"
connectionTimeout="20000" address="${tomcat.server.ipaddr}" redirectPort="${tomcat.ssl.port}" />
<Connector port="${tomcat.ajp.port}" protocol="AJP/1.3" redirectPort="${tomcat.ssl.port}" address="${tomcat.server.ipaddr}" secretRequired="false" />
<Engine name="Catalina" defaultHost="${tomcat.server.name}" jvmRoute="${tomcat.jvmRoute}">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="${tomcat.instance.dir}"
unpackWARs="true" autoDeploy="false" deployOnStartup="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="${tomcat.base.log}/access"
prefix="access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b %D" />
</Host>
</Engine>
</Service>
</Server>
+) 
- 톰캣 실행시 필요한 정보 정의한 파일.
- 톰캣은 모든 설정 정보를 XML로 저장한 후, 실행 시 정보 읽어와서 설정대로 실행함.
- 만들어놓은 웹 애플리케이션도 미리 태그 이용해서 server.xml 에 등록해둬야 톰캣이 설정한대로 웹 애플리케이션 실행함
- 포트정보, DB 접속정보, 웹 리소스(ex.jsp,image파일)참조경로, 이벤트리스너, etc..
<Server>
<Listener/>
<GlobalNamingResources>
<Resource/>
</GlobalNamingResources>
<Service>
<Connector/>
<Engine>
<Realm/>
<Host/>
</Engine>
</Service>
</Server>
<!--예시-->
<Server port="6005" shutdown="SHUTDOWN">
<!--Apache-Tomcat 연동-->
<Server port="${tomcat.shutdown.port}" shutdown="SHUTDOWN">
| 속성 | 내용 |
|---|---|
| port | 톰캣전용 전용 포트를 지정 |
| shutdown | 종료 명령 |
톰캣의 이벤트 리스너 설정
<Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
<Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
-->
<!-- APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
JNDI정보, 즉 JDBC 와 같은 java-DB 연결정보를 정의
<GlobalNamingResources>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
<!--
<Resource
name="jdbc/TestJNDI"
type="javax.sql.DataSource"
username="user"
password="new1234!"
maxWaitMillis="30000"
validationQuery="select 1"
driverClassName="com.edb.Driver"
url="jdbc:edb://0.0.0.0:5444/edb"/>
-->
<!--
<Resource
name="jdbc/TestJNDI"
type="javax.sql.DataSource"
username="user"
password="new1234!"
maxWaitMillis="30000"
validationQuery="select 1"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://0.0.0.0:5432/pgdb"/>
-->
</GlobalNamingResources>
클라이언트의 요청 처리정보를 담는다. Connector 와 Engine 으로 구성된다. 보통 Catalina 라는 디폴트 값을 사용한다.
<Service name="Catalina">
참고글 : 카탈리나(Catalina)란?
- 톰캣은 여러개의 기능(부품)으로 구성되어 있는데, 그 중 Catalina가 핵심 구성요소임
- 톰캣의 서블릿(Servleret) 스펙 실질적인 구동을 제공하고
- 톰캣 서버를 가동시킬 경우, 카탈리나를 구동한 것이라 생각하면 된다고 함.
클라이언트의 요청(request)을 수신하고 응답(response)을 전송할 인터페이스 정보
<Connector URIEncoding="UTF-8" acceptCount="100" connectionTimeout="20000"
disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192"
maxThreads="1024" minSpareThreads="25" port="6001" redirectPort="6003"
maxPostSize="-1" compression="on" compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata" useSendfile="false">
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
</Connector>
클라이언트가 서버에 요청을 보내면 엔진에서 확인하게 된다. 엔진은 request 에 포함된 HTTP 헤더를 분석해 적절한 Host로 전달해준다.
<Engine defaultHost="localhost" name="Catalina">
| 속성 | 내용 |
|---|---|
| className | org.apache.catalina.Engine 를 구현하는 클래스 |
| defaultHost | 기본으로 설정할 host. 4.2.2. 의 name 속성과 일치해야 함 |
일종의 database 영역이다. DB 사용자들을 확인하고, 각 사용자의 역할과 권한에 맞는 정보를 포함하고 있다.
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
Engine 이 전달해준 클라이언트 요청을 처리할 정보를 포함한다.
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
클라이언트의 요청을 처리하는 과정 중에 특정 기능을 수행하도록 하는 특정 요소. 파이프라인 사이에 밸브를 끼울 수 있는 것처럼, 특정 기능을 추가할 목적으로 사용한다. 특히 로그 파일을 남길 목적으로 자주 사용한다.
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
pattern="%h %l %u %t "%r" %s %b"
prefix="localhost_access_log"
suffix=".txt"/>
| 속성 | 내용 |
|---|---|
| className | 디폴트 값. org.apache.catalina.valves.AccessLogValve |
| directory | 로그가 남겨질 디렉토리 |
| pattern | 로그를 남기기 위해 판별할 패턴 |
| prefix | 로그 파일에 추가할 접두사 |
| suffix | 로그 파일에 추가할 접미사 |