[ 개념 정리 ] 특정 View 반환 ( return 과 redirect )
Return 과 Redirect
1) Return 이란 ?
• 메서드의 반환타입이 String
- 해당 메서드가 호출되면, 특정 View ( View 템플릿 ) 의 이름을 반환
- 클라이언트의 요청을 처리하고 처리결과에 따라 어떤 화면을 보여줄지 결정
• 예시
@Controller
@RequestMapping("/main")
public class MyController {
@GetMapping("/home")
// home.jsp 파일을 찾아 렌더링
public String home() {
return "home";
}
}
- Controller 클래스의 @RequestMapping("/main") 과 @GetMapping("/home")은 http://localhost8080:/main/home 과
같은 URL 요청을 처리하는 메서드임을 의미
- home() 메서드는 "home"이라는 문자열을 반환하고 이는 home.jsp를 의미한다.
- 따라서 클라이언츠가 /main/home URL을 요청하면 home.jsp 파일이 렌더링되어 브라우저에 표시된다.
※ String 외에 반환 방식 : ModelAndView 반환 , @ResponseBody 어노테이션 사용하여 반환 등
2) Return "redirect:" 이란 ?
• 메서드의 반환타입이 String
- redirect: 접두사는 다른 URL로 리다이렉트 하라는 의미 ( HTTP 리다이렉트 응답 )
- 주로 폼 처리 이후, RPG(Post/Redirect/Get) 패턴에서 사용
• 사용 이유
- 클라이언트의 요청이 완료된 이후, 다른 페이지로 이동시켜야 하는 경우 사용됩니다.
ex) 회원가입 완료 이후, 로그인 페이지 이동
• 예시
@Controller
public class MyController {
@PostMapping("/join")
public String join(User user) {
// 회원 가입 로직
// ...
return "redirect:/login"; // 로그인 페이지로 리다이렉트
}
}
- redirect: 접두사 뒤에 오는 경로는 상대경로 이어야 한다.
- 쿼리파라미터를 함께 전달 가능하다.
ex) redirect:localhost:8080/join?param1=value¶m2=value
- Flash Attribute : RedirectAttributes를 이용하여 일회성으로 사용되는 속성을 다른 요청으로 전달 가능
3) Return 과 "redirect:" 비교
특징 | Rreturn | Redirect: |
목적 | View 렌더링 | 클라이언트가 다른 URL로 새요청 지시 |
URL 변경 여부 | 변경되지 않음 ( URL 유지 ) | 변경됨 |
HTTP 동작 | 서버 내부에서 View 처리 | HTTP 302 리다이렉트 응답 클라이언트에게 전달 |
사용 시점 | 데이터를 뷰로 전달해 바로 렌더링 | 데이터 처리 이후, 페이지 새로고침 or 새로운 경로 이동 |
RPG 패턴 | 지원 X | 지원 |