본문 바로가기

학원/복기

[Spring] Forward 이동 / Redirect 이동

포워드 이동

 

포워드 이동은 서버 내부에서 현재 웹프로그램의 스레드를 다른 웹프로그램으로 이동하여 응답 처리할 수 있도록 해주는 것을 의미한다.

포워드는 페이지 전환 주체가 서버이며, 서버 내부에서 일어나는 호출이다.

클라이언트의 요청 URL 주소는 변경되지 않으며 Request Scope 속성값을 객체로 제공받아 사용 가능하다. 

 

예제)

 

RedirectController

@Controller
public class RedirectController {
	@RequestMapping("/forward_move")
	public String forward(Model model) {
		//Model 객체를 사용하여 뷰(View)에게 제공할 객체를 속성값으로 저장 - Request Scope
		model.addAttribute("name", "홍길동");
		
		//뷰를 생성하기 위한 뷰이름(ViewName) 반환
		// => Front Controller(DispatchServlet 클래스)는 제공받은 뷰이름을 InternalResourceViewResolver 
		//객체를 사용하여 JSP 문서로 변환하고 JSP 문서로 포워드 이동하여 응답 처리 한다.
		return "display_forward";
	}
}

 

display_forward.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
	<h1>포워드 이동</h1>
	<hr>
	<h2>${name }님, 환영합니다.</h2>
</body>
</html>

 

 


리다이렉트 이동

 

요청 처리 메소드의 반환값(뷰이름)에 redirect 접두사를 사용하여 URL 주소를 반환하면 Front Controller(DispatchServlet 클래스)는 반환받은 뷰이름의 URL 주소를 클라이언트에게 전달한다.

 

리다이렉트는 서버에서 클라이언트(보통은 웹브라우저)에게 요청한 URL에 대한 응답에서 다른 URL로 재접속 하라고 명령을 보내는 것을 의미한다.

 

URL 주소를 전달받은 클라이언트는 브라우저의 요청 URL 주소를 변경하여 URL 주소의 웹프로그램을 요청하고, 실행결과를 응답받아 출력 처리하는데 이를 리다이렉트 이동이라고 한다.

 

리다이렉트 이동은 클라이언트의 URL 주소를 전달하여 페이지를 재요청해 웹프로그램의 실행결과를 제공받아 응답 처리하는 것을 의미한다.

 

 

 

클라이언트의 요청 URL 주소는 변경되지만 Request Scope 속성값은 사용할 수 없다. 

 

예제)

 

RedirectController

//포워드 이동
@RequestMapping("/redirect_move")
public String redirect(Model model) {
	model.addAttribute("name", "임꺽정");
	return "display_redirect";
}
	
//리다이렉트 이동
@RequestMapping("/redirect")
public String redirect() {
	return "redirect:/redirect_move";
}

 

display_redirect.jsp

<h1>리다이렉트 이동</h1>
<hr>
<h2>${name }님, 환영합니다.</h2>

 

리다이렉트 이동

 

 

리다이렉트 이동에서 Model 객체로 저장된 속성값은 전달만 될 뿐, 리다이렉트 이동된 페이지의 요청 처리 메소드와 뷰에서 사용할 수 없다.

Model 객체로 저장된 속성값(객체)은 질의문자열(QueryString)로 요청 페이지에 전달된다.

@RequestMapping("/redirect_move")
public String redirect() {
	return "display_redirect";
}
	
//전달만 될 뿐 실행 할 수 없음
@RequestMapping("/redirect")
public String redirect(Model model) {
	model.addAttribute("name", "임꺽정");
	return "redirect:/redirect_move";
}

 

 

 

요청 처리 메소드의 RedirectAttributes 인터페이스의 매개변수를 작성하여 RedirectAttributes 객체를 Front Controller에게 제공받아 사용할 수 있다.

  • RedirectAttributes 객체 : 리다이렉트 이동되는 페이지의 요청 처리 메소드와 뷰에서 사용 가능한 Request Scope 속성값을 제공하기 위한 객체
    • RedirectAttributes.addFlashAttribute(String attributeName, Objet attributeValue) : Request Scope 속성값을 저장하여 리다이렉트 이동되는 페이지의 요청 처리 메소드와 뷰에게 속성값을 제공하기 위한 메소드
@RequestMapping("/redirect_move")
	public String redirect() {
		return "display_redirect";
	}

@RequestMapping("/redirect")
public String redirect(RedirectAttributes attributes) {
	attributes.addFlashAttribute("name", "임꺽정");
	return "redirect:/redirect_move";
}