코드의 흐름
- 웹 어플리케이션은 브라우저가 서버에 요청을 하면 요청 정보를 분석하고 응답 결과를 생성하여 브라우저로 전달하는 과정을 거칩니다.
- 여기에서 서버의 동작은 어떤 분야를 가지고 개발을 하느냐에 따라 달라지게 됩니다.
- 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 |
댓글