🔥 Vamos/Spring

1124 | 스프링의 정석 :: 2-3

unikue 2022. 11. 25. 22:40

Http 요청과 응답

👉 프로그램의 실행 결과를 톰캣이 아니라 브라우저에 출력하기

 

👉 입력값을 main 메서드의 args로 받으므로, 콘솔에서 실행

target > 우클릭 > show in > Terminal > cd>classes로 이동해서 값 입력

 

 

👉 컴퓨터에서 URL을 통해 원격컴퓨터에 호출시 톰캣이 HttpSurvletRequest 객체를 만듦요청한 정보를 객체에 담아 메인메서드의 매개변수로 넘겨줌.

 

 

 


 

HttpSurvletRequest의 메서드

 

 

 ✔ QueryString: 값을 전달할 때 사용

이 전체가 문자열(String)이고 값을 여러개 보내는게 가능

 

 


 

로컬프로그램에서 원격호출 가능한 프로그램으로 만들기

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

 

 

ch2/이후의 부분은 직접 입력해서 새로고침함

👉 이 전까지는 로컬 화면에선 출력이 안되고, 프로그램 콘솔에만 값이 나왔었는데, 출력을 웹으로 옮김.

 

페이지소스를 보면 html로 작성된게 아니므로 이렇게 뜬다

 

 


 

내용 자체는 짧은데 자잘한 오류때문에 자꾸 헤맸다.

예를 들면 request.getParameter를 호출했는데 request에 자꾸 에러가 떠서 왜 못끌어오나 했더니 바로 위에서 HttpSurvletRequest만 써서 그런거였음. HttpSurvletRequest request가 아니어서... fix 리스트에서 고민고민하다 httpSurvlet파트를 눌러봤는데 매개변수 수정되는거보고 아...! 했다.

 

일단 스프링은 천천히 진행해보기로 한거라 이해가 잘 안가도 속상하진 않다. 원리는 슬슬 감이 오고 제대로 출력되면 우와 싶음 ㅋㅋㅋㅋㅋ 🤭