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
(「ショッピング」は私のモジュールの名前です)。
違いは何ですか?
違いを簡単に説明するには、
response.sendRedirect("login.jsp");
コンテキストパスを追加しません(サーブレットがバンドルされているアプリケーション/モジュールを参照します)
しかし、一方
request.getRequestDispathcer("login.jsp").forward(request, response);
それぞれのアプリケーションのコンテキストパスを追加します
さらに、Redirect requestを使用して、リソースを別のサーバーまたはドメインにリダイレクトします。この制御の転送タスクは、コンテナによってブラウザに委任されます。つまり、リダイレクトはヘッダーをブラウザー/クライアントに送り返します。このヘッダーには、ブラウザーによってリダイレクトされるリソースURLが含まれています。次に、ブラウザは指定されたURLに対して新しいリクエストを開始します。
Forward requestは、呼び出し元のサーバー内で使用可能なリソースに転送するために使用されます。この制御の転送はコンテナによって内部的に行われ、ブラウザ/クライアントは関与しません。
進む
制御は、呼び出しが行われたサーバー内で利用可能なリソースに転送できます。この制御の転送はコンテナによって内部的に行われ、ブラウザ/クライアントは関与しません。これは、forwardとsendRedirectの大きな違いです。転送が完了すると、必要に応じて追加のパラメーターとともに元の要求オブジェクトと応答オブジェクトが転送されます。
リダイレクト
制御は、リソースを別のサーバーまたはドメインにリダイレクトできます。この制御の転送タスクは、コンテナによってブラウザに委任されます。つまり、リダイレクトはヘッダーをブラウザー/クライアントに送り返します。このヘッダーには、ブラウザーによってリダイレクトされるリソースURLが含まれています。次に、ブラウザは指定されたURLに対して新しいリクエストを開始します。これは新しい要求であるため、古い要求と応答オブジェクトは失われます。
たとえば、sendRedirectは http://google.com から http://anydomain.com に制御を転送できますが、forwardはこれを実行できません。
「セッション」は、転送とリダイレクトの両方で失われません。
ForwardとsendRedirectの違いを視覚的に確認するには、ブラウザのアドレスバーを視覚的に確認します。転送では、リダイレクトには転送されたアドレスは表示されません(ブラウザが関与しないため)。
Forward
(ServletRequestリクエスト、ServletResponseレスポンス)とsendRedirect
(String url)の単純な違いは
forward():
forward()
メソッドは、サーバー側で実行されます。forward ()
メソッドはサーブレットコンテナによって提供されるため、クライアントのリクエストプロトコルに依存しません。sendRedirect()
メソッドよりも高速です。RequestDispatcher
インターフェイスで宣言されています。sendRedirect():
sendRedirect()
メソッドは、クライアント側で実行されます。sendRedirect()
メソッドはHTTP
の下に提供されるため、HTTP
クライアントでのみ使用できます。sendRedirect()
メソッドは遅くなります。HttpServletResponse
で宣言されています。サーバーからブラウザーにリクエストをリダイレクトしてリダイレクトし、ブラウザーからサーバーにリクエストを再送信します。
2.forwardリクエストを別のサーブレットに送信します(サーブレットからサーブレットへ)。
リダイレクトとリクエストディスパッチャは、あるページから別のページに移動する2つの異なる方法です。新しいページへのリダイレクトを使用している場合、実際にはクライアント側から新しいページへの新しいリクエストが発生しています。そのため、URLの変更を確認できます。リダイレクトは新しいリクエストであるため、古いリクエスト値はここでは使用できません。