web-dev-qa-db-ja.com

response.sendRedirect()とrequest.getRequestDispatcher()。forward(request、response)の違いは何ですか

Javaを使用している場合、次のように使用すると、ページジャンプで問題が発生します。

response.sendRedirect("login.jsp")

次に、このURLを取得します:http://localhost:8080/login.jsp

しかし、私が使用する場合

request.getRequestDispathcer("login.jsp").forward(request, response)

次に、このURLを取得します:http://localhost:8080/Shopping/login.jsp(「ショッピング」は私のモジュールの名前です)。

違いは何ですか?

48
roger

違いを簡単に説明するには、

  response.sendRedirect("login.jsp");

コンテキストパスを追加しません(サーブレットがバンドルされているアプリケーション/モジュールを参照します)

しかし、一方

 request.getRequestDispathcer("login.jsp").forward(request, response);

それぞれのアプリケーションのコンテキストパスを追加します

さらに、Redirect requestを使用して、リソースを別のサーバーまたはドメインにリダイレクトします。この制御の転送タスクは、コンテナによってブラウザに委任されます。つまり、リダイレクトはヘッダーをブラウザー/クライアントに送り返します。このヘッダーには、ブラウザーによってリダイレクトされるリソースURLが含まれています。次に、ブラウザは指定されたURLに対して新しいリクエストを開始します。

Forward requestは、呼び出し元のサーバー内で使用可能なリソースに転送するために使用されます。この制御の転送はコンテナによって内部的に行われ、ブラウザ/クライアントは関与しません。

75
Keerthivasan

進む

制御は、呼び出しが行われたサーバー内で利用可能なリソースに転送できます。この制御の転送はコンテナによって内部的に行われ、ブラウザ/クライアントは関与しません。これは、forwardとsendRedirectの大きな違いです。転送が完了すると、必要に応じて追加のパラメーターとともに元の要求オブジェクトと応答オブジェクトが転送されます。

リダイレクト

制御は、リソースを別のサーバーまたはドメインにリダイレクトできます。この制御の転送タスクは、コンテナによってブラウザに委任されます。つまり、リダイレクトはヘッダーをブラウザー/クライアントに送り返します。このヘッダーには、ブラウザーによってリダイレクトされるリソースURLが含まれています。次に、ブラウザは指定されたURLに対して新しいリクエストを開始します。これは新しい要求であるため、古い要求と応答オブジェクトは失われます。

たとえば、sendRedirectは http://google.com から http://anydomain.com に制御を転送できますが、forwardはこれを実行できません。

「セッション」は、転送とリダイレクトの両方で失われません。

ForwardとsendRedirectの違いを視覚的に確認するには、ブラウザのアドレスバーを視覚的に確認します。転送では、リダイレクトには転送されたアドレスは表示されません(ブラウザが関与しないため)。

17
Anish Rai

Forward(ServletRequestリクエスト、ServletResponseレスポンス)とsendRedirect(String url)の単純な違いは

forward():

  1. forward()メソッドは、サーバー側で実行されます。
  2. 要求は、同じサーバー内の他のリソースへの転送です。
  3. forward ()メソッドはサーブレットコンテナによって提供されるため、クライアントのリクエストプロトコルに依存しません。
  4. 要求はターゲットリソースによって共有されます。
  5. このメソッドでは1つの呼び出しのみが消費されます。
  6. サーバー内で使用できます。
  7. 転送されたメッセージは表示できません。透過的です。
  8. Forward()メソッドは、sendRedirect()メソッドよりも高速です。
  9. RequestDispatcherインターフェイスで宣言されています。

sendRedirect():

  1. sendRedirect()メソッドは、クライアント側で実行されます。
  2. 要求は、別のサーバーへの他のリソースへの転送です。
  3. sendRedirect()メソッドはHTTPの下に提供されるため、HTTPクライアントでのみ使用できます。
  4. 宛先リソースに対して新しい要求が作成されます。
  5. 2つの要求と応答の呼び出しが消費されます。
  6. サーバーの内外で使用できます。
  7. リダイレクトされたアドレスを確認できますが、透過的ではありません。
  8. 新しいリクエストが作成されると古いリクエストオブジェクトが失われるため、sendRedirect()メソッドは遅くなります。
  9. HttpServletResponseで宣言されています。
15
Maulik Kakadiya

サーバーからブラウザーにリクエストをリダイレクトしてリダイレクトし、ブラウザーからサーバーにリクエストを再送信します。

2.forwardリクエストを別のサーブレットに送信します(サーブレットからサーブレットへ)。

5
sprite

リダイレクトとリクエストディスパッチャは、あるページから別のページに移動する2つの異なる方法です。新しいページへのリダイレクトを使用している場合、実際にはクライアント側から新しいページへの新しいリクエストが発生しています。そのため、URLの変更を確認できます。リダイレクトは新しいリクエストであるため、古いリクエスト値はここでは使用できません。

2
Lijo