web.xmlでデフォルトのエラーページを指定する方法


138

ユーザーがコード404のエラーなどの特定のエラーに遭遇したときに、わかりやすいエラーページを指定するため<error-page>web.xmlの要素を使用しています。

<error-page>
        <error-code>404</error-code>
        <location>/Error404.html</location>
</error-page>

ただし、ユーザーがで指定されたエラーコードを満たしていない場合は<error-page>、デフォルトのエラーページが表示されるようにしてください。web.xmlの要素を使用してどうすればよいですか?


2
どのサーブレットコンテナーを使用/ターゲットにしていて、どのサーブレットバージョンをweb.xml宣言していますか?サーブレット3.0以降、簡単な方法しかありません。
BalusC 2011

私はTomcat 6、サーブレット2.5を使用しています
ipkiss

回答:


240

サーブレット3.0以降では、指定するだけです

<web-app ...>
    <error-page>
        <location>/general-error.html</location>
    </error-page>
</web-app>

しかし、まだサーブレット2.5を使用しているので、すべての一般的なHTTPエラーを個別に指定する以外に方法はありません。エンドユーザーが直面する可能性のあるHTTPエラーを把握する必要があります。HTTP認証の使用、ディレクトリリストの無効化、未処理の例外をスローする可能性がある、またはすべてのメソッドが実装されていない可能性のあるコードを使用する、ベアボーンWebアプリケーションで、HTTPエラー401に設定する場合、403、500、503。

<error-page>
    <!-- Missing login -->
    <error-code>401</error-code>
    <location>/general-error.html</location>
</error-page>
<error-page>
    <!-- Forbidden directory listing -->
    <error-code>403</error-code>
    <location>/general-error.html</location>
</error-page>
<error-page>
    <!-- Missing resource -->
    <error-code>404</error-code>
    <location>/Error404.html</location>
</error-page>
<error-page>
    <!-- Uncaught exception -->
    <error-code>500</error-code>
    <location>/general-error.html</location>
</error-page>
<error-page>
    <!-- Unsupported servlet method -->
    <error-code>503</error-code>
    <location>/general-error.html</location>
</error-page>

最も一般的なものをカバーする必要があります。


一般的なエラーページを指定してから、特定のエラーコードを<error-code>タグで上書きできますか?
Qix-モニカは2013年

6
@Tomas:Tomcatの人たちはあなたと同じ問題を抱えていました。これは文字通り仕様で言及されておらず、仕様の図14-10のみであり、web.xmlXSDファイルはそれを証明し<error-code><exception-type>必須ではなくオプションになりました。問題52135を参照してください。
BalusC 2013年

java.sun.com/xml/ns/javaee/web-app_2_5.xsdは<error-page>要素の<description>子を指定しないため、上記のコードをそのままサーブレット2.5のweb.xmlに貼り付けるとXSDが発生します検証エラー。私がそれらをコメントすると、それはうまくいきます、ありがとう!
ラースローファンデンホーク

1
@BalusC:WEB-INF内の(回答に記載されている)general-error.htmlページはどこに配置する必要がありますか?サーブレット2.5に奇妙な問題があります。HTTPエラー403の場合、<error-page>定義を作成し、error403.jspページがWEB-INF内にあります。このため、error403.jspページがロードされると、のリソースへのアクセスが試行されますが、error403.jsp内の画像とCSSが読み込まれず、ページが誤った場所に表示されます。
Jayy、2014

@Kaipa:CSS / JS /画像リソースへのwebcontent相対パスの代わりにURL相対パスを使用するだけです。多くの初心者は、これらのリソースはサーバー側で解決されていると誤って考えていますが、実際にはクライアント側で解決されています。stackoverflow.com/questions/3655316/…
BalusC、2014

23

次のようなこともできます:

<error-page>
    <error-code>403</error-code>
    <location>/403.html</location>
</error-page>

<error-page>
    <location>/error.html</location>
</error-page>

エラーコード403の場合はページ403.htmlを返し、その他のエラーコードの場合はページerror.htmlを返します。


8

また、以下<error-page>を使用して<exception-type>、例外を指定することもできます。

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/errorpages/exception.html</location>
</error-page>

または、次を使用してエラーコードをマッピングします<error-code>

<error-page>
    <error-code>404</error-code>
    <location>/errorpages/404error.html</location>
</error-page>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.