content타입, charset지정을 해야 한글이 안깨짐
EL로 Model에서 받은 값을 넣을 자리를 만듬
<!-- content타입, charset지정 -->
<%@ 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>
<!-- EL로 Model에서 받은 값을 넣을 자리를 만듬 -->
<P> ${year }년 ${month }월 ${day }일은 ${yoil }입니다.</P>
</body>
</html>
유효성검사를 통과하지 못할 때
<%@ 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>
Controller에서 반환하는 뷰의 이름에 접두사, 접미사 붙여주는 부분
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<!-- 아래 부분이 반환하는 뷰이름에 접두사와 접미사를 붙여서 전달 -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
Controller처리와 입력, 출력을 분리.
입력은 DispatcherServlet이 처리.
출력은 jsp로 처리.
컨트롤러 메서드의 반환타입
1. String : 뷰 이름을 반환
2. void : 맵핑된 url의 끝단어가 뷰 이름
3. ModelAndView : Model과 뷰 이름을 반환
package com.fastcampus.ch2;
import java.io.IOException;
import java.util.Calendar;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class YoilTellerMVC {
@RequestMapping("/getYoilMVC")
//추가 1. 반환타입을 void로 하고, 뷰의 이름을 리턴하지않으면 맵핑된 URL에 의해 뷰의 이름이 결정됨.
//추가 2. 반환타입을 ModelAndView로도 가능
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("day", day);
model.addAttribute("month", month);
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); //month는 0부터 시작
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
return " 일월화수목금토".charAt(dayOfWeek);
}
}
반환타입을 ModelAndView로 함.
ModelAndView객체를 Controller내부에서 생성해서
ModelAndView에 뷰의 이름과 작업한 결과를 저장해서 반환.
@RequestMapping("/getYoilMVC3")
public ModelAndView main(int year, int month, int day) throws IOException {
//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. ModelAndView에 작업한 결과를 저장
mv.addObject("year", year);
mv.addObject("month", month);
mv.addObject("day", day);
mv.addObject("yoil", yoil);
//5. 작업 결과를 보여줄 뷰의 이름을 지정
mv.setViewName("yoil);
//6. ModelAndView를 반환
return mv;
}