자바 웹 어플리케이션 파일 구조

web 2010. 9. 10. 17:26
Project가 현재 개발하는 프로젝트명으로서 최상위 폴더입니다. 그 아래 src라는 소스 폴더가 있죠. 소스 폴더 아래에는 자바 코딩 규칙대로 회사 도메인명을 거꾸로 쓴 패키지를 사용하였습니다. user부터가 진짜 패키지명입니다. 그 아래는 ActionServlet 클래스를 넣을 action 패키지, Data Access Object를 넣을 dao 패키지, Transper Object를 넣을 to 패키지, Value Object 클래스를 넣을 vo 패키지로 나누었습니다. DynaActionForm을 사용할 것이기 때문에 ActionForm에 대한 패키지는 없습니다.

web이 웹 어플리케이션의 파일에 관련된 최상위 폴더입니다. 그 아래 당연히 WEB-INF 폴더가 있구요, 그 외에css, images, js, jsp 폴더가 있습니다. jsp는 jsp 파일이 들어갈 최상위 폴더구요. 그 아래는 각  단위 시스템 별로 폴더를 나누어서 jsp 파일을 넣으면 됩니다. 소스대로라면 user 폴더 아래에 넣으면 되겠지요. WEB-INF 파일 아래를 보시면 conf 폴더가 있습니다. 이 안에 Struts 설정 파일을 넣습니다. 그리고 lib 폴더에는 필요한 jar 파일들을 넣고요, tld 폴더에는 Struts 태그를 사용하는 데 필요한 설정 파일들을 넣습니다.



※ 직접 jsp에 접근할 때는 http://localhost:7001/jsp/user/index.jsp 이런 식으로 접근한다.
web은 최상위 폴더명으로 root와 같은 역활을 하기 때문에 주소에서 빠진다.

-----------------------------------------------------------------------------------------
출처 : http://aboutjsp.com/lec/classpath.jsp
* 특별한 디렉토리! WEB-INF 
이번엔 조금 특별한 디렉토리인 WEB-INF 디렉토리에 대해서 알아 보도록 하겠습니다. WEB-INF 디렉토리에는 몇가지 특별한 기능이 있는데(web.xml을 이용한..) 그중에서 아래의 두가지 디렉토리에 대해서 알아 보도록 하겠습니다.

  • WEB-INF/classes
  • WEB-INF/lib

0) *.html, *.jsp, 등. - 웹 어플리케이션에서 클라이언트 브라우저로 전송이 되는 HTML 과 JSP 페이지와 다른 파일들 (예를 들면 자바스크립트, 스타일시트, 이미지 같은). 대규모 어플리케이션에서 이 파일들을 서브디렉토리 체계로 나누어 놓을 수 있습니다. 그러나 규모가 작은 어플리케이션이라면 보통은 하나의 디렉토리에서 전체를 관리하는 것이 보다 단순하고 쉽습니다. 

1) WEB-INF/classes 
이 디렉토리에는 웹 어플리케이션에서 사용하는 모든 자바 파일(그리고, 관련 자원)이 들어있습니다. 이 디렉토리는 많이들 보셨으리라 생각됩니다. servlet 을 작성할때, JavaBeans를 작성할때 이곳에 컴파일된 class 파일을 넣어두고 servlet 혹은 Beans 를 호출하여 사용하게 됩니다. 이렇게 특별히 CLASSPATH 에 지정된 디렉토리에 있지 않더라도 이곳에 넣으면 바로 사용이 가능하게 됩니다. servlet, beans 가 아니래도 ~~.class 로 되어 있는 파일들은 모두 이 디렉토리에 넣고 바로 사용이 가능합니다. 예를 들자면 JDBC 드라이버 같은 경우도 이곳에 압축을 풀어서 넣어 두면 곧바로 사용이 가능해 지는 것이지요. 즉, 서블릿과 비서블릿 클래스 파일들이며 jar 형태로 묶여있지 않은 것입니다. 패키지가 선언된 클래스라면 /WEB-INF/classes/ 를 기준으로 패키지의 디렉토리를 만들어 구성하면 됩니다. 예를 들어, 클래스명이 com.mycompany.mypackage.MyServlet 라면 파일의 저장경로는 /WEB-INF/classes/com/mycompany/mypackage/MyServlet.class 이 됩니다. 

2) WEB-INF/lib 
JSP 에 익숙하신 분들이라도 이 디렉토리는 생소하실 분들이 많으리라 생각됩니다. classes 와는 달리 이곳에는 jar 파일을 넣어 둘수 있는 디렉토리입니다. 즉, 이곳에 뭐뭐.jar 파일을 넣어두면 이파일을 classpath 에 추가한 것과 마찬가지로 사용이 가능해 진다는 것이죠.(외부 클래스 라이브러리나 JDBC 드라이버 같은 것들입니다.)  단점이라면.. 웹서버를 재시작해야 한다는것이죠.(서블릿컨테이너마다 다르나 일반적으로는 재시작 해야 합니다.)
 
3) /WEB-INF/web.xml - 웹 어플리케이션의 웹 어플리케이션 배치 설명자 Web Application Deployment Descriptor. 서블릿과 웹어플리케이션을 구성하는 다른 컴포넌트들을 설명하고, 각종 초기화 파라메터들과 서버 기능을 활용하기 위한 컨테이너가 관리하는 보안 제한 구역을 지정하는 XML 파일입니다. 다음 섹션에서 좀 더 자세히 알아보도록 하겠습니다.
 
※ META-INF 폴더

Tip - import
아래와 같은 구조로 class 파일이 배치되어 있다고 할 때
WEB-INF/classes/First.class
                       |
                       *--/com/Second.class
이경우 보통 Second.class 를 사용하기 위해서 우리는 아래와 같이 import 합니다.

import com.*;

그렇다면 First.class 를 어떻게 import 해야 할까요? 답은 아래와 같습니다.

import First;

어떤 사람들은 가장 위에 있으니 import 를 하지 않아도 되는것이 아닌가 하고 생각하시는 분도 계신데, 이때는 반드시 개별적으로 import 를 해주어야 정상적으로 작동합니다.

JDK 1.4부터는 디폴트패키지의 import가 금지 되었습니다. 즉, import First; 는 에러입니다. 반드시 import com.Second; 와 같은 형태가 되어야 합니다.

'web' 카테고리의 다른 글

jstl  (0) 2010.08.06
robots.txt  (0) 2010.07.19
Penetration Testing  (0) 2010.04.12
HTTP/1.1 Method (HTTP 명령어)  (0) 2010.02.04
: