서블릿은 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해준다.
서블릿 컨테이너(Web Container)
서블릿의 생명 주기를 관리
init() : 서블릿 초기화
service() : HTTP 요청 유형을 확인하고 맞게 doGet, doPost, doPut 등 메서드를 호출하여 요청 처리
destroy() : 서블릿 제거(was 종료시 호출)
서블릿 객체도 싱글톤 으로 관리되기 때문에 최초 요청 시점에 서블릿 객체를 초기화해서 서블릿 컨테이너에 보관하고 이후에는 같은 서블릿을 공유해서 사용
서블릿 flow
요청 → 서블릿 컨테이너
→ HttpServletRequest, HttpServletResponse 객체 생성
→ 요청 URL을 분석하여 어느 서블릿에 대한 요청인지 찾고 서블릿 컨테이너에 존재하지 않으면 초기화하고 있다면 가져와서 service 메서드를 호출
→ service 메서드가 수행이 끝나면 HttpServletResponse 객체에 응답을 보낸다.
→ HttpServletRequest, HttpServletResponse 소멸