URL「page.jsp」が機能するのは、「page.jsp」が Web アプリケーションのドキュメント ルートに配置されているためです。「WEB-INF」フォルダー以外のコンテナーに保存されているファイルは、クライアントに直接提供できます。
つまり。ファイル '/js/myJavascirpt.js' は、URL に入力するとアクセスされます。同じことが画像にも当てはまります。「/images/picture.png」としましょう。
WEB-INF のサーブレット仕様によると:
アプリケーション階層内に、WEB-INF という名前の特別なディレクトリが存在します。このディレクトリには、アプリケーションのドキュメント ルートにない、アプリケーションに関連するすべてのものが含まれます。WEB-INF ノードは、アプリケーションのパブリック ドキュメント ツリーの一部ではありません。WEB-INF ディレクトリに含まれるファイルは、コンテナによってクライアントに直接提供されることはありません。ただし、WEB-INF ディレクトリの内容は、ServletContext で getResource および getResourceAsStream メソッド呼び出しを使用してサーブレット コードに表示され、RequestDispatcher 呼び出しを使用して公開される場合があります。
仕様から、クライアントにファイルへの直接アクセスを許可したくない場合は、それらのファイルを「WEB-INF」フォルダーに保存する必要があることは明らかです。これが、Java Web アプリケーションのすべてのクラスとライブラリが「WEB-INF」フォルダーに格納されている理由です。
問題が発生した場合は、jsp ファイルを「WEB-INF」フォルダーに配置するだけです。
例: jsp ファイルを「WEB-INF」フォルダーの下に置きます。
WEB-INF/views/jsp/page.jsp
次のように web.xml のエントリを変更します。
<servlet>
<servlet-name>Page</servlet-name>
<jsp-file>/WEB-INF/views/jsp/page.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>Page</servlet-name>
<url-pattern>/page-url-1</url-pattern>
<url-pattern>/page-url-2</url-pattern>
</servlet-mapping>
ソース: JSR-000315 JavaTM Servlet 3.0 for Java Servlet Specification(Ch 10.5) にアクセスしてください。