기존에 있던 YoilTeller를 복붙하고 이름 변경

 

 

 

입력부분을 주석처리 그리고 직접 입력받게 할 것이다.

 

작업 부분도 직업 int형으로 받으면 되기 때문에 주석처리

 

url매핑도 중복되면 안되므로

getYoil 에서 getYoilMVC로 변경

 

관심사 분리전이랑 똑같은 결과

 

출력부분도 별도의 jsp파일로 빼낼 수 있으므로 주석처리

대신 별도의 jsp를 만들어야한다.

기존에 있던 home.jsp를 복사한 후 이름을 변경해서 yoil.jsp 와 yoilError.jsp생성

 

바디 부분을 수정하고 저장하려니 오류가 났다.

인코딩 문제라 첫줄에 인코딩 방식추가

혹은 에러가 난 부분을 지우고 다시 붙여넣기 한 후 저장하면 에러가 해결되는 경우도 있다고 한다.

 

yoil.jsp

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="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>

 

혹은 Save as UTF-8 클릭

 

yoilError.jsp

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="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>

 

 

다시 yoilTellerMVC로 돌아감.

 

입력같이 틀린경우 yoilError를 출력해야하니 유효성 검사에 추가

 

 

별도의 메서드로 뽑아낼 수 있다.

드래그 후 우클릭 Refactor - Extract Method

 

메서드의 이름은 getYoil

private으로 메서드가 생겼는데 좀 수정해야 한다.

 

 

 

isVaild도 클릭후 자동으로 메서드 생성 클릭

 

 

위에 valid메서드에 false라고 되어있기에 이렇게 나오는데 true로 변경

 

컨트롤러가 작업한 것이 뷰에 잘 적용되지 않아서 숫자가 입력되지 않음.

 

모델로 변경

그후 모델에 저장하면 잘 출력됌

 

package com.fastcampus.ch2;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class YoilTellerMVC { // http://localhost:8080/app/getYoilMVC?year=2024&month=11&day=1
	@RequestMapping("/getYoilMVC")
//	public void main(HttpServletRequest request, HttpServletResponse response) throws IOException {
	public String main(int year, int month, int day, Model model) throws IOException {
		// TODO Auto-generated method stub
		
		// 1. 입력
//		String year = request.getParameter("year");
//		String month =request.getParameter("month");
//		String day = request.getParameter("day");
		
//		int yyyy = Integer.parseInt(year); //문자열이니 숫자로 변경
//		int mm = Integer.parseInt(month);
//		int dd = Integer.parseInt(day);
		
		// 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
		// 3. 출력
//		response.setContentType("text/html");//텍스트 인지 알려주고
//		response.setCharacterEncoding("utf-8"); //인코딩 방식을 알려주어야 한다.
//		PrintWriter out = response.getWriter(); // response객체에서 브라우저로 출력 스트림을 얻는다.
//		out.println(year + "년" + month + "월" + day + "일은");
//		out.println(yoil + "요일입니다");
		
	}

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); //1:일요일, 2:월요일 ...
	return " 일월화수목금토".charAt(dayOfweek); //다시 문자열로 변환
}

}

 

 

 

view의 경로를 담당하는 부분 servlet-context.xml

 

 

반환타입을 void로 하면 매핑된 주소로 이동된다.

 

모델과 뷰를 한번에도 볼 수 있다.

 

 

결론

 

 

+ Recent posts