Spring

12. 관심사의 분리와 MVC패턴/실습 - 패스트캠퍼스 백엔드 부트캠프 3기

gkss2tpt 2025. 2. 1. 16:44

1. 분리

  • 입력의 분리
// 년월일을 입력하면 요일을 알려주는 프로그램
@Controller
public class YoilTellerMVC {	// http://localhost:8080/ch2/getYoilMVC?year=2021&month=10&day=1
    @RequestMapping("/getYoilMVC")
    public void main(int year, int month, int day, 
        HttpServletResponse response) throws IOException {
		
        // 2. 작업
        Calendar cal = Calendar.getInstance();
        cal.set(year, month-1, day);
		
        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();	// response객체에서 브라우저로의 출력 스트림을 얻는다.
        out.println("<html>");
        out.println("<head>");
        out.println("</head>");
        out.println("<body>");
        out.println(year + "년 " + month + "월 " + day + "일은 ");
        out.println(yoil + "요일입니다.");
        out.println("</body>");
        out.println("</html>");
    }
}
  • 출력의 분리

  • jsp파일 경로
  • yoil.jsp
<%@ page contentType = "text/html;charset=utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
    <title>Home</title>
</head>
<body>
<P> ${year}년 ${month}월 ${day}일은 ${yoil}입니다. </P>
</body>
</html>
  • yoilError.jsp
<%@ page contentType = "text/html;charset=utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
    <title>Home</title>
</head>
<body>
<h1>
    잘못된 요청입니다. 년, 월, 일을 모두 올바르게 입력해주세요.
</h1>
</body>
</html>
  • 메서드 반환 타입 String - 뷰 이름을 반환
// 년월일을 입력하면 요일을 알려주는 프로그램
@Controller
public class YoilTellerMVC {	// http://localhost:8080/ch2/getYoilMVC?year=2021&month=10&day=1
    @RequestMapping("/getYoilMVC")
    public String main(int year, int month, int day, Model model) throws IOException {
		
    	// 1. 유효성 검사
    	if(!isValid(year, month, day))
    	    return "yoilError";
		
    	// 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);
		
    	return "yoil";	// WEB-INF/views/yoil.jsp
    }

    private boolean isValid(int year, int month, int day) {
        // TODO Auto-generated method stub
        return true;
    }

    private char getYoil(int year, int month, int day) {
        Calendar cal = Calendar.getInstance();
        cal.set(year, month-1, day);
	
        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
        return " 일월화수목금토".charAt(dayOfWeek);
	
    }
}
  • jsp파일경로 지정 파일(코드 변경 가능)

  • 메서드의 반환타입이 없을때 - 맵핑된 URL에 의해 결정됨
  • getYoilMVC.jsp
<%@ page contentType = "text/html;charset=utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
    <title>Home</title>
</head>
<body>
<P> getYoilMVC입니다. </P>
</body>
</html>
  • YoilTellerMVC
@Controller
public class YoilTellerMVC {	// http://localhost:8080/ch2/getYoilMVC?year=2021&month=10&day=1
    @RequestMapping("/getYoilMVC")
    public void main(int year, int month, int day, Model model) throws IOException {
		
//        // 1. 유효성 검사
//        if(!isValid(year, month, day))
//        return "yoilError";
		
        // 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);
		
//        return "yoil";	// WEB-INF/views/yoil.jsp
		
    }

    private boolean isValid(int year, int month, int day) {
	    // TODO Auto-generated method stub
        return true;
    }

    private char getYoil(int year, int month, int day) {
        Calendar cal = Calendar.getInstance();
        cal.set(year, month-1, day);
	
        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
        return " 일월화수목금토".charAt(dayOfWeek);
	
    }
}
  • 메서드의 반환타입이 ModelAndView일때 - Model과 뷰 이름을 반환
@Controller
public class YoilTellerMVC {	// http://localhost:8080/ch2/getYoilMVC?year=2021&month=10&day=1
    @RequestMapping("/getYoilMVC")
    public ModelAndView main(int year, int month, int day) throws IOException {
		
        ModelAndView mv = new ModelAndView();
		
        // 2. 요일 계산
        char yoil = getYoil(year, month, day);
		
        // 3. 계산한 결과를 model에 저장
        mv.addObject("year", year);
        mv.addObject("month", month);
        mv.addObject("day", day);
        mv.addObject("yoil", yoil);
		
        // 4. 결과를 보여줄 view를 지정
        mv.setViewName("yoil");
		
        return mv;
    }
}