Java EE 웹 응용 프로그램에서 WEB-INF는 무엇에 사용됩니까?
다음과 같은 소스 코드 디렉터리 구조를 가진 Java EE 웹 응용 프로그램에서 작업 중입니다.
src/main/java <-- multiple packages containing Java classes
src/test/java <-- multiple packages containing JUnit tests
src/main/resources <-- includes properties files for textual messages
src/main/webapp/resources <-- includes CSS, images and all Javascript files
src/main/webapp/WEB-INF
src/main/webapp/WEB-INF/tags
src/main/webapp/WEB-INF/views
제가 관심 있는 폴더는WEB-INF
: 내용물web.xml
, 서블릿, 스프링빈 배선 컨텍스트 및 JSP 태그 및 뷰를 설정하기 위한 XML 파일.저는 이 구조를 제약하거나 정의하는 것이 무엇인지 이해하려고 합니다.예를 들어 JSP 파일은 항상 다음 범위 내에 있어야 합니까?WEB-INF
아니면 다른 곳에 있을까요?그리고 또 들어갈만한 게 있나요?WEB-INF
? Wikipedia의 WAR 파일 엔트리에 기재되어 있습니다.classes
Java 클래스 및lib
JAR 파일의 경우 - 다른 소스 파일 위치와 더불어 언제 이러한 파일이 필요한지 완전히 파악했는지 확실하지 않습니다.
Servlet 2.4 사양에서는 WEB-INF에 대해 다음과 같이 기술되어 있습니다(70페이지).
애플리케이션 계층 내에 다음과 같은 이름의 특별한 디렉토리가 있습니다.
WEB-INF
. 이 디렉토리에는 응용프로그램의 문서 루트에 없는 응용프로그램과 관련된 모든 항목이 들어 있습니다.노드가 응용프로그램의 공용 문서 트리에 속하지 않습니다.에 파일이 포함되어 있지 않다.WEB-INF
디렉토리는 컨테이너에 의해 클라이언트에 직접 제공될 수 있습니다.단, 의 내용은WEB-INF
디렉토리는 servlet 코드에 표시됩니다.getResource
그리고.getResourceAsStream
의 메서드 콜ServletContext
, 및 를 사용하여 노출될 수 있습니다.RequestDispatcher
콜을 클릭합니다.
즉,WEB-INF
리소스는 웹 응용 프로그램의 리소스 로더에 액세스할 수 있으며 일반인이 직접 볼 수 없습니다.
그렇기 때문에 많은 프로젝트에서 JSP 파일, JAR/라이브러리 및 클래스 파일, 속성 파일 또는 기타 중요한 정보 등의 리소스를WEB-INF
폴더입니다.그렇지 않으면 간단한 정적 URL을 사용하여 액세스할 수 있습니다(예를 들어 CSS나 Javascript를 로드하는 데 유용합니다).
기술적인 관점에서 보면 JSP 파일은 어디에나 있을 수 있습니다.예를 들어, 봄에는 다음 위치에 두도록 구성할 수 있습니다.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
Wikipedia의 WAR 파일 문서에 언급된 폴더는 실행 시 Servlet 사양에 필요한 폴더의 예입니다.
프로젝트의 구조와 결과 WAR 파일의 구조를 구별하는 것이 중요합니다.
프로젝트의 구조는 WAR 파일의 구조를 부분적으로 반영할 수 있습니다(JSP 파일이나 HTML, JavaScript 파일 등의 정적 자원의 경우).다만, 이것은 항상 그렇지만은 않습니다.
프로젝트 구조에서 결과 WAR 파일로 이행은 빌드 프로세스에 의해 이루어집니다.
일반적으로 빌드 프로세스를 자유롭게 설계할 수 있지만, 오늘날 대부분의 사람들은 Apache Maven과 같은 표준화된 접근 방식을 사용합니다.Maven은 프로젝트 구조의 리소스가 결과 아티팩트 내의 리소스에 매핑되는 기본값을 정의합니다(이 경우 결과 아티팩트가 WAR 파일입니다).경우에 따라서는 매핑이 플레인 복사 프로세스로 구성되는 경우도 있고, 매핑 프로세스에는 필터링이나 컴파일 등의 변환이 포함됩니다.
한 가지 예:그WEB-INF/classes
폴더에는 나중에 컴파일된 모든 Java 클래스와 리소스가 포함됩니다.src/main/java
그리고.src/main/resources
응용 프로그램을 시작하려면 Classloader에 의해 로드되어야 합니다.
또 다른 예는 다음과 같습니다.그WEB-INF/lib
폴더에는 나중에 응용 프로그램에 필요한 모든 jar 파일이 포함됩니다.maven 프로젝트에서는 의존관계가 관리되고 maven은 자동으로 필요한 jar 파일을WEB-INF/lib
폴더입니다.그럼 왜 안되는지 설명이 되네요.lib
폴더는 메이븐 프로젝트)를 선택합니다.
Java EE 웹 응용 프로그램을 배포할 때(프레임워크 사용 여부에 관계없이) 구조는 몇 가지 요구 사항/사양에 따라야 합니다.다음의 사양은, 에서 취득됩니다.
- 서블릿 컨테이너(예: Tomcat)
- Java Servlet API
- 응용 프로그램 도메인
- Servlet 컨테이너 요구 사항
Apache Tomcat을 사용하는 경우 응용 프로그램의 루트 디렉토리를 webapp 폴더에 배치해야 합니다.다른 서블릿 컨테이너 또는 응용 프로그램서버를 사용하는 경우는, 다른 경우가 있습니다. Java Servlet API 요건
Java Servlet API는 루트 응용 프로그램 디렉토리가 다음 구조를 가져야 함을 나타냅니다.ApplicationName | |--META-INF |--WEB-INF |_web.xml <-- Here is the configuration file of your web app(where you define servlets, filters, listeners...) |_classes <--Here goes all the classes of your webapp, following the package structure you defined. Only |_lib <--Here goes all the libraries (jars) your application need
이러한 요건은 Java Servlet API에 의해 정의됩니다.
3. 어플리케이션 도메인
이제 Servlet 컨테이너(또는 응용 프로그램 서버) 및 Java Servlet API 요구 사항을 준수했으므로, 필요한 항목에 따라 웹 앱의 다른 부분을 구성할 수 있습니다.
- 자원(JSP 파일, 플레인 텍스트 파일, 스크립트 파일)을 응용 프로그램 루트 디렉토리에 넣을 수 있습니다.그러나 다른 사용자가 브라우저에서 직접 액세스 할 수 있습니다.이 경우, 어플리케이션에서 제공하는 로직으로 요청을 처리할 필요가 없습니다.따라서 리소스가 직접 액세스되지 않도록 하려면 WEB-INF 디렉토리에 리소스를 저장해야 합니다.WEB-INF 디렉토리의 콘텐츠는 서버에서만 액세스할 수 있습니다.
일부 프레임워크를 사용하는 경우 구성 파일을 사용하는 경우가 많습니다.이러한 프레임워크(struts, spring, hibernate)의 대부분은 classpath('classes' 디렉토리)에 컨피규레이션파일을 넣을 필요가 있습니다.
공개하고 싶지 않은 페이지는 모두 WEB-INF에 넣어야 합니다.일반적으로 JSP 또는 페이스렛은 WEB-INF 외부에 있지만 이 경우 모든 사용자가 쉽게 액세스할 수 있습니다.허가 제한이 있는 경우는, WEB-INF 를 사용할 수 있습니다.
WEB-INF/lib에는 서드파티 라이브러리를 포함할 수 있습니다.서드파티 라이브러리는 시스템레벨에서는 패키지 할 수 없습니다(JAR은 서버에서 실행되는 모든 어플리케이션에서 사용할 수 있습니다).단, 이 어플리케이션에서만 사용할 수 있습니다.
일반적으로 많은 구성 파일도 WEB-INF에 들어갑니다.
WEB-INF/classes의 경우 모든 컴파일된 소스가 저장되는 폴더이기 때문에 모든 웹 앱에 존재합니다(JARs가 아니라 사용자가 직접 작성한 컴파일된 .java 파일).
이 규칙은 보안상의 이유로 준수됩니다.예를 들어 권한이 없는 사람이 URL에서 루트 JSP 파일에 직접 액세스할 수 있는 경우 인증 없이 애플리케이션 전체를 탐색할 수 있으며 모든 보안 데이터에 액세스할 수 있습니다.
jsp 페이지를 WEB-INF 디렉토리 아래에 배치하는 규칙(필수가 아님)이 있어 jsp 페이지를 깊이 링크하거나 북마크할 수 없습니다.이와 같이 jsp 페이지에 대한 모든 요청은 애플리케이션을 통해 전송되어야 하며, 따라서 사용자 환경이 보장됩니다.
언급URL : https://stackoverflow.com/questions/19786142/what-is-web-inf-used-for-in-a-java-ee-web-application
'programing' 카테고리의 다른 글
왜 GCC 컴파일된 C 프로그램에 .eh_frame 섹션이 필요한가? (0) | 2022.07.16 |
---|---|
네이티브 Java 또는 Kotlin에서 "의존관계 AAR 메타데이터에 지정된 minCompileSdk(31)" 오류를 해결하려면 어떻게 해야 합니까? (0) | 2022.07.16 |
intr_t의 용도는 무엇입니까? (0) | 2022.07.16 |
메서드 자체에 의해 값이 변경되었을 때 vuejs 워치 메서드의 트리거를 정지할 수 있는 방법이 있습니까? (0) | 2022.07.16 |
Vue js v-model different 확인란 (0) | 2022.07.16 |