
画面遷移の方法としては、下記の記事でご紹介させて頂いたディスパッチ(フォワード等)の他に、「リダイレクト」があります。
ディスパッチ(フォワード)と、リダイレクトの違い
リダイレクトは、ディスパッチと違って、一度クライアントに対して「ここにアクセスするように」レスポンスを返すことです。
サーブレットから別サーブレットへの転送も可能です。
構文
リダイレクトの構文は、下記のようにsendRedirectを使います。
response.sendRedirect("リダイレクト対象のURL")
もしくは以下のようにも書けます。(ただ、冗長なので簡単に書ける上記の書き方をすることが多いでしょう。)
1 2 |
response.setStatus(302); response.setHeader("Location", "リダイレクト先のURL"); |
リダイレクトのメリット
フォワードと違って、別アプリケーションにも転送することができる点。
URLが転送先のURLになる点。
リダイレクトのデメリット
- 一度、クライアントに処理を返すため、リクエスト~レスポンスの回数がディスパッチ(フォワード)に比べると、増えてしまう。(パフォーマンスが悪いです。)
- リクエストスコープの値を、次のページに渡すこともできない。
単純に2倍のトラフィックが発生するだけでなくWebサーバーのキューに蓄積されて、要求待ちの遅延につながる可能性があります。(それに対してフォワードは1つのリクエストを同期的に処理するので要求待ちや遅延の心配は全くありません。)
上記のようなデメリットがあるため、あまり同じアプリケーション内の画面遷移にリダイレクトを使うことはありません。
リダイレクトの用途
単純に、外部に転送する際に、リダイレクトを使う。具体的には、以下のような用途でしょう。
- ホームページを移転させたときに一時的に使ったりする。
- 単純に別のサイトを表示させたい場合
また、URLが転送先のURLに変更されるので、同じアプリケーション内でも、下記のような場合にも使うケースがあります。
- 別画面にGETパラメータを送信するので、利用者にURLを隠蔽したい場合
- 同じアプリケーション内の別機能の画面に転送したい場合
特に、機能名と、URLが異なっている場合は、不具合の原因にもなるので、そうした場合は同じWebアプリ内でも、「フォワード」ではなく、「リダイレクト」を使用したりします。
この記事へのコメントはありません。