'Tomcat'에 해당되는 글 6건

  1. 2008/09/30 톰캣(Tomcat) 5.x GET 방식 한글 인코딩에 문제가 있다니..
  2. 2008/06/08 앤트(Ant)에서 톰캣에 웹 애플리케이션을 디플로이하는 방법..
  3. 2008/06/08 앤트(Ant)에서 톰캣을 실행/중지해 보아요. (4)
  4. 2008/05/27 우분투 8.04에서 톰캣을 설치해 보아요.
  5. 2008/05/25 톰캣(Tomcat)의 컨텍스트(Context) 파일로 웹 어플리케이션을 추가해 보아요.
  6. 2008/05/25 이클립스 서버 플러그인에서 톰캣 5.5가 로그 파일을 남기도록 해봐요.
2008/09/30 21:00

톰캣(Tomcat) 5.x GET 방식 한글 인코딩에 문제가 있다니..

여태껏 잘 되는 줄 알았던 한글 처리가 POST 방식일 때만 잘 되었던 거였어요..
우연히 오늘 GET 방식으로 보내다가 한글이 깨지는 현상을 발견하고 이유를 찾다가 알게 되었네요..

다른 블로그에 관련 내용이 많이 있어서 링크만 걸어둡니다.
다행히 해결책도 함께 다루고 있네요

아무튼 쇼크~! 충격입니다. @_@


Trackback 0 Comment 0
2008/06/08 02:25

앤트(Ant)에서 톰캣에 웹 애플리케이션을 디플로이하는 방법..

톰캣에 웹 애플리케이션을 디플로이하는 방법에는 두 가지가 있어요.
  • ${톰캣_설치_경로}[각주:1]/webapps 디렉토리에 war 파일을 추가한다.
  • ${톰캣_설치_경로}/conf/Catalina/localhost 디렉토리에 context 파일을 추가한다.
war 파일은 일반적인 웹 애플리케이션 파일이구요.
context 파일 내용은 대략 다음과 같아요.

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/${웹애플리케이션_이름}" docBase="${웹애플리케이션_디렉토리}" reloadable="true">
</Context>

첫번째 방법이 보통 많이 쓰이는 방법이죠. 저는 두번째 방법을 더 선호합니다만..



그런데 사실 한 가지 방법이 더 있습니다.

톰캣의 manager 어플리케이션을 이용하는 것입니다. ^-^/

톰캣의 manager 어플리케이션을 사용하려면 다음을 확인합니다.

1.톰캣에 manager 어플리케이션이 설치되어 있는지 확인한다.
   (5.0, 5.5, 6.0 버전 모두 기본적으로 설치되어 있네요..)

2. manager 권한이 있는 사용자를 등록한다.
    ${톰캣_설치_경로}\conf\tomcat-users.xml 파일에 다음 내용을 추가합니다.

<role rolename="manager"/>
<user username="${사용자_아이디}" password="${사용자_암호}" roles="manager"/>

3. 서버를 띄우고 http://localhost:8080/manager/html 로 접속합니다.
    (등록한 사용자의 아이디/암호를 입력합니다.)

다음과 같은 화면에서 Deploy를 실행하면 됩니다.
Context 파일 내용을 설정하거나 war 파일을 업로드해서 디플로이할 수 있습니다.


그리고 매니저에서는 다른 웹 애플리케이션을 실행/중지/리로드/언디플로이할 수 있어요~



이제부터 본론으로 들어갑니다.

제가 말씀드릴 앤트로 톰캣에 웹 애플리케이션을 디플로이하는 방법은 내부적으로 톰캣의 manager 애플리케이션을 이용합니다. 그러므로 먼저 톰캣의 manager 애플리케이션이 설정이 되어있어야 해요~!

빌드 파일에서 사용할 프로퍼티 파일은 다음과 같습니다. (sample 어플리케이션을 배포한다고 가정합니다.)

# catalina home directory
catalina.home=C:\Tomcat[각주:2]
catalina.ant.jar=${catalina.home}/server/lib/catalina-ant.jar
catalina.tasks.file=catalina.tasks[각주:3]

