객체 지향적 설계의 핵심적 요소
@Controller
public class YoilTeller {
@RequestMapping("/getYoil")
public void main(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 1. 입력
String year = request.getParameter("year");
String month = request.getParameter("month");
String day = request.getParameter("day");
int yyyy = Integer.parseInt(year);
int mm = Integer.parseInt(month);
int dd = Integer.parseInt(day);
// 2. 처리
Calendar cal = Calendar.getInstance();
cal.set(yyyy, mm - 1, dd);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
char yoil = " 일월화수목금토".charAt(dayOfWeek);
// 3. 출력
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.println(year + "년 " + month + "월 " + day + "일은 ");
out.println(yoil + "요일입니다.");
out.close();
}
}
@Controller
public class YoilTeller {
@RequestMapping("/getYoil")
// HttpServletRequest를 사용하지 않고 개별 매개변수로 직접 받을 수 있음 -> 입력을 분리
public void main(int year, int month, int day, HttpServletResponse response) throws IOException{
// 2. 처리
Calendar cal = Calendar.getInstance();
cal.set(yyyy, mm - 1, dd);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
char yoil = " 일월화수목금토".charAt(dayOfWeek);
// 3. 출력
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.println(year + "년 " + month + "월 " + day + "일은 ");
out.println(yoil + "요일입니다.");
out.close();
}
}
//yoilTellerMVC.java
@Controller
public class YoilTellerMVC {
@RequestMapping("/getYoilMVC")
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
}
private char getYoil(int year, int month, int day) {...}
private boolean isValid(int year, int month, int day) {...}
}
<%--yoil.jsp--%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<html>
<head>
<title>YoilTellerMVC</title>
</head>
<body>
<h1>${year}년 ${month}월 ${day}일은 ${yoil}요일입니다.</h1>
</body>
</html>
<%--yoilError.jsp--%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<html>
<head>
<title>YoilTellerMVC</title>
</head>
<body>
<h1>잘못된 요청입니다. 다시 요청해 주세요.</h1>
<h1>year, month, day를 모두 올바른 값으로 입력하셔야합니다. </h1>
</body>
</html>
View가 매핑된 URL에 의해 결정됨
메서드의 매개변수로 Model을 주는것이 아니라 메서드 내부에서 ModelAndView 객체 생성
@RequestMapping("/getYoilMVC")
public ModelAndView main(int year, int month, int day) {
//1. ModelAndView 객체 생성 & 기본 뷰 지정
ModelAndView mv= new ModelAndView();
mv.setViewName("yoilError");
// 2. 유효성 검사
if(!isValid(year, month, day))
return mv;
// 3. 처리
char yoil = getYoil(year, month, day);
// 4. Model에 작업 결과 저장
mv.addObject("year", year);
mv.addObject("month", month);
mv.addObject("day", day);
mv.addObject("yoil", yoil);
//5. 작업 결과를 보여줄 뷰 이름 지정
mv.setViewName("yoil);
// 6. ModelAndView 반환
return mv;
}
- 클라이언트의 요청이 들어왔을때 DispatcherServlet이 입력을 처리하고 Model 객체를 생성
- 해당하는 Controller에서 처리 후 처리된 결과를 Model에 저장 후 view 이름 반환
- DispatcherServlet이 전달받은 Model을 View에 전달
- View에서 작업결과를 읽어서 응답을 클라이언트에게 전송