1

私は現在、レガシーICEFaces 1.8.2 Webアプリケーションを維持しておりweb.xml、アプリケーションがエラーを生成するたびに、そのファイル内に外部URLを定義できるかどうか疑問に思っていました。

もちろん、主な理由は、デフォルトのTomcat6エラーページを顧客に表示しないことです。.warまた、私の会社の別の部門がそれらのページのコンテンツを管理しているため、アプリケーションのファイル内にコンテンツを含めることができません。

特に、エラー404、500、503のカスタムページを表示することに興味があります。

アプリケーションのweb.xmlファイルでこの変更を試してみました。

<error-page>
    <error-code>500</error-code>
    <location>http://myproduction-site.com/error/HTTP_INTERNAL_SERVER_ERROR.html</location>
</error-page>
<error-page>
    <error-code>404</error-code>
    <location>http://myproduction-site.com/error/HTTP_NOT_FOUND.html</location>
</error-page>

ただし、ファイル内でこれらの値を指定することは違法だと思いweb.xmlます。

それが役立つ場合は、Tomcat6サーバーの前に2台のApacheサーバーがあります。スティッキーセッションで負荷分散を行っています。Tomcatサーバー内でエラーが発生するたびにこれらのページにリダイレクトするようにApacheサーバーに指示することは可能でしょうか?

私が考慮していないかもしれない他の選択肢はありますか?

お手数をおかけしますが、よろしくお願いいたします。

4

1 に答える 1

0

これはによっては不可能web.xmlです。

エラーページの場所は、引数として渡されたときに目的の結果を生成するリソースパスを正確に参照する必要がありますRequestDispatcher#forward()。そのメソッドは外部URLを受け入れません。Webアプリ自体のリソースのみを受け入れます。

最善の策は、エラーページをローカルに作成し、それによって外部エラーページをインポートすることです。<iframe>方法の1つは、次のようなHTMLを使用することです。

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>HTTP Internal Server Error</title>
        <style>
            html, body, iframe {
                margin: 0;
                padding: 0;
                width: 100%;
                height: 100%;
            }
            html, body {
                overflow: hidden;
            }
        </style>
    </head>
    <body>
        <iframe src="http://myproduction-site.com/error/HTTP_INTERNAL_SERVER_ERROR.html"></iframe>
    </body>
</html>

もう1つの方法は、JSTLでレガシーJSPページを使用すること<c:import>です。これは、iframeを必要とせずにターゲットURLのHTML応答全体を現在の応答に文字通り埋め込みます(はい、実際にはJSPです。Facelets<c:import>ではサポートされていません)。

<%@taglib prefic="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:import url="http://myproduction-site.com/error/HTTP_INTERNAL_SERVER_ERROR.html" />

このエラーページにCSS/JS / imageファイルやなどのフォームへの相対<script src="some.js">URL参照が含まれている場合、それらはすべて失敗することに注意してください。エラーページ自体にフレームから抜け出すJavaScriptが含まれていない場合、絶対URLに修正できない場合は、iframeが唯一の手段です(最近のほとんどのWebサイトには、フィッシング攻撃を防ぐためにJavaScriptが含まれています)。 )。

于 2012-11-21T02:15:35.787 に答える