서블릿 2.4 스펙은 말한다이 WEB-INF (70 페이지)에 대한 :
응용 프로그램 계층 내에 특수 디렉토리가 있습니다
WEB-INF
. 이 디렉토리에는 응용 프로그램의 문서 루트에없는 응용 프로그램과 관련된 모든 내용이 들어 있습니다. 노드는 응용 프로그램의 공용 문서 트리의 일부가 아닙니다 . 디렉토리에 포함 된 파일은 컨테이너 가 클라이언트에 직접 제공 할 수 없습니다. 그러나 디렉토리 의 내용은에서
및 메소드 호출을 사용하여 서블릿 코드에 표시되며 호출을 사용하여 노출 될 수 있습니다 .WEB-INF
WEB-INF
WEB-INF
getResource
getResourceAsStream
ServletContext
RequestDispatcher
즉, WEB-INF
웹 응용 프로그램의 리소스 로더에서 리소스에 액세스 할 수 있으며 일반에게 직접 표시되지 않습니다.
이것이 많은 프로젝트가 JSP 파일, JAR / 라이브러리 및 자체 클래스 파일 또는 특성 파일 또는 기타 민감한 정보와 같은 자원을 폴더에 넣는 이유 WEB-INF
입니다. 그렇지 않으면 간단한 정적 URL을 사용하여 액세스 할 수 있습니다 (예 : CSS 또는 Javascript를로드하는 데 유용).
JSP 파일은 기술적 인 관점에서 어느 곳에 나있을 수 있습니다. 예를 들어 Spring에서는 다음과 같이 구성 할 수 있습니다WEB-INF
명시 적으로 .
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" >
</bean>
그만큼 WEB-INF/classes
및 WEB-INF/lib
위키 백과의에서 언급 한 폴더 WAR 파일 문서 실행시 서블릿 사양에 필요한 폴더의 예입니다.
프로젝트 구조와 결과 WAR 파일의 구조를 다르게하는 것이 중요합니다.
프로젝트 구조는 경우에 따라 WAR 파일의 구조를 부분적으로 반영합니다 (JSP 파일 또는 HTML 및 JavaScript 파일과 같은 정적 자원의 경우). 그러나 항상 그런 것은 아닙니다.
프로젝트 구조에서 결과 WAR 파일로의 전환은 빌드 프로세스에 의해 수행됩니다.
일반적으로 자신 만의 빌드 프로세스를 자유롭게 설계 할 수 있지만 요즘 대부분의 사람들은 Apache Maven. 무엇보다도 Maven은 프로젝트 구조의 리소스가 결과 아티팩트의 리소스에 매핑되는 기본값을 정의합니다 (이 경우 결과 아티팩트는 WAR 파일 임). 어떤 경우에는 매핑이 일반 복사 프로세스로 구성되고 다른 경우에는 매핑 프로세스에 필터링 또는 컴파일 등의 변환이 포함됩니다.
한 가지 예 : WEB-INF/classes
폴더에는 나중에 컴파일 된 모든 Java 클래스 및 리소스가 포함됩니다 (src/main/java
src/main/resources
응용 프로그램을 시작하기 위해 클래스 로더가로드해야하는 및 )가 포함됩니다.
다른 예 : WEB-INF/lib
폴더에는 나중에 응용 프로그램에 필요한 모든 jar 파일이 포함됩니다. maven 프로젝트에서 종속성이 관리되고 maven은 필요한 jar 파일을 자동으로 WEB-INF/lib
폴더에 복사합니다. 그것은 lib
maven 프로젝트에 폴더 가없는 이유를 설명합니다 .