サーブレット2.4仕様では、 WEB-INF(70ページ)については、これを言います:
という名前のアプリケーション階層内に特別なディレクトリが存在します
WEB-INF
。このディレクトリには、アプリケーションのドキュメントルートにない、アプリケーションに関連するすべてのものが含まれています。ノードは、アプリケーションのパブリックドキュメントツリーの一部ではありません。ディレクトリに含まれるファイルは、コンテナによってクライアントに直接提供できません。ただし、ディレクトリのコンテンツは、
の
およびメソッドの呼び出しを使用してサーブレットコードから表示でき、呼び出しを使用して公開できます。WEB-INF
WEB-INF
WEB-INF
getResource
getResourceAsStream
ServletContext
RequestDispatcher
これは、WEB-INF
リソースがWebアプリケーションのリソースローダーにアクセス可能であり、一般に公開されていないことを意味します。
このため、多くのプロジェクトでは、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>
ウィキペディアの中で言及したフォルダにWARファイル記事は、実行時にサーブレット仕様で必要とされるフォルダの例です。WEB-INF/classes
WEB-INF/lib
プロジェクトの構造と結果のWARファイルの構造を区別することが重要です。
プロジェクトの構造は、WARファイルの構造を部分的に反映する場合があります(JSPファイルやHTMLおよびJavaScriptファイルなどの静的リソースの場合)が、常にそうであるとは限りません。
プロジェクト構造から結果のWARファイルへの移行は、ビルドプロセスによって行われます。
通常、独自のビルドプロセスを自由に設計できますが、今日ではほとんどの人がApache Mavenなどの標準化されたアプローチを使用します。特にMavenは、プロジェクト構造のどのリソースが、結果のアーティファクトのどのリソースにマップされるかについてのデフォルトを定義します(この場合、結果のアーティファクトはWARファイルです)。マッピングがプレーンコピープロセスで構成される場合もあれば、フィルタリングやコンパイルなどの変換がマッピングプロセスに含まれる場合もあります。
1つの例:WEB-INF/classes
フォルダーには、アプリケーションを起動するためにクラスローダーによってロードされる必要があるすべてのコンパイル済みJavaクラスおよびリソース(src/main/java
およびsrc/main/resources
)が後で含まれます。
別の例:WEB-INF/lib
フォルダーには、後でアプリケーションが必要とするすべてのjarファイルが含まれます。Mavenプロジェクトでは、依存関係が自動的に管理され、Mavenは必要なjarファイルをWEB-INF/lib
フォルダーに自動的にコピーします。これlib
が、Mavenプロジェクトにフォルダーがない理由を説明しています。