0

私の Java Web アプリケーションでエラーを処理するには、以下を使用できます。

  • web.xml ファイルで、次の<error-page>ように定義します。

    <error-page>
        <error-code>500</error-code>
        <location>/file_not_found.html</location>
    </error-page>
    
  • または、struts-config.xml で次の<global-exceptions>ように定義します。

    <global-exceptions>
        <exception
          key="error.global.mesage"
          type="java.lang.Exception"
          path="/pages/error.jsp" />
    </global-exceptions>
    

違いはなんですか?

これらの各オプションはどのような場合に使用する必要がありますか?

両方が同じアプリケーションで定義されている場合はどうなりますか? (両方を定義することは意味がありますか?)

4

2 に答える 2

1

いくつかの単純なコンテンツ(静的ファイル、統計など)を直接提供する単純なサーブレット/ jspsと、ビジネスポータルを提供するより複雑なStrutsベースのアプリを使用したサンプルプロジェクトを見てみましょう。

単純なサーブレット/jspsでスローされたキャッチされない例外。例外情報は、Strutではなく、web.xmlの「error-page」ディレクティブで定義したとおりに表示されます。

Strutsベースのビジネスポータルでスローされたキャッチされていない例外。例外情報は、struts-config.xmlの「global-exceptions」ディレクティブで定義したとおりに表示されます。

クリアランスを増やすために、まれですが、不可能ではありませんが、Strutsフレームワーク自体のバグが例外をスローします。これは、アプリケーションサーバー/サーブレットコンテナによってのみキャッチされ、web.xmlの「エラーページ」ディレクティブを使用して表示されます。

于 2013-02-19T07:10:16.073 に答える
1

1 つ目は、特に 500 秒 (内部サーバー エラー) 用のコンテナー レベルのエラー ページです。

Exception2 つ目は、例外インターセプターのアクション呼び出し中にスローされたすべてのサブクラス専用のフレームワーク レベルのエラー ページです。

例外インターセプターの前後に例外が存在する可能性があります。これは、要件を満たしていると仮定して、両方を宣言する必要があることを意味します。

私はアプリ固有の例外をできるだけアプリに近い場所で処理することを好みます。これは、Struts 2 の宣言型例外処理メカニズムを使用することを、アプリケーション自体の内部のあらゆるものに対して選択することを意味します。ただし、フレームワーク自体、またはコンテナーでさえ、フレームワークがその処理の大部分を実行する前 (または後) に例外をスローする可能性があります。

于 2013-02-19T13:17:08.560 に答える