return "yoil" // WEB-INF/views/yoil.jsp
3) Dispatcher servlet가 출력(View)에 전달~ (응답을 만들어내서 클라이언트에 전송!) <h1>${year}년 ${month}</h1>
## 4. 실습
- EL (Expression Language)
## 5. ModelAndView
- 매개변수에 model을 선언하지 않으면, ModelAndView 객체를 직접 생성 & 결과지정 & 뷰지정 & mv 반환하는 과정을 거침 => DispatcherServlet이 view에 model을 전달!
## 6. 컨트롤러 메서드의 반환타입
- [String] : 뷰 이름을 반환
- return "yoil"
- [Void] : 맵핑된 url의 끝단어가 뷰 이름
- @RequestMapping("/yoil")
- [ModelAndView] : Model과 뷰 이름을 반환
- ModelAndView mv = new ModelAndView();
- mv.setViewName("yoil");
- return mv;
<hr>
```java
StringJoiner paramList = new StringJoiner(", ", "(", ")");
// 구분자, 접두사, 접미사
1) Reflection API (-parameters 옵션 / jdk1.8 ↑ 이상부터 가능!)
2) Class file을 직접 읽는 방법
mc.main {
hashMap[0x100]
main() {
hashMap[0x100]
}
}
Parameter[] paramArr = main.getParameter();
Object[] argArr = new Object[main.getParameterCount()];
for (int i=0; i<paramArr.length; i++) {
String paramName = paramArr[i].getName();
Class paramType = paramArr[i].getType();
Object value = map.get(paramName);
if (paramType == Model.class) {
argArr[i] = model = new BindingAwareModelMap();
} else if(paramType == HttpServeletRequest.class) {
argArr[i] = request;
} else if(paramType == HttpServeletResponse.class) {
argArr[i] = response;
} else if(value != null) {
String strValue = ((String[])value)[0];
// 실제로 value는 String[] 형태로 넘어와서, 해당 배열의 첫번째껄 꺼내서 가져옴!
argArr[i] = convertTo(strValue, paramType);
}
}
privaite void render(Model model, String viewName, HttpServletResponse response) throws IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrinterWriter out = reponse.getWriter();
...
out.println(result);
}