톰캣 가이드를 시작하기에 앞서

이 문서는 캑터스 1.4 이상과 톰캣 4.0 이상에서만 적용되는 것입니다.
역자 주 : 이글을 번역하는 시점에서 캑터스는 1.7, 톰캣은 5.5.9 및 5.0.28 이 릴리즈 되어있습니다. 실제 번역하면서 테스트한 버전은 캑터스 1.7, 톰캣 5.0.28 입니다.

이 문서는 10분 이내( 물론 다운로드 시간은 제외하고 입니다 :-) )에 톰캣에 캑터스 를 설정하고 캑터스 테스트를 실행 시켜 볼 수 있는 방법을 설명합니다.

어플리케이션에 캑터스 테스트를 실행해 볼 수 있도록 캑터스를 패키징하는 방법은 두 가지가 있습니다 :

  • 클래스패스 설정에서 기술한 바와 같이 모든 캑터스 jar 를 WEB-INF/lib 디렉터리에 위치시키는 방법,
  • 모든 캑터스 jar 를 컨테이너(container) 클래스패스에 위치 시킴으로써, 캑터스가 컨테이너 컨텍스트 클래스 로더(context class loader)를 사용하여 그것들을 로드하는 방법. 이 문서에서는 영향도가 적고, 캑터스 jar 들이 여러 웹어플리케이션에 걸쳐 재 사용될 수 있는 이 방법에 대해 설명할 것입니다.

여기에 더해, 캑터스의 테스트가 실행되도록 할 수 있는 여러 방법이 있습니다. ( 캑터스 테스트 실행 하기를 참고하세요 ) 여기서는 브라우저를 이용하는 가장 쉬운 방법을 사용할 것입니다.

단계 1 부터 단계 3 까지는 톰캣에서 캑터스 테스트를 실행시킬 수 있도록 하기 위해 단 한번만 수행하면 되는 설치 단계입니다.

단계 1 : 톰캣 설치하기

4.0 이상의 Tomcat을 다운로드 한 후 아무 디렉터리에 압축을 해제 합니다. 이 디렉터리를 [tomcat-root] 라 하겠습니다.

역자 주 : 설치버전을 이용한 경우는 톰캣을 설치한 디렉터리를 [tomcat-root] 라 하면 됩니다.

단계 2 : 캑터스 jar 를 복사하기

캑터스 jar 들을 캑터스 다운로드 페이지 에서 다운로드 합니다. jar 들은 zip 파일의 lib/ 디렉터리에 있습니다.

다음의 jar 들을 [tomcat-root]/common/lib 에 복사 합니다 :

  • cactus.jar
  • commons-httpclient.jar
  • commons-logging.jar
  • junit.jar
  • aspectjrt.jar
이것은 최소로 필요한 jar 들 입니다. 만약 차후에 캑터스와 HttpUnit의 통합 을 원하신다면 httpunit.jar 를 복사하십시오.
역자 주 :1.7 버전에 포함되어있는 jar 들의 버전은 위의 목록 순서대로 1.7, 2.0.2, 1.0.4, 3.8.1, 1.2.1 입니다. jar 명과 .jar 사이에 -<version> 형태로 표시됩니다. 예) cactus-1.7.jar

단계 3 : 톰캣 web.xml 수정하기

[tomcat-root]/conf/web.xml 를 수정하고 다음의 코드들을 파일의 시작에 위치한 <webapp> 태그 뒤에 추가하십시오 :

<servlet>
  <servlet-name>ServletRedirector</servlet-name>
  <servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class>
  <init-param>
    <param-name>param1</param-name>
    <param-value>value1 used for testing</param-value>
  </init-param>
</servlet>

<servlet>
  <servlet-name>ServletTestRunner</servlet-name>
  <servlet-class>org.apache.cactus.server.runner.ServletTestRunner</servlet-class>
</servlet>

그 다음, 마지막 <servlet> 선언 ( 우리가 위에서 추가한 2개 외에도 톰캣이 제공하는 것들이 꽤 있습니다 ) 뒷 부분에 다음을 추가하십시오 :

<servlet-mapping>
    <servlet-name>ServletRedirector</servlet-name>
    <url-pattern>/ServletRedirector</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>ServletTestRunner</servlet-name>
    <url-pattern>/ServletTestRunner</url-pattern>
</servlet-mapping>
경고: 전역 web.xml 을 수정하실때는 주의하셔야 합니다. 차후에 캑터스 앤트(Ant) 통합판을 사용하고 좀더 특별하게 <cactifywar> 앤트 테스크를 사용하신다면, 문제가 발생할 수 있습니다. <cactifywar> 태스크는 자동으로 필요한 캑터스 리다이렉터들(redirectors)를 추가합니다.(결국 그것들은 두번 추가되는 것이고, 당연히 에러를 유발합니다).

