톰캣 설정파일

image

server.xml

  • 메인 설정 파일
  • Service, Connector, Host 정보 설정

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" 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" />
  <Resource name="jdbc/MyDB"
	global="jdbc/MyDB"
	auth="Container"
	type="javax.sql.DataSource"
	driverClassName="com.mysql.jdbc.Driver"
	url="jdbc:mysql://localhost:3306/UserDB"
	username="user1"
	password="pass1"        
	maxActive="100"
	maxIdle="20"
	minIdle="5"
	maxWait="10000"
	validationQuery="select 1 from dual"
	/>
</GlobalNamingResources>

<Service name="Catalina">
  <Connector port="8080" protocol="HTTP/1.1"
			connectionTimeout="20000"
			redirectPort="8443" />
  <Engine name="Catalina" defaultHost="localhost">
	<Realm className="org.apache.catalina.realm.LockOutRealm">
	  <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
			resourceName="UserDatabase"/>
	</Realm>
	<Host name="localhost"  appBase="webapps"
		  unpackWARs="true" autoDeploy="true">
	  <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
			prefix="localhost_access_log" suffix=".txt"
			pattern="%h %l %u %t &quot;%r&quot; %s %b" />
	</Host>
  </Engine>
</Service>
</Server>

  - Server, Resoure, Connector, Host를 주의깊게 보도록 하자.\

컴포넌트 별 설명

  • Server : server.xml의 최상위 컴포넌트
  • Listener : Listener 모듈 등록
  • GlobalNamingResources : global JNDI 리소스들을 정의
  • Resource: global JNDI 리소스
  • Service: Connectors와 Engine 을 정의하는 프로퍼티
  • Connector: Listening Server 정보 설정, 2개 포트에서 요청을 처리하겠다면 2개도 등록 가능
  • Engine: DB Access 처리 라이브러리와 host 정보를 처리하는 컴포넌트
  • Realm: 사용자에 할당된 데이터베이스 관리 및 컨테이너 관리 보안 구현, 사용할 Realm 클래스들 명시
  • Host: 가상의 Host를 정의
  • Value: Catalina 컨테이너에 대한 요청 처리 파이프라인에 삽입될 구성요소

Server

<Server port="8005" shutdown="SHUTDOWN">
  <Listener .../>
  ...

  <GlobalNamingResources>
	...
  </GlobalNamingResources>

  <Service>
	...
  </Service>
</Server>
  • port : TCP/IP port
  • shutdown : Tomcat 종료를 위한 Command String

Listener

<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" />
  • VersionLoggerListener : Tomcat 기동시, 버전 정보를 기록하는 Listener, Server컴포넌트의 첫줄에 위치해야한다.
  • AprLifecycleListener : APR을 초기화, 파괴하는 Listener
  • JreMemoryLeakPreventionListener : Java 런타임 환경의 메모리 누수, 파일lock 등에 대한 해결방법 제공 Listener
  • GlobalResourcesLifecycleListener : JNDI 자원과 연관된 MBean들을 인스턴스화하는 Listener
  • ThreadLocalLeakPreventionListener : 메모리 누구로 컨텍스트가 중지될 때, Executor 풀에서 스레드 갱신을 트리거하는 Listener

GlobalNamingResources

```xml  

<Resource name="jdbc/MyDB" global="jdbc/MyDB" .../>
- <span style="color:#89ddff">Resource</span> : Tomcat/lib 경로에 dbms에 맞는 jdbc 드라이버가 존재할 경우, 위와같이 DB정보를 명시하여 web.xml 또는 context.xml 에서 불러올 수 있다.
  
```xml
//web.xml
<resource-ref>
  <description>Employees Database for HR Applications</description>
  <res-ref-name>jdbc/EmployeeDB</res-ref-name>
  <res-ref-type>javax.sql.DataSource</res-ref-type>
  <res-auth>Container</res-auth>
</resource-ref>\

Resource

<Resource name="jdbc/MyDB"
  global="jdbc/MyDB"
  auth="Container"
  type="javax.sql.DataSource"
  driverClassName="com.mysql.jdbc.Driver"
  url="jdbc:mysql://localhost:3306/UserDB"
  username="user1"
  password="pass1"        
  maxActive="100"
  maxIdle="20"
  minIdle="5"
  maxWait="10000"
  validationQuery="select 1 from dual"
  />
  • Resource : Tomcat/lib 경로에 dbms에 맞는 jdbc 드라이버가 존재할 경우, 위와같이 DB정보를 명시하여 web.xml 또는 context.xml 에서 불러올 수 있다.
  • auth : Application or Container 값을 갖는다.
  • name : 리소스를 불러올 때 사용할 식별자
  • type : 리소스 종류
  • description : 리소스에 대한 설명
  • url, username, password, maxActive, maxIdle, minIdle, maxWait : DB 관련 정보
  • validationQuery : DB 테스트 sql

Service

<Service name="Catalina">
  <Connector>
  ...
  </Connector>
  <Engine>
  ...
  </Engine>
</Service>
  • name : 기본값은 Catalina, HTTP/AJP 엔진 선택자

Connector

<Connector port="8080" protocol="HTTP/1.1"
		   connectionTimeout="20000"
		   redirectPort="8443" />
  • port : TCP 수신 포트
  • protocol : 통신 프로토콜
  • connectionTimeout : Connnector timeout millsec
  • redirectPort : ssl 요청에 대한 re-direct 포트

Engine

<Engine name="Catalina" defaultHost="localhost">
  <Realm className="org.apache.catalina.realm.LockOutRealm">
	<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
		   resourceName="UserDatabase"/>
  </Realm>
  <Host name="localhost"  appBase="webapps"
		unpackWARs="true" autoDeploy="true">
	<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
		   prefix="localhost_access_log" suffix=".txt"
		   pattern="%h %l %u %t &quot;%r&quot; %s %b" />
  </Host>
</Engine>
  • name : 로깅시 표기될 Engine 의 고유한 논리명
  • defaultHost : 기본 Host명, Host컴포넌트의 name과 일치해야한다.

Realm

<Realm className="org.apache.catalina.realm.LockOutRealm">
  <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
		 resourceName="UserDatabase"/>
</Realm>
  • className : 사용할 Realm 클래스명
  • resourceName : 사용할 Resource 명

Host

<Host name="localhost"  appBase="webapps"
	  unpackWARs="true" autoDeploy="true">
  <Valve .../>
</Host>
  • name : host명
  • appBase : webapps 경로
  • unpackWARs : WAR 파일을 압축해제할 것인지
  • autoDeploy : Tomcat이 실행중인동안 주기적으로 웹 프로그램 업데이트 내용 확인할지 여부, appBase 경로의 업데이트 내역을 확인한다.

Value

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
	   prefix="localhost_access_log" suffix=".txt"
	   pattern="%h %l %u %t &quot;%r&quot; %s %b" />
  • className : 사용할 java 클래스명
  • directory : 로그파일이 생성될 디렉토리 경로
  • prefix : 로그파일 prefix
  • suffix : 로그파일 suffix
  • pattern : 로그 내용의 시간 표기 패턴

연결문서

댓글남기기