RequestDispatcher
のforward()
メソッドとHttpServletResponse
のsendRedirect()
メソッドの違いは何ですか?
これらの方法の例と最適な使用法をリアルタイムの例で誰かが説明できますか?
SendRedirect():
このメソッドはHttpServletResponseインターフェイスで宣言されています
シグネチャ:void sendRedirect(String url)
このメソッドは、クライアント要求を他の場所にリダイレクトしてさらに処理するために使用されます。新しい場所は別のサーバーまたは別のコンテキストで使用できます。Webコンテナーがこれを処理し、ブラウザーを使用して要求を転送します。この要求は、新しいブラウザーとして表示されますリクエスト。これは、クライアント側リダイレクトとも呼ばれます。
Forward():このメソッドは、RequestDispatcherインターフェースで宣言されています。
シグネチャ:forward(ServletRequestリクエスト、ServletResponseレスポンス)
このメソッドは、同じサーバー内でさらに処理するためにリクエストを別のリソースに渡すために使用されます。別のリソースは、サーブレット、jspページ、あらゆる種類のファイルである可能性があります。このメソッドは、forwardメソッドのリクエストが送信されるときにWebコンテナによって処理されますクライアントに通知されない別のリソース。どのリソースがリクエストを処理するかは、ServletContextまたはRequestを使用して2つの方法で取得できるrequestDispatcherオブジェクトで言及されています。これはサーバー側リダイレクトとも呼ばれます。
[〜#〜] a [〜#〜]RequestDispatcher forward()は、同じリクエストを別のリソースに転送するために使用されますが、ServletResponse sendRedirect()は2段階のプロセスです。 sendRedirect()では、Webアプリケーションは、ステータスコード302(リダイレクト)の応答をURLとともにクライアントに返し、要求を送信します。送信されたリクエストは、まったく新しいリクエストです。
[〜#〜] b [〜#〜]forward()はコンテナによって内部的に処理されますが、sednRedirect()はブラウザによって処理されます。
[〜#〜] c [〜#〜]追加のネットワーク呼び出しを必要とするsendRedirect()メソッドよりも高速であるため、同じアプリケーションのリソースにアクセスするときはforward()を使用する必要があります。
[〜#〜] d [〜#〜]forward()ではブラウザは実際の処理リソースを認識せず、アドレスバーのURLは同じままですが、sendRedirect()では転送されたリソースへのアドレスバーの変更。
[〜#〜] e [〜#〜]forward()を使用して別のコンテキストでサーブレットを呼び出すことはできません。この場合、sendRedirect()しか使用できません。
リクエストの転送先である他のサーブレットが同じアプリケーションにある場合にのみ、リクエストディスパッチャーを使用できます。一方、2つのサーブレットが同じアプリケーションまたは異なるアプリケーションに存在する場合は、どちらの場合にもSend Redirectを使用できます。
リクエストは転送され、同じWEBアプリケーションコンポーネントにのみ転送されます。リダイレクトは、異なるアプリケーションリソースの同じサイトにリダイレクトすることも、絶対URLにリダイレクトすることもできます。
リダイレクトはターゲットページのURLを確認できます。ページのURL転送は最初のアクセスのみを確認できますが、作業を行うサーバーがすべて存在します。
呼び出し元オブジェクトと呼び出し先オブジェクト間の要求応答は、同じ要求オブジェクトと応答オブジェクトを共有し、呼び出し元と呼び出し先をリダイレクトして、2つの別々のアクセス要求と応答プロセスに属します。
ジャンプリダイレクトリターンの後に追加する必要があります。そうでない場合は、ページをジャンプしますが、ステートメントの後ろでジャンプも実行します。転送はジャンプページで実行されます。次のコードは実行されません。