Spring MVC - Redirect, Forward

2020. 9. 10. 19:56Java/Spring

반응형

- Spring MVC는 요청이 발생되면 요청 주소를 분석하여 그와 매핑되어 있는 메서드를 호출하고 메서드가 반환하는 정보를 토대로 응답결과를 생성하여 클라이언트에게 전달한다.

 

 

다음과 같이 data1에 100을 전달하는 작업을 한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="test1?data1=100">test1</a>
</body>
</html>

 

 

Redirect

 

Redirect는 서버가 클라이언트에게 요청할 주소를 응답결과로 전달하는 것을 의미합니다.

클라이언트는 응답결과로 받은 요청주소를 직접 요청하게 됩니다.

브라우저가 요청하는 것이므로 주소창의 주소는 변경됩니다.

Redirect는 새로운 요청이 발생하는 것이므로 HttpServletRequest 객체는 소멸 후 새롭게 생성되며 HttpSession 객체는 그대로 유지됩니다.

 


@Controller
public class TestController {
	@GetMapping("/test1")
	public String test1(WebRequest request) {
		String data1 = request.getParameter("data1");
		System.out.println(data1);
		return "redirect:/sub1";
	}
	
	
	@GetMapping("/sub1")
	public String sub1(WebRequest request) {
		String data1 = request.getParameter("data1");
		System.out.println(data1);
		return "sub1";
	}
}

컨트롤러에 위와 같이 주고서 test1에 접근을 하면 test1에서 메서드 작업을 하고서 sub1로 redirect를 하게 된다.

위 작업은 새로운 request 요청이 들어오게 되므로 데이터가 넘어가지 않고 주소창이 sub1주소로 이동된다.

 

 


forward

 

코드의 흐름을 서버상에서만 이동하는 것을 의미합니다.

브라우저는 다른 곳으로 흐름이 이동되었다는 것을 알 수 없기 때문에 주소창의 주소는 변경되지 않습니다.

HttpServletRequest, HttpSession 모두 유지됩니다.

@Controller
public class TestController {
	@GetMapping("/test1")
	public String test1(WebRequest request) {
		String data1 = request.getParameter("data1");
		System.out.println(data1);
		return "forward:/sub1";
	}
	
	
	@GetMapping("/sub1")
	public String sub1(WebRequest request) {
		String data1 = request.getParameter("data1");
		System.out.println(data1);
		return "sub1";
	}
}

위와 같이 forward를 하게 된다면 redirect와 다르게 request객체가 살아있으므로 데이터가 전달이 된다.

주소창은 이동하지 않았지만 sub1의 페이지가 나오게 된다.

반응형