TIL | Spring HTTP 요청과 응답

김윤희·2022년 8월 1일
0

HTTP 요청과 응답

package com.campus.ch2;

import java.util.Calendar;

//년월일을 입력하면 요일을 알려주는 프로그램
public class YoilTeller {

	public static void main(String[] args) {
		// 1. 입력
		String year  = args[0];
		String month = args[1];
		String day = args[2];
		
        // (아래 2번 작업하기 위해서 int로 만들어줘야한다)
		int yyyy = Integer.parseInt(year); 
		int mm = Integer.parseInt(month);
		int dd = Integer.parseInt(day);
		
		// 2. 작업
		Calendar cal = Calendar.getInstance();
		cal.set(yyyy, mm - 1, dd); // Calendar의 month 값은 0-11까지 존재하기 때문에 
        							//-1을 해주어야 비교가 가능한다
		
		int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); // 1.일요일, 2.월요일 
        											   //...(요일이 숫자로 반환된다)
		char yoil = " 일월화수목금토".charAt(dayOfWeek); // charAt()는 0부터 시작이라서 
        											   //앞에 공백 한 칸을 넣어줬다
		
		// 3. 출력
		System.out.println(year +"년"+month+"월"+day+"일");
		System.out.println(yoil+"요일 입니다.");
				

	}

}
  • args 값을 받아야 결과를 확인 할 수 있기 때문에 터미널로 확인을 해보자
    터미널? 콘솔이 물리적인 장치라면 터미널은 원격제어 환경까지 포함하는 더 넓은 의미라고 할 수 있다. 콘솔은 일종의 터미널이다.
    • 프로젝트 파일에서 target폴더 우클릭 > show in local terminal > Terminal 클릭
    • Terminal 창이 콘솔창 옆에 열리면 cd classes 치고 엔터
    • java 클래스패키지경로.클래스이름 그리고 args값 치고 엔터
      • ex) java com.campus.ch2.YoilTeller 2021 10 1

        실행과정 👉 java 인터프리터가 YoilTeller 클래스의 메인을 호출한다.
        이때 인터프리터가 뒤에 있는 값들을 문자열배열(String[])로 만들어서 넘겨준다. 그러면 args는 넘겨준 문자열 배열을 가르키게된다. 그래서 메인 메서드 안에서 문자열 배열을 쓸 수 있게 된다

    • 그러면 결과값으로
      2021년10월1일
      금요일 입니다.

      이렇게 나온다 !

1. HttpServletRequest


@Controller
public class RequestInfo{
	@RequestMapping("/requestInfo")
    public void main(HttpServletRequest request){
    	System.out.println("request.getMethod()="+request.getMethod());
        System.out.println("request.getProtocol()="+request.getProtocol());
        System.out.println("request.getScheme()="+request.getScheme());
    }
}

위에 YoilTeller 클래스의 요청과 응담을 본 것과 마찬가지로 원격프로그램의 브라우저로 url을 입력해서 호출한다면 Tomcat이 HttpServletRequest 객체를 만든다
그리고 요청한 정보를 만든 객체에 담는다
담아서 메인 메서드의 매개변수로 보내준다(위에서는 메인 메서드가 String[] args 타입으로 받았지만 이렇게 할 경우에는 HttpServletRequest로 매개변수가 넘어온다 )
❗ 우리가 필요한 것을 매개변수에 선언하면 Tomcat이 만들어준다

2. HttpServletRequest의 메서드


  • url의 아래 부분은 쿼리스트링으로
    ?year=2021&month=10&day=1
    값을 전달할때 사용한다'
    • year(name)=2021(value)&(구분자)
      String year = request.getParameter("year"); (year에는 "2021" 값이 들어온다 )
      👉url 자체가 문자열이라서 값은 문자열로 넘어온다
    • Enumeration enum = request.getParameterNames();
      Parameter의 name들을 가져올 수 있다
      • Enumeration은 iterator과 같은데 사용법이 거의 같으며 Enumeration이 구버전 iterator가 신버전이다
    • Map paramMap = request.getParameterMap();
      Map 형태로 Parameter를 받을 수 있다
    • ?year=2021&year=2022&year=2023
      이렇게 같은 name을 여러개 받아올 수도 있는데 이럴때 배열로 받을 수 있다
      String yearArr = request.getParameterValues("year");


📝 위에 코드를 HttpServletRequest / HttpServletResponse 를 이용해서 브라우저에 출력하도록 코드 수정

package com.campus.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.web.bind.annotation.RequestMapping;

//년월일을 입력하면 요일을 알려주는 프로그램
@Controller
public class YoilTeller {

	//public static void main(String[] args) {
	@RequestMapping("/getYoil")
	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");
		
		int yyyy = Integer.parseInt(year);
		int mm = Integer.parseInt(month);
		int dd = Integer.parseInt(day);
		
		// 2. 작업
		Calendar cal = Calendar.getInstance();
		cal.set(yyyy, mm - 1, dd);
		
		int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); 
		char yoil = " 일월화수목금토".charAt(dayOfWeek);
		
		// 3. 출력
		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter(); //response 객체에서 브라우저의 
  												//출력 스트림을 얻는다
		out.println(year +"년"+month+"월"+day+"일");
		out.println(yoil+"요일 입니다.");
				

	}

}

0개의 댓글