1. ホーム
  2. jsp

[解決済み] RequestDispatcher.forward()とHttpServletResponse.sendRedirect()の比較

2022-07-07 12:25:55

疑問点

との概念の違いは何ですか? forward()sendRedirect() ?

どのように解決するのですか?

<ブロッククオート

requestDispatcher - forward() メソッド

  1. を使うとき forward メソッドを使用すると、リクエストは同じサーバー内の別のリソースに転送され、さらに処理されます。

  2. の場合は forward の場合、ウェブコンテナはすべての処理を内部で処理し、クライアントやブラウザは関与しません。

  3. いつ forward が呼び出されると requestDispatcher オブジェクト上で呼び出され、リクエストオブジェクトとレスポンスオブジェクトを渡すので、古いリクエストオブジェクトはリクエストを処理する新しいリソース上に存在することになります。

  4. 視覚的に、転送されたアドレスは見えません。

  5. を使用すると forward() メソッドを使う方が sendRedirect .

  6. forwardを使ってリダイレクトしたときに、新しいリソースで同じデータを使いたい場合は request.setAttribute() を使用することができます。

SendRedirect

  1. の場合 sendRedirect の場合、リクエストは別のリソース、別のドメイン、または別のサーバに転送され、さらに処理されます。 別のサーバに転送され、さらに処理されます。

  2. を使用する場合 sendRedirect を使うと、コンテナはリクエストをクライアントやブラウザに転送します。 sendRedirect メソッド内で与えられた URL は、クライアントへの新しいリクエストとして表示されます。

  3. の場合 sendRedirect の呼び出しの場合、ブラウザが新しいリクエストとして扱うため、古いリクエストとレスポンスオブジェクトは失われます。

  4. アドレスバーでは、新しいリダイレクトされたアドレスを見ることができます。透明ではありません。

  5. sendRedirect は、完全に新しいリクエストが作成され、古いリクエストオブジェクトが失われるため、1つの余分なラウンドトリップが必要であるため、遅くなります。ブラウザのリクエストは 2 つ必要です。

  6. しかし sendRedirect では、新しいリソースに同じデータを使いたい場合、データをセッションに保存するか、URL と共に渡す必要があります。

どちらが良いのでしょうか?

どの方法がより有用であるかは、シナリオに依存します。

もし、制御を新しいサーバやコンテキストに移し、完全に新しいタスクとして扱いたい場合は sendRedirect . 一般に、ブラウザでウェブページを再読み込みしたときに安全に操作を繰り返すことができ、結果に影響を与えない場合は、forwardを使用すべきです。

ソース