스프링 컨트롤러 메서드의 반환타입(String, void, ModelAndView)
컨트롤러 메서드의 반환 타입에는 여러 가지가 올 수 있는데, 오늘은 String, void, ModelAndview를 공부해보자.
1. String
º 반환타입이 String 이면 return 값으로는 jsp파일명을 적어준다.
º 나머지 경로와 확장자는 써줄 필요가 없다.
- why? servlet-context.xml 파일에서 view의 경로를 지정해주는 부분이 있다.
- 프로젝트 파일 - src - main - webapp - WEB-INF - spring - appServlet - servlet-context.xml
- prefix(접두사)와, suffix(접미사)를 지정해주면 따로 경로와 확장자를 지정해주지 않아도 자동으로 붙게 된다.
자동으로 설정이 되어있음. 원하는 대로 바꿔도 된다.
º 이 방법은 Model객체에 데이터를 담아서 view로 보내주는 방법이다.
Model를 파라미터로 받고, model.addAttribute(key, value) 형식으로 써주면 된다.
@RequestMapping("/getYoilMVC")
public String main(int year, int month, int day, Model model) throws IOException {
// 요일 계산
char yoil = getYoil(year, month, day);
// 계산한 결과를 model에 저장
model.addAttribute("year", year);
model.addAttribute("month", month);
model.addAttribute("day", day);
model.addAttribute("yoil", yoil);
return "yoil"; // /WEB-INF/views/yoil.jsp를 이용해서 결과물을 보여주겠다 라는 뜻!
// 근데 경로와 확장자 부분은 매번 똑같으니까 공통된 부분은 빼고 view이름만 적도록 하는 것!
}
2. void
º 반환 타입이 void면 리턴 값이 없게 되는데, 이땐 Mapping 된 URL에 의해 view의 이름이 결정된다.
URL과 같은 이름의 jsp파일이 view가 되는 것이다.
º 이 때도 String일 때와 마찬가지로 Model에 데이터를 담아서 view에 보내게 된다.
3. ModelAndView
º ModelAndView는 이름에서도 알 수 있듯, Model과 View를 합친 것이다.
º 이땐, 매개변수에 Model객체를 사용하지 않고 메서드 안에서 ModelAndView를 만들어 줘야 한다.
º 메서드는 하나의 값만 반환할 수 있는데, 여기서는 Model과 View를 같이 반환해야 하기 때문에 두 개를 같이 담을 수
있는 객체(ModelAndView)를 생성해주는 것이다.
º 사용법은 Model과 비슷하지만 return값이 ModelAndView가 된다. (요즘 잘 쓰지 않음)
@RequestMapping("/getYoilMVC")
public String main(int year, int month, int day) throws IOException {
ModelAndView mv = new ModelAndView();
//결과 저장
mv.addObject("year", year);
mv.addObject("month", month);
mv.addObject("day", day);
mv.addObject("yoil", yoil);
//결과를 보여줄 view를 지정
mv.setViewName("yoil"); //String일 때와 마찬가지로 view이름만 적어준다.
//ModelAndView 반환
return mv;
}