Java/Servlet & JSP

웹 애플리케이션 배포하기

체리필터 2009. 4. 7. 16:24
728x90
반응형
어떤 파일이 어느 곳에 위치하는지는 중요하다.
php를 개발 할 때 프로그래머가 임의로 정하는 장소와는 달리 Java(JSP)는 어느정도 rule을 가지고 특정 위치에 특정 파일을 배포해야지만, 전체 웹 애플리케이션이 돌아가기 때문이다.
따라서 중요한 몇개의 파일 타입별 배포 위치에 대해 정리해 보면 아래와 같다.

  • 정적인 컨텐츠(html, 이미지) 및 jsp
    • 루트 디렉토리 및 그 하위 디렉토리
    • WEB-INF 밑에 배포 할 경우에는 클라이언트가 직접 접근할 수 없다. 대신 웹 애플리케이션에서 접근을 하게 만들 경우를 위해서 배포할 순 있다.
  • 태그파일(.tag) - http://www.4te.co.kr/567 참고
    • WEB-INF/tags 디렉토리에 배포
  • DD 파일
    • 이름은 web.xml이어야 하며 WEB-INF 바로 밑에 두어야 한다.
  • jar 파일
    • WEB-INF/lib 밑에 두어야 한다.
    • jar파일 내 구조
      • jar 최상위 디렉토리 바로 밑에서부터 시작해야 한다.(패키지 시작부터)
      • jar로 배포할 경우 최상위 디렉토리에 META-INF 디렉토리가 있어야 하며, tld 파일은 META-INF 디렉토리 아래 배포 해야한다.
  • class 파일
    • WEB-INF/classes 밑에 패키지 구조로 배포 되어야 한다.

* WAR 파일로 배포하기

jar 파일로 애플리케이션 전체를 압축한 후 확장자만 war로 바꿔서 배포하는 것을 말한다.
압축하는 디렉토리는 웹 애플리케이션의 내용이 들어있는 디렉토리를 압축해서 배포하면 된다.
압축을 하는 위치는 디렉토리 위에서 압축하는 것이 아니라, 디렉토리 내부에서 압축해야 한다.
또한 압축 파일명은 웹애플리케이션의 이름이 된다(톰캣의 경우)

ex) /webapps/BeerApp 를 압축하기 위해서는 /webapps에서 BeerApp를 압축하는 것이 아니라 BeerApp 아래 들어가서 압축

WAR 파일의 경우 META-INF/MANIFEST.MF 파일에 라이브러리 의존성을 작성해 두면, 배포 시 컨테이너가 애플리케이션을 실행하기 위해 필요한 라이브러리가 있는지 사전 체크할 수 있다.

* 서블릿 맵핑

서블릿 맵핑은 물리적인 디렉토리가 아닌 가상의 디렉토리(URL)에서 실행할 내용을 찾기 위해 사용하는 것이다. 관련 내용은 http://www.4te.co.kr/538를 참고하면 된다.

참고)서블릿 맵핑은 와일드 카드와 같이 패턴 형식으로 맵핑할 수도 있다.

* DD에 환영 파일 설정하기

파일명을 안치고 디렉토리명까지 치면 자동을 찾게 할 파일명을 설정할 수 있다. web.xml에 다음과 같이 적어주면 된다.

  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

위 리스트 중에서 index.html과 index.jsp가 같이 있게 된다면 먼저 나온 index.html을 보여주게 된다.
apache의 httpd.con파일에 있는 다음과 같은 설정과 같은 역할을 해 주는 것이다.

<IfModule mod_dir.c>
    DirectoryIndex index.html index.php
</IfModule>

* DD에 오류 페이지 설정하기

오류 페이지를 web.xml에 설정하는 방법은 http://www.4te.co.kr/565 를 참고하면 된다.
프로그램에서 오류코드를 일부러 방생하고자 할 경우에는 다음과 같이 하면 된다.

response.sendError(HttpServletResponse.SC_FORBIDDEN);

위 내용은 403 에러를 내뱉는 경우를 프로그램적으로 처리한 경우이다. 실제 403 에러를 내 뱉는 것과 프로그램을 통해 내뱉는 것 사이의 차이를 클라이언트는 알 수 없다.

* DD에서 강제로 서블릿 초기화 하기

서블릿을 배포하게 되면 가장 처음 요청하는 클라이언트는 해당 서블릿이 로딩 될 때까지 기다려야 한다. 그리 무겁지 않은 서블릿일 경우에는 자동 로딩을 적용 하지 않아도 되지만, 무거운 서블릿일 경우에는 클라이언트에 의해 로딩되지 않고, 배포 할 때 로딩 되도록 만들어야 한다.
따라서 그럴 경우에는 아래와 같이 web.xml에 정의해 주면 된다.

  <servlet>
      <servlet-name>Chapter1 Servlet</servlet-name>
      <servlet-class>Ch1Servlet</servlet-class>
      <load-on-startup>1</load-on-startup>
  </servlet>

해당 숫자는 초기화 하는 순서를 말한다. 동일한 숫자가 여러개 있다면 web.xml에 정의한 순서대로 로딩한다.

* mime mapping 하기

DD(web.xml)에서 mime type을 확장자와 맵핑해 둘 수 있다.

  <mime-mapping>
      <extension>mpg</extension>
      <mime-type>video/mpeg</mime-type>
  </mime-mapping>




728x90
반응형

'Java > Servlet & JSP' 카테고리의 다른 글

필터 - REQUEST  (1) 2009.04.16
웹 애플리케이션 보안  (4) 2009.04.10
부모 자식 태그간의 통신  (0) 2009.03.26
클래식 커스텀 태그  (0) 2009.03.26
사용자 정의 태그 개발 (1)  (0) 2009.03.23