JSP/サーブレットアプリケーションで、処理中のページから別のページ(ファイル)へ処理を移す場合、次の2つの方法があります。
response.sendRedirect("遷移先のページ");
application.getRequestDispatcher("転送先のページ").forward(request,response);
しかし、sendRedirectメソッドによる移動は「リダイレクト」、forwardメソッドによる移動は「フォワード」と呼ばれ、内部的な挙動も性質もまったく異なるものです。ユーザーからは同じように見えますが、開発者はこれらの違いを把握しておく必要があります。
まず、リダイレクトとフォワードの挙動がどのように異なっているのかを簡単に説明しましょう。
リダイレクトの場合、クラアイアントがページXを要求すると、サーバがページYを要求する指示をクライアントに戻します。これによって“クライアントは自動的に”ページYを要求し、結果としてページYがクライアントに戻されます(ページXとページYは、必ずしも同一サーバからのレスポンスではない)。これに対しフォワードは、クライアントがページXを要求すると、“サーバ内で”ページXからYへ処理が移送され、ページYが応答として戻されます(ページXとページYは、必ず同一サーバからのレスポンス)。
以上の説明を図示すると以下のようになります。
この結果、「リダイレクト」と「フォワード」には、以下のような違いが発生します。
以上、リクエストとフォワードとは一見似通った機能であるにもかかわらず、内部的にはまったくといっていいほど異なるものであり、プログラミングにおいてもその違いを十分に意識して使い分けられるようにしてください。
Copyright © ITmedia, Inc. All Rights Reserved.