# catalina manager configurations
catalina.manager.url=http://localhost:8080/manager
catalina.manager.user.name=test[각주:4]
catalina.manager.user.password=test

# application configurations
application.path=/sample[각주:5]
application.context=sample.xml[각주:6]

그리고 태스크 정의 파일이 필요합니다. 다음과 같은 내용으로 catalina.tasks 라는 파일을 만듭니다.

# catalina tasks properties
deploy=org.apache.catalina.ant.DeployTask
undeploy=org.apache.catalina.ant.UndeployTask
start=org.apache.catalina.ant.StartTask
reload=org.apache.catalina.ant.ReloadTask
stop=org.apache.catalina.ant.StopTask
sessions=org.apache.catalina.ant.SessionsTask
list=org.apache.catalina.ant.ListTask
serverinfo=org.apache.catalina.ant.ServerinfoTask
roles=org.apache.catalina.ant.RolesTask
resources=org.apache.catalina.ant.ResourcesTask

어플리케이션 컨텍스트 설정 파일이 필요합니다. 다음과 같은 내용으로 sample.xml 이라는 파일을 만듭니다.

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/sample" docBase="C:\Sample[각주:7]" debug="0" privileged="true" reloadable="true">
    <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost.sample." suffix=".txt" timestamp="true" />
</Context>

마지막으로 빌드 파일 내용은 다음과 같습니다.

먼저 태스크 정의 파일을 설정해야 합니다.

<taskdef file="catalina.tasks" classpath="${catalina.ant.jar}" />

그러면 다음과 같은 태스크들을 사용할 수 있어요.

<target name="catalina.deploy" description="Deploy web application">
    <deploy url="${catalina.manager.url}" username="${catalina.manager.user.name}" password="${catalina.manager.user.password}" path="${application.path}" config="${application.context}" update="true" />
</target>

<target name="catalina.undeploy" description="Undeploy web application">
    <undeploy url="${catalina.manager.url}" username="${catalina.manager.user.name}" password="${catalina.manager.user.password}" path="${application.path}" />
</target>

<target name="catalina.start" description="Start web application">
    <start url="${catalina.manager.url}" username="${catalina.manager.user.name}" password="${catalina.manager.user.password}" path="${application.path}" />
</target>

<target name="catalina.reload" description="Reload web application">
    <reload url="${catalina.manager.url}" username="${catalina.manager.user.name}" password="${catalina.manager.user.password}" path="${application.path}" />
</target>

<target name="catalina.stop" description="Stop web application">
    <stop url="${catalina.manager.url}" username="${catalina.manager.user.name}" password="${catalina.manager.user.password}" path="${application.path}" />
</target>

<target name="catalina.sessions" description="View server information">
    <sessions url="${catalina.manager.url}" username="${catalina.manager.user.name}" password="${catalina.manager.user.password}" path="${application.path}" />
</target>

<target name="catalina.list" description="List web applications">
    <list url="${catalina.manager.url}" username="${catalina.manager.user.name}" password="${catalina.manager.user.password}" />
</target>

<target name="catalina.serverinfo" description="View server information">
    <serverinfo url="${catalina.manager.url}" username="${catalina.manager.user.name}" password="${catalina.manager.user.password}" />
</target>

<target name="catalina.roles" description="View server information">
    <roles url="${catalina.manager.url}" username="${catalina.manager.user.name}" password="${catalina.manager.user.password}" />
</target>

<target name="catalina.resources" description="View server information">
    <resources url="${catalina.manager.url}" username="${catalina.manager.user.name}" password="${catalina.manager.user.password}" />
</target>

디플로이 태스크를 자세히 살펴보죠.

<deploy url="${catalina.manager.url}" username="${catalina.manager.user.name}" password="${catalina.manager.user.password}" path="${application.path}" config="${application.context}" update="true" />

config 속성에 애플리케이션의 컨텍스트 설정 파일의 위치를 입력하는데요..
config 속성 대신에 war 속성을 써서 애플리케이션 war 파일의 위치를 입력할 수도 있어요.
두 속성은 반드시 어느 하나만 써야해요. 안 그러면 에러날 걸~?

