사용자가 요청이 들어오면 DispatcherServlet이 입력을 처리한후, Model을 해당 controller에게 넘겨준다. controller가 처리한 결과를 다시 Model에 저장, Dispatcherservelt은 그 결과를 view한테 전달한다.
view는 작업결과를 읽어서 응답을 만들어내어서 클라이언트에 전달.
@RequestMapping("/getYoil")
public String main(int year,int month,int day, Model model){
//1.유효성 검사
if(!isvalid(year, month, day))
return "yoilError"; // 유효하지 않으면, /WEB-INF/views/yoilError.jsp로 이동
//2.처리
char Yoil = getYoil(year,month,day);
//3.Model에 작업 결과 저장
model.addAttribute("year", year);
model.addAttribute("month", month);
model.addAttribute("day", day);
model.addAttribute("yoil", yoil);
//4.작업 결과를 보여줄 view의 이름을 변환
return "yoil"; //WEB-INF/views/yoil.jsp
}
view를 분리하면 상황에 따라 보고싶은 view를 분리할 수 있어서 편리하다.(관심사 분리)
@RequestMapping("/getView")
public String main(int a, int b, int c){
.....
return "strView"; // /WEB-INF/views/strView.jsp
}
return 타입이 String인 이유는 view(strView)가 String이기 때문이다. return 해주는 값이 view이다.
@RequestMapping("/getView")
public void main(int a, int b, int c){
......
}
void 메서드의 경우에는 RequestMapping에서 선언된 getView가 뷰이름이다.
public ModelAndView main(int a,intb,int c){
//1. ModelAndView 생성
ModelAndView mv = new ModelAndView();
//2. 처리
int result = 3;
//3 ModelAndView에 작업한 결과를 저장
mv.addObject("a",a); // 인수에서 가져온 값을 처리해서 mv에 넣어준다.
mv.addObject("b",b);
//4.작업 결과물 보여줄 View의 이름을 지정
mv.setViewName("MAV");
//5.ModelAndView반환
return mv;
}
model과 view를 동시에 저장하는 객체를 만드는 방법, 잘 안쓴다.