프로그래밍/- 남굼성의 Spring 교육
HTTP 요청과 응답 ( java Terminal , Tomcat )
즐겁게 하하하
2022. 1. 14. 01:37
728x90
★ 프로토콜 : 서로간의 통신을 위한 약속, 규칙 , 주고받을 데이터에 대한 형식을 정의

★ JAVA 컴파일러


★ getQueryString()
?year=2021&month=10&day=1
String year = request.getParameter("year");
String month = request.getParameter("month");
String day = request.getParameter("day");
Enumeratior enum - request.getParameterNames(); :: Iterator
Map enum - request.getParameterMap();
?year=2021&year=10&year=1
String[] yearArr = request.getParameterValues("year");




package com.fastB.ch2;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class RequestInfo {
@RequestMapping("/requestInfo")
// public static void main(String[] args) {
public void main(HttpServletRequest request) {
System.out.println(request.getCharacterEncoding()); // 요청 내용의 인코딩
System.out.println(request.getContentLength()); // 요청 내용의 길이. 모르면 -1
System.out.println(request.getContentType()); // 요청 내용의 타입. 모르면 null
System.out.println(request.getMethod()); // 요청 방법
System.out.println(request.getProtocol()); // 프로토콜의 종류와 버젼 HTTP/1.1
System.out.println(request.getScheme()); // 프로토콜
System.out.println(request.getServerName()); // 서버 이름 또는 ip주소
System.out.println(request.getServerPort()); // 서버 포트
System.out.println(request.getRequestURL()); // 요청 URL
System.out.println(request.getRequestURI()); // 요청 URI
System.out.println(request.getContextPath()); // context path
System.out.println(request.getServletPath()); // servlet path
System.out.println(request.getQueryString()); // 쿼리 스트링
System.out.println(request.getLocalName()); // 로컬 이름
System.out.println(request.getLocalPort()); // 로컬 포트
System.out.println(request.getRemoteAddr()); // 원격 ip주소
System.out.println(request.getRemoteHost()); // 원격 호스트 또는 ip주소
System.out.println(request.getRemotePort()); // 원격 포트
}
}
package com.fastB.ch2;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class RequestMessage {
@RequestMapping("/requestMessage")
public void main(HttpServletRequest request) throws Exception {
// 1. request line
String requestLine = request.getMethod(); // GET 또는 POST
requestLine += " " + request.getRequestURI(); // /ch2/requestMessage
String queryString = request.getQueryString(); // year=2021&month=10&day=1
requestLine += queryString == null ? "" : "?"+queryString;
requestLine += " " + request.getProtocol(); // HTTP/1.1
System.out.println(requestLine);
// 2. request headers
Enumeration<String> e = request.getHeaderNames();
while (e.hasMoreElements()) {
String name = e.nextElement();
System.out.println(name + ":" + request.getHeader(name));
}
// 3. request body - POST일 때만 해당, GET은 body가 없음(CONTENT_LENGTH=0)
final int CONTENT_LENGTH = request.getContentLength();
// System.out.println("content length="+CONTENT_LENGTH);
if(CONTENT_LENGTH > 0) {
byte[] content = new byte[CONTENT_LENGTH];
InputStream in = request.getInputStream();
in.read(content, 0, CONTENT_LENGTH);
System.out.println(); // empty line
System.out.println(new String(content, "utf-8")); // year=2021&month=10&day=1
} // if
} // main
}
★ 서버의 종류
1. Email Server 25
2. File Server 22
3. Web Server 80
★ 웹 애플리케이션 서버(WAS) : 웹 어플리케이션을 서비스 하는 서버
:: 프로그램을 설치해 놓고 client는 실행 결과만 받으면..
1. Email Server 25
2. File Server 22
3. Web Server 80
★ 웹 애플리케이션 서버(WAS) : 웹 어플리케이션을 서비스 하는 서버
:: 프로그램을 설치해 놓고 client는 실행 결과만 받으면..

★ Servlet : 작은 서버 프로그램
★ ThreadPool : thread 미리 만들어 놓고 요청을 대기
★ 톰캣의 내부 구조
client요청 -> 8080 -> Tomcat서버 -> ThreadPool -> 서비스 -> connector ->
엔진 -> 호스트 -> Context -> 서블릿...
1. 톰캣 설치 경로/conf/server.xml :: 톰캣 서버 설정 파일
2. 톰캣 설치 경로/conf/web.xml :: 톰캣의 모든 web app 의 공통 설정
3. 웹앱이름/WEB-INF/web.xml :: web app의 개별 설정 ( STS 와 IntelliJ 다름 )
★ ThreadPool : thread 미리 만들어 놓고 요청을 대기
★ 톰캣의 내부 구조
client요청 -> 8080 -> Tomcat서버 -> ThreadPool -> 서비스 -> connector ->
엔진 -> 호스트 -> Context -> 서블릿...
1. 톰캣 설치 경로/conf/server.xml :: 톰캣 서버 설정 파일
2. 톰캣 설치 경로/conf/web.xml :: 톰캣의 모든 web app 의 공통 설정
3. 웹앱이름/WEB-INF/web.xml :: web app의 개별 설정 ( STS 와 IntelliJ 다름 )




★ HTTP
상태를 유지하지 않는다.
클라이언트 정보를 저장하지 않는다
확장이 가능하다. ( 커스텀 헤더 추가 가능 )
상태를 유지하지 않는다.
클라이언트 정보를 저장하지 않는다
확장이 가능하다. ( 커스텀 헤더 추가 가능 )


★ 바이너리 파일 : 이미지 , 동영상
> 문자 + 숫자 저장
> 데이터 그대로 읽고 쓴다
★ 텍스트 파일
> 문자만 저장
> 숫자를 문자로 변환 후 쓴다.
★ MIME : text , image , audio , video , application .... 등
텍스트 기반 프로토콜에 바이너리 데이터를 전송하기 위해 고안
HTTP의 Content-Type 헤더에 사용, 데이터 타입을 명시한다.
★ Base64 : 바이너리 데이터를 텍스트 데이터로 변환할때 사용
서로 다른 os 가진 pc 끼리 데이터 전송에러 없게 하려면
64진법 : 2진수를 6bit씩 끊어서 구성
> 문자 + 숫자 저장
> 데이터 그대로 읽고 쓴다
★ 텍스트 파일
> 문자만 저장
> 숫자를 문자로 변환 후 쓴다.
★ MIME : text , image , audio , video , application .... 등
텍스트 기반 프로토콜에 바이너리 데이터를 전송하기 위해 고안
HTTP의 Content-Type 헤더에 사용, 데이터 타입을 명시한다.
★ Base64 : 바이너리 데이터를 텍스트 데이터로 변환할때 사용
서로 다른 os 가진 pc 끼리 데이터 전송에러 없게 하려면
64진법 : 2진수를 6bit씩 끊어서 구성

728x90