
이름과 나이를 넣고 전송버튼을 누르면 회원이 가입되는 폼이 있다고 가정하자!!
HTML폼을 사용해 POST로 데이터를 저장하려면
url은 /save , method 는 post , username값 age값을 넣어서 전달할것이다.
이렇게 전송을 딱 누르면 웹 브라우저가 오른쪽 처럼 HTTP메시지를 만든다!!
보면 우리가 보는 url정보 보낼 method ,username과 age값이 들어있다!!
이 메시지를 서버에 전송을하는데 만약 우리가 맵에플리케이션 서버를 처음부터 구현하게 되면?? 아래와 같은 상황이 발생한다.

우선 HTTP메시지를 쭉 다 풀어 헤쳐야 한다.HTTP연결도 기본적으로TCPIP를 사용한다.
그럼 서버에서tcpip 연결을 일단 대기하도록 코드를 구성한다. 그 다음 소켓을 연결해야하고 그다음 HTTP메시지는 다 텍스트이기에 잘라서 읽으면 된다 그럼 그 값들을 파싱을 하고 method가 무슨 방식인지 url은 어디인지 확인을 하고 또 메시지 바디 내용을 파싱한다..그후 HTTP 응답 메시지도 다 생성해야하고 다 전달을 하고 소켓을 종료해야한다..
사실 비즈니스 로직은 그냥 회원이름과 나이를 가지고 데이터베이스에 저장요청을 하면 되는게 끝이다..근데 그 전단계와 후단계가 너무많아 비효율적이다!!
그럼으로 서블릿이라는것이 나온다!!

서블릿은 저 초록색 부분에 과정을 제외한 모든일들을 다 지원해준다!!

서블릿을 살펴보면 위와 같다!!
중요한것은 HTTP의 기본적인 스펙은 알아야 한다. 그래야 request에서 꺼낼때 HTTP의 스펙이 꺼내지는구나 response의 write를 사용할떄 HTTP 스펙에 이게 이렇게 나가겟구나를 상상할수있다!!

웹브라우저에서 먼저 우리의 서버localhost 808에 /hello라고 요청을 한다 그럼 왓스 서버에서 어떤일이 벌어지냐!!
왓스 서버에서 이 요청 메시지를 기반으로 방금 본 requestResponse 객체를 새로 만든다!
만든 다음 서블릿 컨테이너에 있는 HelloServlet에 requestResponse 파라미터로 넘기면서 실행을 해주고 그 과정이 끝나고 리턴을 하면 우리가 만들어놓은 response객체를 뒤져서 그걸 바탕으로 HTTP응답 메시지를 만들고 웹브라우저에 응답메시지가 전달되는것이다.
서블릿 HTTP 요청 , 응답 흐름
HTTP 요청시

그럼 서블릿 컨테이너는 무엇일까??
위의 서블릿 객체는 내가 직접 생성하거나 하는게 아니라 코드만 작성을 해주면 서블릿을 지원하는 와스 안에는 서블릿 컨테이너라는것이 있는데 그안에 서블릿 컨테이너가 자동으로 생성을 해준다.그리고 호출도 해준다 !!와스가 내려갈때 와스가 종료될때 서블릿을 같이 종료해준다!! 이런 생명주기까지 다 관리를 해준다.
서블릿 서블릿 컨테이너