YoilTeller 복사해서 YoilTellerMVC 만든다.
입력을 분리하면 HttpServletRequest request 매개변수를 String으로 year, month, day 각 각 받게 된다. 따라서 request 메서드인 request.getParmeter를 사용하지 않아도 된다.
Spring은 문자를 숫자로 자동 형변환 하므로 매개 변수를 int형으로 바꿔주고, 작업의 parseInt 메서드를 쓰지 않아도 된다.
코드의 수가 줄어든다.
이 상태로 실행시키면
500 Error가 발생한다. 당황하지 말고 Error 메시지를 읽어보자.
"Ambiguous mapping found."은 @Controller에서 @RequestMapping이 잘못되었을 때 발생하는 오류이다. YoilTeller의 mapping이 "/getYoil"이고 실행하려고 하는 YoilTellerMVC의 mapping도 "/getYoil" 이기 때문에 오류가 발생했다. 따라서 YoilTellerMVC의 mapping을 "/getYoilMVC"로 바꿔주자.
출력되는 것을 볼 수 있다.
출력도 별도의 JSP 파일로 빼내자.
View의 위치는 'src/main/webapp/WEB-INF/views'에 만든다.
${year }을 EL(Expression Language)라 한다. 값이 출력될 자리만 만들고, Model 객체를 받으면 이름에 해당하는 값을 꺼내서 응답으로 클라이언트에게 출력된다.
YoilTellerMVC에서 출력 코드를 걷어내고 return "yoil" 한 줄을 입력하면 Spring이 자동으로 우리가 만들었던 /WEB-INF/views/yoil.jsp을 실행한다. yoil은 문자열이기 때문에 main 메서드의 반환타입을 void에서 String으로 바꿔야 한다.
요일을 계산하는 코드를 메서드로 만들기 위해 해당 코드를 드래그해서 우클릭 -> Refactor -> Extract Method 하면 자동생성한다.
getYoil을 문자로 받아야 하기 때문에 위에만 고치고 실행한다.
오류는 아닌 듯한데 그렇다고 잘 나온 것 같지도 않다. 인코딩 형식이 맞지 않아서 그렇다.
출력은 yoil.jsp로 넘겼으므로 jsp파일 맨 상단에 '<%@ page contentType="text/html;charset=utf-8" %>'을 입력한다.
출력이 잘 된다. 인코딩에는 문제가 없다.
??? 숫자 어디 감??? jsp 파일은 잘 출력되었으므로 View에는 문제가 없다.
Controller에 Model을 만들지 않았다. 따라서 매개변수로 Model 객체를 만들고, addAttribute 메서드를 사용해서 model 객체에 값을 담아준다.
잘 출력된다.
'스프링의 정석 > Ch. 02 Spring MVC' 카테고리의 다른 글
11. 관심사의 분리와 MVC패턴 - 원리(1) (0) | 2023.07.06 |
---|---|
ch2_10. 관심사의 분리와 MVC패턴 - 실습(2) (0) | 2023.07.05 |
ch2_09. 관심사의 분리와 MVC패턴 - 이론 (0) | 2023.04.12 |
ch2_08. 텍스트와 바이너리, MIME, Base64 (0) | 2023.04.12 |
ch2_07. HTTP 요청과 응답 - 이론(1) (0) | 2023.04.12 |