2

という Web ページ ページがあり、page.jsp2 つの URL だけが必要です。

  • /page-url-1
  • /page-url-2

私が書いたweb.xmlで:

<servlet>
    <servlet-name>Page</servlet-name>
    <jsp-file>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>

しかし、今では 3 つの URL があります。

  • /page.jsp <==不要
  • /page-url-1
  • /page-url-2

質問: JSP のネイティブ URL を削除して、カスタム URL を割り当てるにはどうすればよいですか?

4

3 に答える 3

7

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) にアクセスしてください。

于 2015-01-13T06:40:27.467 に答える
1

ロールを指定せずに、URL へのアクセスを直接制限することができます。以下にサンプルを示します。

<security-constraint>
     <web-resource-collection>
        <web-resource-name>Restricted Resource</web-resource-name>
        <url-pattern>/page.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint />
</security-constraint>

ユーザーがアクセスしようとすると、HTTP 403 エラー (要求されたリソースへのアクセスが拒否されました) が表示されます。

于 2015-01-13T08:15:44.607 に答える