사용자 요청이 들어오면 서블릿 컨테이너가 설정 파일을 읽어서 매핑할 Servlet 확인 web.xml
서블릿 인스턴스가 컨테이너에 존재하지 않으면 생성(Init())
서블릿 컨테이너에 스레드를 생성하고 res, req를 인자로 service 실행
응답 처리 후 res, req 소멸(서블릿은 싱글톤으로 관리하여 남아 있음)
문제점
요청 당 서블릿을 정해주므로 비효율적
멀티 스레딩을 다루어야 하고 핸들러의 공통 로직이 중복된다.
Dispatcher Servlet
프론트 컨트롤러 패턴
요청을 앞단에서 처리할 수 있는 일을 전담하는 요소를 둔다. ex)스프링
이때 전면에서 모든 요청을 Dispatcher Servlet이 받음
Dispatcher Servlet 처리 과정
요청을 Dispatcher가 받고 핸들러매핑을 통해 컨트롤러를 찾고, 핸들러 어댑터는 해당 컨트롤러의 메서드를 호출하여 로직 수행
그 결과를 Model And View 객체로 변환해서 디스패처서블릿에 넘김
디스패처 서블릿은 이를 뷰리졸버를 이용하여 view를 찾거나 생성
이 view에 모델로 들어온 data를 넣어 응답
이로써 개발자들은 컨트롤러와 핸들러 부분(로직)에만 집중
Controller, ViewResolver, HandlerMapping, HandlerAdapter 등은 스프링 컨테이너에 빈 객체로 등록되어 있다. DispatcherServlet이 설정 파일을 읽어 RootWebApplicationContext를 상속한 ServerWebApplicationContext를 생성하고 그 안에 빈으로 등록