톰캣의 앤트태스크를 이용하면 애플리케이션을 디플로이하는 것 뿐만 아니라 웹 어플리케이션의 목록을 보는 것, 애플리케이션을 실행하거나 중지하는 것 등등의 작업을 앤트로 할 수가 있어요. 이게 다 톰캣 개발자들이 앤트 태스크를 쓰기 좋게 만들어둔 덕분이죠. 감사감사 ^^*

보면 볼수록 앤트는 멋진 것 같아요.

환경:
Tomcat 5.0 or 5.5
Ant 1.7.0

  1. ${무언가} 는 변수를 뜻해요! [본문으로]
  2. 톰캣의 설치 경로에요. [본문으로]
  3. 태스크 정의 파일 이름 [본문으로]
  4. manager 권한이 있는 사용자 이름과 암호 [본문으로]
  5. 샘플 어플리케이션 경로 [본문으로]
  6. sample 어플리케이션 컨텍스트 파일 이름 [본문으로]
  7. 샘플 어플리케이션 디플로이 경로 [본문으로]
Trackback 0 Comment 0
2008/06/08 01:28

앤트(Ant)에서 톰캣을 실행/중지해 보아요.

앤트에서 톰캣을 실행하거나 중지해 보아요.

방법은 간단해요. <java /> 태스크로 org.apache.catalina.startup.Bootstrap 클래스를 실행하면 돼요.
다만 프로퍼티 옵션이나 환경 변수 등의 실행 옵션을 잘 주어야 해요.

다음과 같이 해 보아요.

build.properties
java_home=C:/Program Files/Java/jdk1.5.0_14
catalina.home=C:/Programz/Tomcat/5.5
catalina.base=C:/Project/Tomcat/Configuration


java.home 이라는 프로퍼티가 이미 존재(자동으로 생성)하기 때문에, java_home 이라는 이름으로 만들었어요.

build.xml
<project name="history" default="default" basedir=".">

	<property file="build.properties" />

	<target name="default">
		<echo message="이것은 'Ant Tomcat Container'의 빌드 파일이에요." />
		<echo message="앤트(ant) 1.7.0 버전에 최적화되어 있어요." />
		<echo message="사용법:" />
		<echo message="ant tomcat.start" />
		<echo message="ant tomcat.stop" />
		<echo message="참고:" />
		<echo message="java.home = ${java.home}" />
		<echo message="java_home = ${java_home}" />
		<echo message="catalina.home = ${catalina.home}" />
		<echo message="catalina.base = ${catalina.base}" />
	</target>

	<target name="tomcat.start">
		<java classname="org.apache.catalina.startup.Bootstrap" jvm="${java_home}/bin/java" fork="true" spawn="true">
			<classpath>
				<fileset dir="${catalina.home}/bin">
					<include name="bootstrap.jar" />
				</fileset>
			</classpath>
			<arg value="start" />
			<sysproperty key="catalina.home" value="${catalina.home}" />
			<sysproperty key="java.endorsed.dirs" value="${catalina.home}/common/endorsed" />
			<sysproperty key="java.util.logging.manager" value="org.apache.juli.ClassLoaderLogManager" />
			<sysproperty key="java.util.logging.config.file" value="${catalina.home}/conf/logging.properties" />
			<sysproperty key="catalina.base" value="${catalina.base}" />
			<sysproperty key="java.io.tmpdir" value="${catalina.base}/temp" />
		</java>
	</target>

	<target name="tomcat.stop">
		<java classname="org.apache.catalina.startup.Bootstrap" jvm="${java_home}/bin/java" fork="true" spawn="true">
			<classpath>
				<fileset dir="${catalina.home}/bin">
					<include name="bootstrap.jar" />
				</fileset>
			</classpath>
			<arg value="stop" />
			<sysproperty key="catalina.base" value="${catalina.home}" />
			<sysproperty key="catalina.home" value="${catalina.home}" />
			<sysproperty key="java.endorsed.dirs" value="${catalina.home}/common/endorsed" />
			<sysproperty key="java.util.logging.manager" value="org.apache.juli.ClassLoaderLogManager" />
			<sysproperty key="java.util.logging.config.file" value="${catalina.home}/conf/logging.properties" />
			<sysproperty key="java.io.tmpdir" value="${catalina.home}/temp" />
		</java>
	</target>

