Spring MVC - RequestScope

2020. 9. 11. 19:28Java/Spring

반응형

 

Request

- 브라우저에 의해 새로운 요청이 발생하면 브라우저는 서버에 요청에 관련된 정보를 전송하게 된다.

- 이를 받은 서버는 브라우저가 보낸 요청 정보들을 보관하기 위해 HttpServletRequest 객체를 생성해 요청 정보들을 담아 두게 된다.

- 요청 정보가 담겨 있는 HttpServletRequest 객체는 응답결과가 브라우저로 전송될 때까지 유지되며 사용이 가능하다.

 

 

RequestScope

- 새로운 요청이 발생해 응답결과가 브라우저로 전달 될 때 까지 요청 정보가 담겨 있는 Request 객체를 사용할 수 있다.

- 이러한 사용 범위를 RequestScope라고 부른다.

- HttpServletRequest 객체에는 서버 개발자가 필요에 의해 데이터나 객체를 저장할 수 있고 RequestScope 내에서 사용이 가능하다.

 


Model, ModelView는 전송 데이터를 request 객체에 저장하게 된다. 다라서 forward를 하더라도 받는 쪽에서 Model이나 ModelView로 받으면 값을 받을 수 없다.

@Controller
public class TestController {
	@GetMapping("/test1")
	public String test1(Model model) {
		
		model.addAttribute("data2","문자열 2");
		
		return "forward:/result";
	}
	@GetMapping("/result")
	public String result1(Model model) {
		
		String data2 =(String)model.getAttribute("data2");
		System.out.println(data2);
		
		return "result";
	}
}

따라서 request객체를 통해서 받아야 한다.

 

위 코드를 아래와 같이 수정한다.

@Controller
public class TestController {
	@GetMapping("/test1")
	public String test1(Model model) {
		
		model.addAttribute("data2","문자열 2");
		
		return "forward:/result";
	}
	@GetMapping("/result")
	public String result1(HttpServletRequest request) {
		
		String data2 =(String)request.getAttribute("data2");
		System.out.println(data2);
		
		return "result";
	}
}


ModelAttribute의 경우도 다음과 같이 request객체로 받아와야 한다.

@GetMapping("/test2")
	public String test2(@ModelAttribute("bean1") Databean1 bean) {
		bean.setData1("문자열2");
		bean.setData2("문자열3");
		
		return "forward:/result2";
	}
@GetMapping("/result2")
	public String result2(HttpServletRequest request) {
		
		Databean1 bean = (Databean1)request.getAttribute("bean1"); 
		System.out.println(bean.getData1());
		System.out.println(bean.getData2());
		return "result";
	}

위와 같이 가져온 객체를 request를 통해서 전달하게 되고 그 객체를 request에서 받아와 사용해야한다.  

반응형