스프링 RequestScope

728x90

 

RequestScope

  • 새로운 요청이 발생해 응답결과가 브라우저로 전달 될 때 까지 요청 정보가 담겨있는 Request 객체를 사용할 수 있습니다.
  • 이러한 사용 범위를 RequestScope라고 부릅니다.
  • HttpServletRequest 객체에는 서버 개발자가 필요에 의해 데이터나 객체를 저장 할 수 있고 ReuqestScope 내에서 사용이 가능합니다.
@Controller
public class TestController{
	
	@GetMapping("/test")
	public String test(HttpServletRequest request){
			request.setAttribtue("data1","문자열1");

		return "forward:/test2";	 //redirect 사용시 소멸 되기에 밑에 출력은 null이 된다.
	}

	@GetMapping("/test2")
	public String test(HttpServletRequest request){
	//Model model
	//model.addAttribute("data2","문자열2"); model 로 전송해도 request 영역에 저장됨.
		
		String data1 = (String)request.getAttribtue("data1");
		System.out.println(data1); //문자열1		

		return "test2";	
	}
}

 

test2.jsp

<h3>data1 : ${requestScope.data1} </h3> <!-- forward 시 "문자열1" 전송 됨 -->
		<!-- redirect 시 "null" 전송 됨 -->

Model을 통한 전송

@Controller
public class TestController{
	
	@GetMapping("/test")
	public String test(Model model){
			model.addAttribtue("data1","문자열1");

		return "forward:/test2";	 //model 로 넣으면 request 영역에 들어가기 때문에 
															
	}

	@GetMapping("/test2")
	public String test(HttpServletRequest request){ 
								//HttpServletRequest request 로 받아야 한다.
		
		String data1 = (String)request.getAttribtue("data1"); 		
		System.out.println(data1);		

		return "test2";	
	}
}

ModelAndView로 전송

@Controller
public class TestController{
	
	@GetMapping("/test")
	public ModelAndView test(ModelAndView mv){
			mv.addObject("data1","문자열1");
			mv.setViewName("forward:/test2");
		return mv;	 //ModelAndView 로 넣으면 request 영역에 들어가기 때문에 
															
	}

	@GetMapping("/test2")
	public String test(HttpServletRequest request){ 
								//그래서 request 영역이여서 request로 받아야한다.
		
		String data1 = (String)request.getAttribtue("data1"); 
		System.out.println(data1); 

		return "test2";	
	}
}

객체를 만들어서 전송

@Controller
public class TestController{
	
	@GetMapping("/test")
	public String test(Model model){
			MemberDTO member = new MemberDTO();
			member.setName("홍길동");
			member.setId("hong"):
		
			model.addAttribute("member1",member);
		return "forward:/test2";	 															
	}

	@GetMapping("/test2")
	public String test(HttpServletRequest request){ 
		
		MemberDTO member1 = (MemberDTO)request.getAttribute("member1"); 
		System.out.println(member1.getName); //홍길동
		System.out.println(member1.getId);  //hong

		return "test2";	
	}
}

test2.jsp

<h3>member1.name : ${requestScope.member1.name} </h3>
<h3>member1.id : ${requestScope.member1.id} </h3>

@ModelAttribute 사용시

@Controller
public class TestController{
	
	@GetMapping("/test")
	public String test(@ModelAttribute memberDTO member){
			member.setName("홍길동");
			member.setId("hong"):

		return "forward:/test2";	 															
	}

	@GetMapping("/test2")
	public String test(HttpServletRequest request){ 
		//이 경우 에도 request 로 받아야한다.
		MemberDTO member1 = (MemberDTO)request.getAttribute("member"); 
		System.out.println(member1.getName); //홍길동
		System.out.println(member1.getId);  //hong

		return "test2";	
	}
}
반응형

'Back-End > Spring(Boot)' 카테고리의 다른 글

스프링 Session  (0) 2021.03.06
스프링 Request Scope 빈 주입  (0) 2021.03.06
스프링 Redirect / Forward  (0) 2021.03.06
스프링 Form 커맨드 태그  (0) 2021.03.05
커맨드 객체란?  (0) 2021.03.05