B-Teck!

お仕事からゲームまで幅広く

【Java/Servlet】フォワードとリダイレクトの違い

JavaServletを用いて作成されるWEBアプリケーションで、機能間の遷移を行う方法について

・フォワード

取得したリクエストを、別プログラムへのリクエストとして解釈し、内部で処理を引き渡す。
f:id:beatdjam:20150116015649p:plain

・A内でBへのリクエストとして解釈され、処理が行われるため、 Aへ投げたリクエストのレスポンスがBから返却される形となる。
※フォワードを行うための条件として、同一サーバ(JavaVM)上で動作しているプログラムのみを対象としている。

・リダイレクト

取得したリクエストから別プログラムへの遷移命令をレスポンスとして返し、クライアント側が遷移を行う。
f:id:beatdjam:20150116020024p:plain

・図を見れば分かる通り、クライアントからA、クライアントからBへのリクエストは別々に発生しているため、①に付加されていたリクエスト情報を利用することは出来ない。もし必要な情報が存在する場合には、③のリクエスト時に再度リクエスト情報を設定する必要がある。

・一度クライアントに処理を戻し新しいリクエストを発生させるため、フォワードと違って別のサーバ上で動作しているプログラムを対象とすることができる。
※ただし、一度のリクエストで二度通信が行われるため、処理効率は低下する。


・まとめ

同一サーバー内での機能遷移には、フォワードを使う。
別のサーバー上で機能を遷移させたい場合にはリダイレクトを使う。ただし、リクエスト情報の取り扱いには気をつける必要がある。