본문 바로가기
Framework/Spring Framework

[Spring Framework] 컨트롤러(Controller)

by 사용자 원동호 2018. 7. 25.

컨트롤러 클래스 제작

 

이전 포스팅에서도 말했지만 최초 클라이언트로 요청이 들어왔을 때, DispatcherServlet이 컨트롤러로 요청을 하게된다.

그리고 컨트롤러는 요청에 따라 작업을 한 후 뷰쪽으로 데이터를 전달한다.

 

컨트롤러 클래스 제작 순서

1. @Controller를 이용한 클래스 생성

2. @RequstMapping을 이용한 요청 경로 지정

3. 요청 처리 메소드 구현

4. 뷰 이름 리턴

 

뷰에 데이터 전달

컨트롤러에서 로직 수행 후 뷰페이지를 반환 한다. 이때 뷰에서 사용하게 될 데이터를 객체로 전달 할 수 있다.

 

1)Model 클래스를 이용한 데이터 전달

HomeController.java

@RequestMapping("/tests") 	
//Model 객체를 Parameter로 받음. 		
public String test(Model model){ 
	//Model 객체에 id라는 값에 데이터를 담음. 		
	model.addAttribute("id", 123456); 
	return "test"; 	
} 

test.jsp

// < 컨트롤러에서 전달 받은 Model객체의 속성을 이용한다. 
test.jsp 홈페이지 입니다. ${id} 

${ } 를 사용하게 되면 Model객체에서 설정한 값을 출력할 수 있음 . 위에서는 설정한 123456으로 출력된다.

 

2)ModelAndView 클래스를 이용한 데이터 전달

Model에서는 단지 Model객체에 데이터만 담았지만 ModelAndView에서는

데이터와 뷰 이름 설정까지할 수 있고, 반환값으로는 ModelAndView객체를 반환해야한다.

HomeController.java

@RequestMapping("/tests") 	
public ModelAndView test(){ 		
	//ModelAndView 객체 생성.
	ModelAndView mv=new ModelAndView();  		
	//Model 객체에 데이터를 담음.
	mv.addObject("id", 30); 
	//뷰 이름 설정	
	mv.setViewName("home");  		
	return mv; 	
} 

3)@ResponseBody를 사용한 데이터 전달

//@ResponseBody가 없기때문에단순 Mapping 페이지 반환 
@RequestMapping("/yeah2") 
public String test1(){     
	return "test"; 
}  

//@ResponseBody사용하지않았기때문에 클라이언트에서 요청시 500에러(타입에러) 
//반환 타입이 int라 int형을 반환하고싶다면 
//@ResponseBody를 붙여주자 
@RequestMapping("/yeah2") 
public int test1(){ 
	return 1; 
}  

//@ResponseBody가 붙었기 때문에 view를 반환하는것이아닌 단순 String객체를 반환한다. 
@RequestMapping("/yeah2") 
@ResponseBody public String test1(){     
	return "test"; 
}  

//List 반환 
@RequestMapping("/yeah") 
@ResponseBody public List<String> test2(){ 	
	List<String> a=new ArrayList<String>(); 	
	a.add("test"); 	
	a.add("test2"); 	
	a.add("test3"); 	
	return a; 
}  

//Map<Key,Value>형태기 때문에 클라이언트에서 값 요청시 JSON형태(jackson api덕분에)로 값이넘어간다. 
//Map은 key값이 unique하다. 
@RequestMapping("/yeah") 
@ResponseBody public Map<Object,String> test2(){ 	
	Map<Object,String> a=new HashMap<Object,String>(); 	
	a.put("id", "test"); 	a.put("ids", "test2"); 	
	a.put("idy", "test3"); 	
	return a; 
}  

//List  "<>" type에 객체(VO or DTO)를 넣으면 retrun값이 JSON형태로 넘어간다. 
//(@ResponseBody + jacksonapi덕분에) 
@RequestMapping("/yeah") 
@ResponseBody 
public List<MemberVO> test2(){
	return mservice.selectMember(); 
} 

댓글0