ForwardではなくRedirectをした場合
1~5まではSpringMVCの大きな流れを参照
6. View名の代わりにredirectが入った文字列を返す。(ex. return “redirect:/member/signup”;)
7. ViewResolverをスキップし、RedirectViewを通じて応答ヘッダーを作り出し、クライアントに応答を伝える。 (302: redirect)
8. クライアントは応答を受けて、ステータスコードが3xxだからLocationに書かれているurl(/member/signup)で再リクエストするべきだと考え、ブラウザはLocationのurlで自動的に再リクエストする。
9. Dispatcher Servletで再び要請を受けてControllerに要請を伝達した後、既存SpringMVCの大きな流れの6の過程を進行する。
Redirectを使用する理由
- Forward
- 次に移動したURLに要請情報をそのまま伝達する。
- そのため、ユーザーが最初に要請した要請情報が次のURLでも有効である。
- Redirect
- 再要請を送るため、最初の要請情報はこれ以上有効ではなくなる。
- 例えば、postで登録しながら、リロードをしたという。
Web Browserの更新は、最後にサーバーに転送したデータを再送信するため、Forwardの場合、同じデータが複数回登録されてしまう可能性がある。
この時、Redirectは最初の要請情報がもはや有効ではないため、同じデータが何度も登録されない。