<개요>
MVC 패턴에 3가지 경우가 있음.
Controller Method 의 반환 타입에 따라 나뉨
(1)String 반환형
//년월일을 입력하면 요일을 알려주는 프로그램
@Controller
public class YoilTellerMVC {
// http://localhost/ch2/getYoilMVC?year=2021&month=10&day=21
@RequestMapping("/getYoilMVC")
//String 반환 메소드 -> 반환에 사용할 view를 지정
public String main(int year, int month, int day, Model model) throws IOException {
// 유효성 검사, 년 월 일이 바르게 입력되지 않았다면, 에러를 표시하는 view를 이용해라
if(!isVaild(year,month,day)) {
return "YoilError";
}
// 요일 계산 결과를 char 변수에 넣음
char yoil = getYoil(year,month,day);
//처리 결과를 model에 저장. 이를 하지 않으면 view에 값이 전달되지 않게 됨.
model.addAttribute("year",year);
model.addAttribute("month", month);
model.addAttribute("day", day);
model.addAttribute("yoil", yoil);
return "Yoil";
}
private boolean isVaild(int year, int month, int day) {
// TODO Auto-generated method stub
return false;
}
//요일 계산
private char getYoil(int year, int month, int day) {
Calendar cal = Calendar.getInstance();
cal.set(year, month, day);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
return "일월화수목금토".charAt(dayOfWeek);
}
}
(2) void 반환형
// void 반환형을 쓰게되면, 이용할 view를 지정하지 못하므로,
// URL 끝 단어와 이름이 같은 view로 자동으로 넘어가게 된다.
public class YoilTellerMVC {
// http://localhost/ch2/getYoilMVC?year=2021&month=10&day=21
@RequestMapping("/getYoilMVC")
public void main(int year, int month, int day, Model model) throws IOException {
// if(!isVaild(year,month,day)) {
// return "YoilError";
// }
char yoil = getYoil(year,month,day);
model.addAttribute("year",year);
model.addAttribute("month", month);
model.addAttribute("day", day);
model.addAttribute("yoil", yoil);
// return "Yoil";
}
private boolean isVaild(int year, int month, int day) {
// TODO Auto-generated method stub
return false;
}
//요일 계산
private char getYoil(int year, int month, int day) {
Calendar cal = Calendar.getInstance();
cal.set(year, month, day);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
return "일월화수목금토".charAt(dayOfWeek);
}
}
(3) ModelAndView 반환형
package com.fastcampus.ch2;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;
//년월일을 입력하면 요일을 알려주는 프로그램
@Controller
public class YoilTellerMVC {
// http://localhost/ch2/getYoilMVC?year=2021&month=10&day=21
@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. 계산한 결과를 모델에 저장
mv.addObject("year", year);
mv.addObject("month", month);
mv.addObject("day", day);
mv.addObject("yoil", yoil);
//4. 결과를 보여줄 view를 지정
mv.setViewName("yoil");
return mv;
}
//요일 계산
private char getYoil(int year, int month, int day) {
Calendar cal = Calendar.getInstance();
cal.set(year, month, day);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
return "일월화수목금토".charAt(dayOfWeek);
}
}
(4) 스스로 해보기
//model&view
@Controller
public class YoilTellerMVC {
// http://localhost/ch2/getYoilMVC?year=2021&month=10&day=21
@RequestMapping("/getYoilMVC")
public ModelAndView main(int year, int month, int day) throws IOException {
ModelAndView mv = new ModelAndView();
char yoil = getYoil(year, month,day);
mv.addObject("year", year);
mv.addObject("month", month);
mv.addObject("day", day);
mv.addObject("yoil", yoil);
mv.setViewName("Yoil");
return mv;
}
private boolean isVaild(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, day);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
return "일월화수목금토".charAt(dayOfWeek);
}
}
** return에 view 이름만 적어줘도 되는 이유
: servlet-context.xml에서 prefix와 postfix를 설정해서 해당 jsp 파일로 가는 경로와 뒤 확장자인 .jsp를 모두 자동으로 적어주도록 되어있어서 따로 적을 필요가 없다
'백엔드 개발 > SpringMVC' 카테고리의 다른 글
SpringMVC 관심사의 분리, MVC 패턴 - 원리 (2) (0) | 2023.03.01 |
---|---|
관심사 분리와 MVC 패턴의 원리(1) (0) | 2023.03.01 |
관심사 분리와 MVC 패턴에 대해 (0) | 2023.03.01 |
HTTP에서 Binary File을 전송하기 위한 방법 (MIME, Base64) (0) | 2023.02.28 |
HTTP 요청과 이론 (0) | 2023.02.28 |