** HTML FORM을 POST로 데이터를 저장할 경우
POST /save HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded
username=kim&age=20
• 서버 TCP/IP 연결 대기, 소켓 연결
• HTTP 요청 메시지를 파싱해서 읽기
• POST 방식, /save URL 인지
• Content-Type 확인
• HTTP 메시지 바디 내용 피싱
• username, age 데이터를 사용할 수 있게 파싱
• 저장 프로세스 실행
• 비즈니스 로직 실행
• 데이터베이스에 저장 요청
• HTTP 응답 메시지 생성 시작
• HTTP 시작 라인 생성
• Header 생성
• 메시지 바디에 HTML 생성에서 입력
• TCP/IP에 응답 전달, 소켓 종료
서버에서 개발자가 처리해야하는 작업들이 너무 많음. 비효율적.
-> 서블릿의 등장
서블릿을 지원하는 WAS를 사용하면, 비즈니스 로직 실행 외에 모든 기능들을 자동화 해줌.
서블릿
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) {
//비지니스 로직
}
}
1) 웹 브라우저에서 localhost:8080/hello - HTTP 요청
2) WAS 서버에서 HTTP 요청 메시지를 기반으로 request, response 객체 생성
3) request, response 객체를 파라미터로 넘기면서 helloServlet 서블릿 객체 호출
4) 끝나고 리턴하면, response 객체 정보를 바탕으로 HTTP 응답 메시지 생성
5) 웹브라우저에 응답 전달
6) 웹브라우저가 HTML을 렌더링해서 보여줌
서블릿 컨테이너
서블릿 객체를 직접 생성하는 개념이 아님
WAS 안에 서블릿 컨테이너가 있는데, 서블릿 객체를 서블릿 컨테이너가 자동으로 생성, 호출, 관리(생명주기)해줌
서블릿 여러개도 가능
톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함
서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리
서블릿 객체는 싱글톤으로 관리
- 고객의 요청이 올 때 마다 계속 객체를 생성하는 것은 비효율
- 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용
- 모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근
- 공유 변수 사용 주의
- 서블릿 컨테이너 종료시 함께 종료
JSP도 서블릿으로 변환 되어서 사용
동시 요청을 위한 멀티 쓰레드 처리 지원
** 최초 로딩 시점에 서블릿 객체, 싱글톤으로 하나