프로그래밍/- 남굼성의 Spring 교육

HTTP 요청과 응답 ( java Terminal , Tomcat )

즐겁게 하하하 2022. 1. 14. 01:37
728x90
★ 프로토콜 : 서로간의 통신을 위한 약속, 규칙 , 주고받을 데이터에 대한 형식을 정의
 
★ JAVA 컴파일러
 
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");
 
Tomcat
HttpServletRequest request , HttpServletResponse response / out.println
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는 실행 결과만 받으면..
 
★ 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 다름 )
 
server.xml / 8080포트 에서 대기 하다가 http/1.1 프로토콜로 요청이 오면 이 커넥터가 처리 하기
web.xml

 

★ HTTP 
   상태를 유지하지 않는다.
   클라이언트 정보를 저장하지 않는다
   확장이 가능하다. ( 커스텀 헤더 추가 가능 )
GET / POST ( HTTPS :: HTTP + TLS :: 암호화 처리 )
★ 바이너리 파일 : 이미지 , 동영상
   > 문자 + 숫자 저장 
   > 데이터 그대로 읽고 쓴다

★ 텍스트 파일
   > 문자만 저장
   > 숫자를 문자로 변환 후 쓴다.


★ MIME : text , image , audio , video , application .... 등
          텍스트 기반 프로토콜에 바이너리 데이터를 전송하기 위해 고안
          HTTP의 Content-Type 헤더에 사용, 데이터 타입을 명시한다.

★ Base64 : 바이너리 데이터를 텍스트 데이터로 변환할때 사용
            서로 다른 os 가진 pc 끼리 데이터 전송에러 없게 하려면
            64진법 : 2진수를 6bit씩 끊어서 구성

 

 

728x90