Spring/Spring MVC

Spring MVC - Redirect와 Forward

jddng 2021. 12. 27. 11:37
728x90
반응형

Redirect와 Forward

 Redirect는 서버가 응답 결과로 준 URL을 클라이언트 측에서 다시 한번 서버에 요청하는 방식이고,

Forward는 URL을 유지하며 Controller에서 요청받은 URL에 따른 메서드를 실행하고,

그 메서드가 또 다른 메서드를 실행시키는 방법을 의미한다.

아래에서 자세히 알아보자.


더보기

메서드의 리턴

  • Controller를 통해 요청 주소와 매핑되어 있는 메소드는 반드시 반환 값을 가져야 한다.
  • 지금까지 문자열, Model, ModelAndView 로 반환해 보았다.
  • 클라이언트에게 전달할 응답을 전해주기 위해 JSP를 지정하는 부분이다.
  • JSP 지정하는 방식은 redirect와 forward 두 가지가 있다.

redirect
  • 클라이언트에게 요청할 주소를 응답 결과로 전달하는 것을 의미
  • 클라이언트가 응답받은 결과로 직접 서버에 요청하게 된다.
  • 클라이언트가 직접 요청하는 것이므로 주소창의 주소는 변경된다.
  • 클라이언트가 새로 요청을 한 것이므로 HttpSevletRequest 객체는 유지되지 않는다.
  • HttpSession 객체는 유지된다.
  • URL의 변화 여부가 필요하다면 Redirect를 사용하는 것이 좋다.

 

testController.java

@Controller
public class testController {
	//redirect 방법
	@GetMapping("/test1")
	public String test1() {
		return "redirect:/sub1";
	}	
    
	@GetMapping("/sub1")
	public String sub1() {
		return "sub1";
	}

}

 클라이언트는 /test1을 요청했는데 redirect:/sub1으로 클라이언트가 다시/sub1을 요청하라고 서버가 전달해준다. 때문에 클라이언트가 sub1을 새로 요청을 하여 주소가 변경된 것을 볼 수 있다.


 

forward
  • 코드의 흐름을 서버상에서만 이동하는 것을 의미한다.
  • 주소창의 주소는 변경되지 않는다.
  • HttpSevletRequest, HttpSession 객체 모두 유지된다.
  • 객체를 재사용하거나 공유해야 한다면 Forward를 사용하는 것이 좋다
@Controller
public class testController {

	//forward 방법
	@GetMapping("/test2")
	public String test2() {
		return "forward:/sub2";
	}
    
	@GetMapping("/sub2")
	public String sub2() {
		return "sub2";
	}
}

 서버 안에서 흐름이 넘어가므로 주소가 변경되지 않으며 HttpServletRequest 객체도 유지가 된다.

728x90
반응형