1124 | 스프링의 정석 :: 2-3
Http 요청과 응답
👉 프로그램의 실행 결과를 톰캣이 아니라 브라우저에 출력하기
👉 입력값을 main 메서드의 args로 받으므로, 콘솔에서 실행
target > 우클릭 > show in > Terminal > cd>classes로 이동해서 값 입력
👉 컴퓨터에서 URL을 통해 원격컴퓨터에 호출시 톰캣이 HttpSurvletRequest 객체를 만듦. 요청한 정보를 객체에 담아 메인메서드의 매개변수로 넘겨줌.
HttpSurvletRequest의 메서드
✔ QueryString: 값을 전달할 때 사용
로컬프로그램에서 원격호출 가능한 프로그램으로 만들기
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
// 날짜 연월일을 입력하면 무슨요일인지 알려주는 프로그램
@Controller // 1. 원격호출 가능한 프로그램으로 등록
public class YoilTeller { //http://localhost:8080/ch2/getYoil?year=2022&month=11&day=24
// public static void main(String[] args) { // main을 static이 아니라 httpsurvletrequest로 변경해줌
@RequestMapping("/getYoil") //url과 메서드를 연결하는 맵핑
public void main(HttpServletRequest request, HttpServletResponse response )throws IOException {
// 톰캣이 매개변수를 받아서 이 부분의 객체를 생성해주면 이걸 사용해서 출력값 설정 > 브라우저 출력
//1. 입력
String year = request.getParameter("year");
String month = request.getParameter("month");
String day = request.getParameter("day");
//2. 값을 받아서 작업
int yyyy = Integer.parseInt(year); // 문자열이니까 숫자로 변경
int mm = Integer.parseInt(month);
int dd = Integer.parseInt(day);
Calendar cal = Calendar.getInstance();
cal.set(yyyy,mm-1, dd);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); // 요일. 1: 일요일 2:월요일...
char yoil = " 일월화수목금토".charAt(dayOfWeek); // 숫자로 나오는 요일을 문자로 변경
//3 출력
// System.out.println(year+"년"+month+"월"+day+"일은 "); // system.out이므로 콘솔값에 출력이 됨.위에서 request옆에 response를 적어줘야함.
// System.out.println(yoil+ "요일입니다.");
response.setContentType("text/html"); // 출력 타입 설정. 텍스트를 보내고, 텍스트의 인코딩이 뭔지 알려줌
response.setCharacterEncoding("utf-8"); // 이 부분이 없으면 한글이 깨져서 나옴
PrintWriter out = response.getWriter(); // response 객체에서 브라우저 출력 스트림을 얻는다. 예외발생하므로 위에 예외선언해줌
out.println(year+"년"+month+"월"+day+"일은 ");
out.println(yoil+"요일입니다.");
}
}
Run as > Run on server
👉 이 전까지는 로컬 화면에선 출력이 안되고, 프로그램 콘솔에만 값이 나왔었는데, 출력을 웹으로 옮김.
내용 자체는 짧은데 자잘한 오류때문에 자꾸 헤맸다.
예를 들면 request.getParameter를 호출했는데 request에 자꾸 에러가 떠서 왜 못끌어오나 했더니 바로 위에서 HttpSurvletRequest만 써서 그런거였음. HttpSurvletRequest request가 아니어서... fix 리스트에서 고민고민하다 httpSurvlet파트를 눌러봤는데 매개변수 수정되는거보고 아...! 했다.
일단 스프링은 천천히 진행해보기로 한거라 이해가 잘 안가도 속상하진 않다. 원리는 슬슬 감이 오고 제대로 출력되면 우와 싶음 ㅋㅋㅋㅋㅋ 🤭