SPRING

[SPRING] Redirect와 Forward

예나부기 2021. 7. 24.

코드의 흐름

  • 웹 어플리케이션은 브라우저가 서버에 요청을 하면 요청 정보를 분석하고 응답 결과를 생성하여 브라우저로 전달하는 과정을 거칩니다.
  • 여기에서 서버의 동작은 어떤 분야를 가지고 개발을 하느냐에 따라 달라지게 됩니다.
  • Spring MVC는 요청이 발생되면 요청 주소를 분석하여 그와 매핑되어 있는 매서드를 호출하고 매서드가 반환하는 정보를 토대로 응답결과를 생성하여 클라이언트에게 전달합니다.

매서드의 리턴

  • Controller를 통해 요청 주소와 매핑되어 있는 매서드는 반드시 무언가를 반환해야 합니다.
  • 지금까지는 문자열, Model, ModelAndView를 반환해 보았다.
  • 이들은 모두 브라우저에게 전달할 응답결과를 생성하기 위한 jsp를 지정하는 부분
  • 이 밖에도 다양한 정보를 반환할 수 있으며, 이를 토대로 동작을 제어할 수 있습니다.

Redirect

  • Redirect는 서버가 클라이언트에게 요청할 주소를 응답결과로 전달하는 것을 의미
  • 클라이언트는 응답결과로 받은 요청주소를 직접 요청하게 된다.
  • 브라우저가 요청하는것이므로 주소창의 주소는 변경된다.
  • Redirect는 새로운 요청이 발생하는 것이므로 HttpServletARequest객체는 소멸 후 새롭게 생셩되며 HttpSession객체는 그대로 유지된다.

예제

1) index.jsp 생성

<%@ 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>Redirect</a><br/>

</body>
</html>

2) TestController 생성

@Controller
public class TestController {

	@GetMapping("/test1")
	public String test1() {
	//test1.jsp를 찾아 그 결과를 브라우저에 응답
		return "test1";
	}
}

3) test1.jsp 생성

<%@ 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>
	<h1>test1</h1>
</body>
</html>

 

응답 결과를 다르게 변경해보면?

1) TestController 수정

@Controller
public class TestController {

	@GetMapping("/test1")
	public String test1() {
	//test1.jsp를 찾아 그 결과를 브라우저에 응답
		return "test1";
	}
    
    @GetMapping("/sub1")
	public String test1() {
	//sub1.jsp를 찾아 그 결과를 브라우저에 응답
		return "sub1";
	}
    
}

2) sub1.jsp 만들기

<%@ 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>
	<h1>sub1</h1>
</body>
</html>

3) test1 매소드를 실행하면 응답결과로 sub1매소드를 요청하라는 메세지를 브라우저에 전달해보기

@Controller
public class TestController {

	@GetMapping("/test1")
	public String test1() {
	//sub1이라는 요청을 return
		return "redirect:/sub1";
	}
    
    @GetMapping("/sub1")
	public String test1() {
	//sub1.jsp를 찾아 그 결과를 브라우저에 응답
		return "sub1";
	}
    
}

 

Forward

  • 코드의 흐름을 서버상에서만 이동하는 것을 의미
  • 브라우저는 다른 곳으로 흐름이 이동되었다는 것을 알 수 없기 때문에 주소창의 주소는 변경되지 않음
  • HttpServletRequest, HttpSession 모두 유지

예제

 

1) index.jsp 생성

<%@ 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>Redirect</a><br/>
    
    <a href="test2>Forward</a><br/>

</body>
</html>

2) TestController 생성

@Controller
public class TestController {

	@GetMapping("/test2")
	public String test2() {
	//코드의 흐름을 sub2를 요청하는 쪽으로 이동
		return "forward:/sub2";
	}
    
   	 @GetMapping("/sub2")
	public String sub2() {
	//sub2라는 jsp 요청을 return
		return "sub2";
	}

}

 

'SPRING' 카테고리의 다른 글

[SPRING] RequestScope Bean 주입  (0) 2021.07.26
[SPRING] Request Scope  (0) 2021.07.25
[SPRING] FORM TAG 요소 - 2  (0) 2021.07.23
[SPRING] FORM TAG 요소 - 1  (0) 2021.07.21
[SPRING] Form 커스텀 태그  (0) 2021.07.20

댓글