java-school logo

웹 애플리케이션 작성 실습

{톰캣홈}/webapps에 새로운 웹 애플리케이션을 추가하는 방법은 이미 알고 있다.
이번 과정에서는 톰캣 디폴트 웹 애플리케이션 디렉토리에 있지 않는 웹 애플리케이션을 톰캣이 서비스하도록 하는 방법을 알아볼 것이다.
C:/www/myapp 란 디렉토리를 만든다.
myapp 아래 아래와 같이 서브 디렉토리를 만든다.
C:/www/myapp 는 톰캣의 웹 애플리케이션이 있어야 하는 디폴트 디렉토리가 아니므로 톰캣은 myapp 애플리케이션의 존재를 알지 못한다.
따라서 톰캣이 myapp 웹 애플리케이션을 서비스하도록 우리가 뭔가 해야 할 일이 남아 있다.
이 작업은 XML 파일을 하나 만든는 것이다.
작성할 XML 파일은 톰캣에서 웹 애플리케이션을 관리하기 위한 용도의 파일이다.
이 XML파일을 루트 엘리먼트가 Context 이기에 컨텍스트 파일이라 한다.
(톰캣에서 Context는 웹 애플리케이션을 의미한다.)
컨텍스트 파일을 작성할 때 가장 중요한 정보는 웹 애플리케이션의 소스가 위치하는 최상위 디렉토리(DocumentBase 또는 Context Root 라 한다.)와 URL 로 접근하는 경로 정보(Context Path)이다.
이 정보는 Context 엘리먼트의 docBase 와 path 속성으로 설정한다.
Context 파일을 작성한 다음 {톰캣 홈}/conf/Catalina/localhost 에 위치시키면 톰캣이 해당 웹 애플리케이션을 자동으로 인식하여 로드한다.
만약 컨텍스트 파일이 잘못 작성되었다면 톰캣은 해당 자바 웹 애플리케이션을 로드하지 못하며, 실패 원인을 {톰캣 홈}/logs 에 있는 로그파일에 쓸 것 이다.
에러 메시지는 따로 공부하는 것이 아니다.
사람마다 다양한 에러 메시지를 만날 수 있다.
일단 보고 추측해보고 수정하고, 그래도 안돼면 구글링도 해야 한다
JSP 에러 역시 마찬가지다.
되는 코드를 그대로 복사해서 테스트하는 것은 프로그래밍을 학습하는 것이 아니다.
프로그래밍 학습의 90%는 다양한 에러를 접하고 에러를 수정하는 과정이다.

톰캣 Context 파일 작성

myapp 자바 웹 애플리케이션을 위한 Context 파일을 만든다.
myapp.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context
    docBase="C:/www/myapp"
    reloadable="true">
</Context>
Context 파일명이 위와 같이 myapp.xml 이고 path 속성은 생략하면 context path 는 /myapp 로 결정된다.
myapp.xml 파일을 만든 후 {톰캣 홈}/conf/Catalina/localhost 에 복사한다.
테스트를 위해서C:/www/myapp 디렉토리에 test.html 파일을 만든다.
톰캣을 재가동 한 후 http://localhost:8989/myapp/test.html를 방문하여 실행이 되는지 확인한다.
Context 주요 속성
속성 기본값 설명
docBase   웹 애플리케이션의 소스가 위치할 루트 디렉토리(이를 Document Base 또는 Context Root 라 한다.)를 지정한다.
path   웹 애플리케이션에 접속할 URL 를 지정한다.
이를 다른 말로 context path 라 한다.
만일 path 속성값이 확장자를 뺀 Context 파일명과 같다면 path 를 생략할 수 있다.
reloadable false WEB-INF/classes 와 WEB-INF/lib 안에 있는 클래스가 변경되면 자동으로 웹 애플리케이션을 다시 로딩한다.
새로운 웹 애플리케이션을 개발하는 단계에서는 true 로 설정해야 작업이 편리하지만 실제 서비스에서는 성능문제로 false 로 설정한다.

ROOT 애플리케이션 변경

http://localhost:포트번호/로 접근할 수 있는 웹 애플리케이션이 ROOT 애플리케이션이다.
톰캣을 멈추고 myapp.xml 파일를 ROOT.xml 로 파일명을 바꾼다.
톰캣을 재실행하고 http://localhost:8989/test.html를 방문하여 테스트한다.
만일 ROOT.xml 파일에 문제가 있다면 고양이가 보이는 ROOT 웹 애플리케이션이 작동할 것이다.
참고