2009-03-10 8 views

答えて

6

これは2つの非常に異なる処理を行うため、効率性を決めるだけではありません。

リダイレクトを送信すると、ブラウザが別のURLに送信されます。そのURLはブラウザに表示されます。あなたはそれを望むかもしれません。たとえば、POST後に、結果ページを再掲載せずにリロードできないようにするには、おそらくGETページにリダイレクトする必要があります。一方、サーブレットコンテナ内からのみアクセス可能な「ページ」にリダイレクトすることはできません。

ディスパッチは余分なラウンドトリップがないという点でより効率的ですが、同じWebアプリケーションのコンテキストでのみ動作します(設定した場合は同じサーブレットコンテナ内で動作します)。また、ユーザーが最初にページにアクセスするために使用したURLは、後でチェーン内のサーブレットが呼び出されるURLとは異なり、混乱する可能性があります。ディスパッチ・パターンは、実際のリクエストの前または後(ServletFilterの代わりに)またはエラー・ページのための余分な処理によく使用されます。

ディスパッチを使用してリクエスト属性を渡すことはできますが、リダイレクトではクエリパラメータのみを渡すことができます。 POSTとしてリダイレクトすることはできません(そのため、添付できるデータの量は限られています)。リダイレクトのすべてのクエリパラメータは、ユーザーに表示されます。

0

sendRedirectより高速であるため、コントロールを別のドメインに転送する必要がある場合はリダイレクトを使用する必要があるため、転送は効率的です。

フォワードリクエストを呼び出すと、リクエストは、別のリソースがリクエストを処理しようとしていることをクライアントに知らされることなく、サーバー上の別のリソースに送信されます。このプロセスは、Webコンテナ内で完全に行われます。 一方、sendRedirectメソッドが呼び出されると、Webコンテナはブラウザに戻り、新しいURLを要求する必要があることを示します。 ブラウザは完全に新しい要求を発行するため、リダイレクトが発生する前に要求属性として格納されているオブジェクトは失われます。 この余分な往復により、リダイレクトは転送より遅くなります。

関連する問題