</project>


톰캣은 JRE가 아니라 JDK로 실행시켜야 하기 때문에 <java /> 태스크의 jvm 속성으로 JDK의 java를 지정했어요.
그리고 새로운 JVM에서 실행이 되도록 fork 속성을, 앤트의 JVM이 종료되더라도 톰캣의 JVM이 계속 남아 있게 하기 위해서 spawn 속성을 true로 지정했어요.

환경:
    Ant 1.7.0
    Tomcat 5.0 or 5.5

Trackback 1 Comment 4
2008/05/27 00:41

우분투 8.04에서 톰캣을 설치해 보아요.

자바부터 설치해야죠.

오픈 소스 기반인 OpenJDK를 한번 써보아요.
JDK 6.0 버전이기는 한데.. 나중에 잘 안 되면 sun 자바로 바꾸면 되죠. ^^

sudo apt-get install openjdk-6-jdk

오오.. 앤트(ant)까지 깔리는군요. +_+

톰캣 5.5를 설치해 보아요.

JAVA_HOME 환경변수가 필요하네요.

export JAVA_HOME=/usr/lib/jvm/java-6-openjdk/

다음 패키지들을 설치하면 돼요.

sudo apt-get install tomcat5.5 tomcat5.5-admin tomcat5.5-webapps

만약 다음과 같은 메시지가 중간에 나오면서 에러가 나면..

* no JDK found - please set JAVA_HOME

이렇게 해야 해요.

sudo -E apt-get install tomcat5.5 tomcat5.5-admin tomcat5.5-webapps

-E 옵션을 사용하면 현재 쉘의 환경변수를 넘겨주네요.

톰캣이 시작될 때에도 JAVA_HOME 환경변수가 필요하므로, 실행스크립트를 수정해야 해요.

vi /etc/init.d/tomcat5.5

앞부분에 다음 라인을 추가하면 돼요.

JAVA_HOME=/usr/lib/jvm/java-6-openjdk/

아파치 2.2와 톰캣을 연동해 보자.

우선 아파치 2.2의 mod_jk 모듈부터 설치해야 해요.

sudo apt-get install libapache2-mod-jk

mod_jk의 설정 파일을 만들어 주어야 해요.

sudo vi /etc/apache2/mods-available/jk.conf

<ifmodule jk_module>
	JkWorkersFile /etc/apache2/jk/workers.properties
	JkShmFile /var/log/apache2/jk.shm
	JkLogFile /var/log/apache2/jk.log
	JkLogLevel info
	JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
	JkRequestLogFormat "%w %V %T"
</ifmodule>


mod_jk의 worker 설정 파일도 만들어 주어요.

sudo mkdir /etc/apache2/jk
sudo vi /etc/apache2/jk/workers.properties

다음 내용을 넣어 주어요.

worker.list=worker1

worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300

mod_jk 설정 파일과 worker의 이름이 같아야 해요.

mod_jk 모듈을 사용 가능하게 해 주어야 해요.

sudo a2enmod jk

혹시 이미 mod_jk 모듈이 사용 가능한 상태라면 다음과 같이 해줘야 해요.

sudo a2dismod jk
sudo a2enmod jk

아파치 설정도 수정해야겠죠.

sudo vi /etc/apache2/sites-available/ssl

/etc/apache2/sites-available/ssl은 기존에 존재하지 않는 파일이에요.
저는 모든 접속을 https://로 접근하게 하려고 ssl 사이트를 따로 만들어 주었어요.
아파치 설정에 의문점이 있다면 "우분투 8.04에서 아파치 2.2를 설치해 보아요."를 참고하세요.

다음 내용을 적당한 곳에 추가해 주어요.

