본문 바로가기

Study/SpringFramework

03. HTTP 요청과 응답 - 실습 26:52

728x90
package com.fastcampus.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];
		
		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); // 1:일요일, 2:월요일 ...
		char yoil = " 일월화수목금토".charAt(dayOfWeek);
		
		//3. 출력
		System.out.println(year + "년 " + month + "월 " + day + "일은 ");
		System.out.println(yoil + "요일입니다.");
	}
}

날짜를 입력하면 요일을 출력해주는 프로그램.

 

여기서 이해해야 되는 원리는, java com.fastcampus.ch2.YoilTeller 2021 10 1으로 java 파일을 호출하게 된다면,

1. main 메서드를 public static void main(String[] args) { // (String[] args) 객체(저장소)를 자동으로 만들어줌.

 

2. 배열로 선언한 args[0], args[1], args[2] 요소에

String year = args[0];
String month = args[1];
String day = args[2];

 

3. 각 배열 요소에 담아서 자동으로 넣어

int yyyy = Integer.parseInt(year); // args[0]
int mm = Integer.parseInt(month); // args[1]
int dd = Integer.parseInt(day); // args[2] 

 

4. 출력해준다. System.out. 에 담아서

System.out.println(year + "년" + month + "월" + day + "일은" );
System.out.println(yoil + "요일 입니다." );   

 

5. 어디에? 요청을 한 Terminal 에 출력해줌.

출력결과

 

* 오류 메모

요일 출력 프로그램

char yoil에서 띄어쓰기를 안 하게 된다면 제대로 된 결괏값이 출력이 안됨.

오류메세지

* 아래 톰캣의 HttpServletRequest의 메서드 원리도 이와 비슷하다.

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.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"); // 2021
		String month = request.getParameter("month"); // 10
		String day = request.getParameter("day"); // 1 
		
		// 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. 출력
		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter(); // response 객체에서 브라우저로 출력 스트림을 얻는다.
		out.println(year + "년 " + month + "월 " + day + "일은 ");
		out.println(yoil + "요일입니다.");
	}
}

 

 

1. @RequestMapping("/getYoil")로 요청하는데.

2. 저장할 수 있는 저장소, 즉 객체를 누가 만들어준다고?

3. HttpServletRequest 메서드의 request 객체

4. 어디에 담는다고?

5. 여기에 request.getParameter("value"); 담아서,

String year = request.getParameter("year"); // 2021
String month = request.getParameter("month"); // 10
String day = request.getParameter("day"); // 1 

-----------------------------------------------------------------------------

6. 그럼 URL로 요청받아오면 어떻게 출력한다고?

7. HttpServletReponse 메서드의 response 객체에서 브라우저로 출력 스트림을 얻어와야 하는데 어떻게 할까?

8. PrintWriter out = response.getWriter();

- 응답 스트림에 텍스트를 기록하기 위해 response.getWriter();를 호출

- PrintWriter 출력 클래스로 사용하기 위해

- out 객체 생성

 

9. 브라우저에 어떻게 출력한다고?

- out.println(year + "년 " + month + "월 " + day + "일은 ");

- out.println(yoil + "요일입니다.");

결과화면

 

1. HttpServletRequest

URL로 요청하면 -----------------> HttpServletRequest 객체를 만들고

                    (요청정보를) -----------------> ㅁㅁㅁㅁㅁㅁㅁㅁㅁ(담아서 /requestInfo로 요청한 브라우저로 보내줌.)

public class RequestInfo{
	@RequestMapping("/requestInfo")
    	public void main(HttpServletRequest request) //여기에 넣어줌.
//....

 

2. HttpServletRequest의 메서드

URL에서 요청되는 메서드 정보.

package com.fastcampus.ch2;

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

import javax.servlet.http.HttpServletRequest;

@Controller
public class RequestInfo {
    @RequestMapping("/requestInfo")
    public void main(HttpServletRequest request) {
        System.out.println("request.getCharacterEncoding()="+request.getCharacterEncoding()); // 요청 내용의 인코딩
        System.out.println("request.getContentLength()="+request.getContentLength());  // 요청 내용의 길이. 알수 없을 때는 -1
        System.out.println("request.getContentType()="+request.getContentType()); // 요청 내용의 타입. 알 수 없을 때는 null

        System.out.println("request.getMethod()="+request.getMethod());      // 요청 방법
        System.out.println("request.getProtocol()="+request.getProtocol());  // 프로토콜의 종류와 버젼 HTTP/1.1
        System.out.println("request.getScheme()="+request.getScheme());      // 프로토콜

        System.out.println("request.getServerName()="+request.getServerName()); // 서버 이름 또는 ip주소
        System.out.println("request.getServerPort()="+request.getServerPort()); // 서버 포트
        System.out.println("request.getRequestURL()="+request.getRequestURL()); // 요청 URL
        System.out.println("request.getRequestURI()="+request.getRequestURI()); // 요청 URI

        System.out.println("request.getContextPath()="+request.getContextPath()); // context path
        System.out.println("request.getServletPath()="+request.getServletPath()); // servlet path
        System.out.println("request.getQueryString()="+request.getQueryString()); // 쿼리 스트링

        System.out.println("request.getLocalName()="+request.getLocalName()); // 로컬 이름
        System.out.println("request.getLocalPort()="+request.getLocalPort()); // 로컬 포트

        System.out.println("request.getRemoteAddr()="+request.getRemoteAddr()); // 원격 ip주소
        System.out.println("request.getRemoteHost()="+request.getRemoteHost()); // 원격 호스트 또는 ip주소
        System.out.println("request.getRemotePort()="+request.getRemotePort()); // 원격 포트
    }
}

결과화면

그냥 위에 URL 호출할 때 사용되는 메서드들 출력 내용임. 참고만 하자.

 

@QueryString이란?

?year=2021&month=10&day=1

값을 파라미터(매개변수)로 보낼 때 사용되는 값

 

 

728x90