단계 4 : 테스트를 위한 간단한 예제 어플리케이션 만들기

지금부터 우리가 단위 테스트를 수행해 볼 수 있는 정말 정말 간단한 어플리케이션을 서버에 생성 하도록 하겠습니다.

먼저 다음과 같은 디렉터리 구조를 만듭니다 :

[tomcat-root]/webapps
  |_ test
    |_ WEB-INF
      |_ classes

다음으로 SampleServlet.java 자바 소스 파일을 만들고, 컴파일 후 결과인 .class 파일을 [tomcat-root]/webapps/test/WEB-INF/classes 에 복사 합니다.

역자 주 : SampleServlet.java와 아래의 TestSampleServlet.java를 실행하기 위해서는 최소한 servletapi.jar - 혹은 서블릿 API 를 제공할 수 있는 (weblogic.jar 같은 )어떤 것이라도 괜찮습니다 - 와 cactus-1.7.jar 가 컴파일시 클래스패스에 설정되어있어야 합니다.
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;

public class SampleServlet extends HttpServlet
{
    public void saveToSession(HttpServletRequest request)
    {
    	String testparam = request.getParameter("testparam");
    	request.getSession().setAttribute("testAttribute", testparam);
    }
}
주지하고 계시겠지만 이것은 완성된 서블릿이 아닙니다. 하지만, 이것은 코드 작성이 끝나기 전일지라도 캑터스와 코드 테스트를 할 수 있다는 것을 보여줍니다. Extreme 프로그래머들은 이런 것을 좋아할 것입니다 :-)

이제 우리의 첫 번째 캑터스 테스트 케이스를 만들어 봅시다. 다음의 TestSampleServlet.java 자바 소스 파일을 생성하고, 컴파일 한 후 결과인 .class 파일을 [tomcat-root]/webapps/test/WEB-INF/classes 에 복사 합니다.

import junit.framework.Test;
import junit.framework.TestSuite;

import org.apache.cactus.ServletTestCase;
import org.apache.cactus.WebRequest;

public class TestSampleServlet extends ServletTestCase
{
    public TestSampleServlet(String theName)
    {
        super(theName);
    }

    public static Test suite()
    {
        return new TestSuite(TestSampleServlet.class);
    }

    public void beginSaveToSessionOK(WebRequest webRequest)
    {
        webRequest.addParameter("testparam", "it works!");
    }

    public void testSaveToSessionOK()
    {
        SampleServlet servlet = new SampleServlet();
        servlet.saveToSession(request);
        assertEquals("it works!", session.getAttribute("testAttribute"));
    }
}

단계 5 : 테스트 실행하기

여태까지의 고생이 결실을 맺을 때입니다 ! [tomcat-root]/bin/startup.bat (windows 용) 또는[tomcat-root]/bin/startup.sh (Unix 용) 을 실행하여 톰캣을 기동 시킵니다.

브라우저를 이용해 http://localhost:8080/test/ServletTestRunner?suite=TestSampleServlet 를 엽니다.

다음의 결과를 보실 수 있습니다.

XML output of ServletTestRunner
역자 주 : 물론 수행 시간등은 다를 수 있습니다.

Step 6: Even more fun!

좋습니다. 멋지네요... 하지만 XML 대신 HTML 을 원한다면요? 걱정하지 마십시오. 해결책이 있습니다. 다음의 XSLT 스타일시트(stylesheet) (<junitreport> 앤트 태스크에 사용되는 스타일시트에 기반한)를 [tomcat-root]/webapps/test 에 위치시키십시오. 그 다음, 브라우저를 이용해

http://localhost:8080/test/ServletTestRunner?suite=TestSampleServlet&xsl=cactus-report.xsl

에 접속해 보시면, 다음의 결과를 보실 수 있습니다.
역자 주 : 링크에서 받을 수 있는 파일은 xml 파일인데 문서의 url 정보는 xsl 입니다. 파일을 받은 후에는 url 을 xml 로 변경해서 접속해야 제대로된 결과를 볼 수 있습니다.

HTML output of ServletTestRunner
이 작업은 클라이언트측 XSLT 변환을 지원하는 어떠한 브라우저(예를 들어 인터넷 익스플로어나, 모질라같은)에서도 잘 실행됩니다.
역자 주 : 인터넷 익스플로어 6.0-sp2 와 파이어폭스 1.0.2 한글판에서 성공적으로 실행되었습니다.