기존에 있던 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로 하면 매핑된 주소로 이동된다.
모델과 뷰를 한번에도 볼 수 있다.
결론
'Java > 패스트캠퍼스 자바' 카테고리의 다른 글
[패스트캠퍼스] 서블릿과 JSP (1) (0) | 2024.11.05 |
---|---|
[패스트캠퍼스] 관심사의 분리와 MVC패턴 - 원리(1) (2) | 2024.11.03 |
[패스트캠퍼스]텍스트와 바이너리, MIME, Base64 (0) | 2024.10.30 |
[패스트캠퍼스] Http요청과 응답 - 이론 (1) | 2024.10.30 |
[패스트캠퍼스]server.xml, web.xml (1) | 2024.10.30 |