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의 메서드
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
값을 파라미터(매개변수)로 보낼 때 사용되는 값
'Study > SpringFramework' 카테고리의 다른 글
07. HTTP 요청과 응답 - 이론 36:22 (0) | 2022.05.10 |
---|---|
06. 설정 파일 - server.xml, web.xml 13:28 (0) | 2022.05.10 |
05. 클라이언트와 서버 34:25 (0) | 2022.05.10 |
04. HTTP 요청과 응답 - 예제 16:21 (0) | 2022.05.10 |
01. 원격 프로그램의 실행 28:24 (0) | 2022.05.10 |