참고 : https://12bme.tistory.com/555
1. 사용자가 URL을 클릭시, HTTP Req를 Servlet Container에 보낸다.
2. Servlet Container는 HTTP Reqest, HTTP Response를 생성한다.
3. 사용자가 요청한 URL을 분석하여 어느 서블릿에 대한 요청인지 찾는다.
4. Container는 서블릿 service() 메소드를 호출하며, GET/POST 여부에 따라 doGet(), doPost()가 호출된다.
5. doGet(), doPost() 메소드는 동적인 페이지를 생성한 후, HTTP Response 객체에 응답을 보낸다.
6. 응답이 완료되면 HTTP Reqest, HTTP Response 두 객체를 소멸시킨다.
Spring Container는 Bean들의 생명주기를 관리한다.
종류에는 BeanFactory와 이를 상속한 ApplicationContext가 존재한다.
이 두개의 컨테이너로 의존성 주입된 Bean들을 제어하고 관리할 수 있다.
1. 서버가 켜지면 Web.xml가 로딩
2. Web.xml에서 ContextLoaderListener은 ApllicationContext를 생성
3. ApllicationContext는 등록되어 있는 설정에 따라 첫 번째 Spring Container를 구동
4. 이때, Spring Container는 개발자가 작성한 비즈니스 로직 부분과 DAO, VO 객체들이 생성
5. 클라이언트에서 URL 요청
6. 요청될 시, DispatcherServlet가 생성
: FrontController의 역할을 수행한다. 클라이언트로부터 요청 온 메세지를 분석하여 알맞는 Pagecontroller에게 전달하고 응답을 받아 요청에 따른 응답을 어떻게 할지 결정만 한다.
: 실직적인 작업들이 이루어지는 공간이다. 이러한 클래스들을 HandlerMapping,ViewResolver 클래스라고 한다.
서블릿 실행순서는 개발자가 관리하는게 아닌 서블릿 컨테이너가 관리한다.
즉, 서블릿에 의해 사용자가 정의한 서블릿 객체가 생성되고 호출되고 사라진다.
이렇게 개발자가 아닌 프로그램에 의해 객체들이 관리되는 것을 IoC(Inversion of Control)이라 한다.
서블릿 컨테이너는 클라이언트로부터 처음 요청이 들어오면 현재 실행할 서블릿이 최초의 요청인지
판단하고 없으면 해당 서블릿을 새로 생성한다. 이 작업은 최초 1회만 일어난다.