<ifmodule jk_module>
	DocumentRoot /usr/share/tomcat5.5-webapps/ROOT/
	
	<directory /usr/share/tomcat5.5-webapps/root>
		AllowOverride None
		Order allow,deny
		allow from all
	</directory>
	
	JkMount / worker1
	JkMount /index.jsp worker1
	JkMount /manager/* worker1
	JkUnMount /*.gif worker1
	JkUnMount /*.jpg worker1
	JkUnMount /*.png worker1
	JkUnMount /*.xml worker1
	JkUnMount /*.xsd worker1
	JkUnMount /*.xsl worker1
	
	Alias /manager "/usr/share/tomcat5.5/server/webapps/manager"
	Alias /tomcat-docs "/usr/share/tomcat5.5-webapps/tomcat-docs"
	
	<directory /usr/share/tomcat5.5/server/webapps/manager>
		AllowOverride None
		Order allow,deny
		Allow from all
	</directory>
	
	<directory /usr/share/tomcat5.5-webapps/tomcat-docs>
		AllowOverride None
		Order allow,deny
		Allow from all
	</directory>
</ifmodule>


DocumentRoot가 이미 선언되어 있으면 그 뒤에 붙여넣어야 제대로 동작하겠죠?

그리고 ROOT 웹 어플리케이션을 연결해 주기위해 "/""/index.jsp" 에 대해서도 설정해 주었는데요.. ROOT 웹 어플리케이션의 내용이 바뀌게 되면 바꿔주어야 할 것 같아요. 임시방편일 뿐이죠.

결국 왠만하면 / 디렉토리는 톰캣으로 넘기지 않는 것이 상책인 것 같아요.

톰캣과 아파치를 재시작해 주면 끝이에요. ^^

sudo /etc/init.d/tomcat5.5 restart
sudo apache2ctl restart

아직 아파치와 mod_jk에 대하여 자세하게 알지 못해서 미흡하네요.
앞으로 천천히 내용을 보강해 나가야 겠어요.

환경:
    Ubuntu 8.04 Hardy Heron Server Edition - x86


Trackback 0 Comment 0
2008/05/25 18:32

톰캣(Tomcat)의 컨텍스트(Context) 파일로 웹 어플리케이션을 추가해 보아요.

${CATALINA_HOME}/conf/Catalina/localhost 에 다음과 같은 내용의 XML 파일을 추가하면 웹 어플리케이션이 설치가 돼요.

<context path="/WEB_APP_PATH" docbase="WEB_APP_DIRECTORY" debug="0" privileged="true" reloadable="true" workdir="WORK_DIRECTORY">
	<logger classname="org.apache.catalina.logger.FileLogger" prefix="LOG_FILE_PREFIX" suffix="LOG_FILE_SUFFIX" timestamp="true" />
</context>


realodable : WEB-INF 내용이 바뀌었을 때 자동으로 reload 하는 옵션
workDir : jsp 등의 파일이 컴파일되는 작업 디렉토리 지정

예를 들면, 다음과 같이 할 수 있어요.

<context path="/test" docbase="D:\Project\Test\Deploy" debug="0" privileged="true" reloadable="true" workdir="D:\Project\Test\Work">
	<logger classname="org.apache.catalina.logger.FileLogger" prefix="localhost.test." suffix=".log" timestamp="true" />
</context>


환경:
    Apache Tomcat 5.0

Trackback 0 Comment 0
2008/05/25 10:55

이클립스 서버 플러그인에서 톰캣 5.5가 로그 파일을 남기도록 해봐요.

이클립스 서버 플러그인으로 톰캣 5.5를 띄우면, 로그 파일을 남기지 않네요.
톰캣 5.0과 5.5의 톰캣 시작 방식이 달라서 생기는 문제 같은데요..

이것을 해결하려면 다음과 같이 하면 돼요.

이클립스 메뉴에서 Run > Open Run Dialog를 선택하세요.
톰캣 설정을 선택하시구요..

다음과 같이 Arguments 탭의 VM arguments에 다음 내용을 추가해 주어요.

-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file={톰캣_설치_경로}\conf\logging.properties

다음과 같이 하면 되겠죠?

사용자 삽입 이미지

환경:
    Eclipse Europa Fall 2 (Eclipse 3.3.1.1)
    Wep Standard Tools (WST) Project 2.0.1

Trackback 1 Comment 0