2020. 9. 10. 19:56ㆍJava/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의 페이지가 나오게 된다.
'Java > Spring' 카테고리의 다른 글
Spring MVC - RequestScope 빈 주입 (0) | 2020.09.11 |
---|---|
Spring MVC - RequestScope (0) | 2020.09.11 |
Spring MVC - Form 커스텀 태그 요소(select,checkbox,radio) (0) | 2020.09.09 |
Spring MVC - Form 커스텀 태그 요소(1) (0) | 2020.09.09 |
Spring MVC - Form 커스텀 태그 (0) | 2020.09.09 |