Redirect/Forward
Redirect
クライアントがエラーurlにリクエストを送信すると、ブラウザはリクエストヘッダの位置アドレスを自動的に読み取り、適切なリクエストを送信します.
クライアントからの要求がGetであろうとPostであろうと、ブラウザからの要求はすべてGetである.
Springでのリダイレクトプロセス
@PostMapping("/register/save")
public String save(User user, Model m) throws Exception{
if(!isValid(user)){
String msg = URLEncoder.encode("잘못된 정보입니다", "utf-8");
m.addAttribute("message", msg);
return "redirect:/register";
}
}
クライアントはregister/saveに要求したが、検証に失敗し、コントローラはビュー名ではなくリダイレクトを返した.if(!isValid(user)){
String msg = URLEncoder.encode("잘못된 정보입니다", "utf-8");
m.addAttribute("message", msg);
return "redirect:/register";
コントローラがリダイレクトを返すと、DispatcherServiceletはリダイレクトをRedirectViewに転送し、RedirectViewが生成した応答ヘッダの位置アドレスを読み出し、ブラウザは要求を自動的に送信します.Forward
ユーザが要求した内容をそのまま正しいアドレスに伝達するプロセス.
@PostMapping("/register/save")
public String save(User user, Model m) throws Exception{
if(!isValid(user)){
String msg = URLEncoder.encode("잘못된 정보입니다", "utf-8");
m.addAttribute("message", msg);
return "forward:/register";
}
}
コントローラは、forwardをDispatcherServiceに渡し、対応するforward文字列をInternalResourceViewに渡します.InternalResourceViewは、DispatcherServiceletにアドレス(要求)を呼び出すことによって、要求アドレスに接続されたメソッドを呼び出す.したがって、forwardはInternalResourceViewによって処理され、内部で行われるプロセスである.
RedirectとForwardの違い
リダイレクトは要求と応答が2回ずつであり,転送は要求と応答が1回ずつである.
Reference
この問題について(Redirect/Forward), 我々は、より多くの情報をここで見つけました https://velog.io/@jooog/Redirect-Forwardテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol