Java/Spring

[WAS] Servlet과 WAS 그리고 Spring 컨테이너 실행과정

jwKim96 2019. 5. 30. 14:39

 

1. Servlet

 

Servlet의 실행 과정

1. 클라이언트로 부터 들어온 HTTP request를 Servlet Container(Tomcat의 역할)에게 보낸다.

 

2. Servlet Container는 HttpServletRequest, HttpServletResponse 두 객체를 생성한다.

 

3. 사용자의 요청이 어느 서블릿에 대한 요청인지 찾는다.

ㄴweb.xml에 작성된 mapping정보를 통해 확인.

ㄴ서블릿에 명시된 매핑정보를 통해 찾는다. => @WebServlet("/myservlet")

 

4. Servlet Container는 서블릿의 service메소드를 호출

ㄴPOST-GET 여부에 따라 doGet() 혹은 doPost()가 호출된다.

 

5. doGet() 혹은 doPost()를 통해 필요한 작업을 수행하거나, 동적 페이지(JSP)를 생성한 후

HttpServletResponse객체에 응답을 담아 보낸다.

ㄴ모든 jsp는 servlet이다.

 

6. 응답이 완료되면 HttpServletRequest, HttpServletResponse 두 객체가 소멸된다.

 

Servlet의 생명 주기

 

* init() - 서버가 켜질 때 한번만 실행된다.

 

* service() - 사용자의 요청을 받는다(처리한다)

ㄴdoGet() - get 방식의 요청일때

ㄴdoPost - post 방식의 요청일때

 

* destroy() - 서버가 꺼질 때 한번만 실행된다.

 

2. Spring Container

spring의 동작과정

Spring 동작과정

 

1. 웹 어플리케이션 실행시 WAS(Tomcat)가 web.xml 로드

ㄴweb.xml은 WAS에서 필요한 설정내용을 담은 파일

 

2. web.xml에 등록되어있는 ContextLoaderListener(Java Class)가 생성됨

ㄴContextLoaderListener 클래스는 ServletContextListener 인터페이스를 구현

ㄴApplicationContext를 생성하는 역할을 수행함.

 

3. 생성된 ContextLoaderListener는 root-context.xml을 로드

root-context.xml은 어플리케이션 영역 설정을 담고있음

 

4. root-context.xml를 로드하여 root-Container가 구동된다.

ㄴ이때 개발자가 작성한 비즈니스로직, DAO, VO 등등의 객체들이 생성된다.

 

[클라이언트에서 요청이 들어왔음]

 

6. FrontController에 해당하는 DispatcherServlet가 요청을 가로챈다.

ㄴ요청에 포함된 메세지를 분석하여 알맞은 (개발자가 작성한)PageController에게 전달하고 응답을 받아

   어떻게 응답을 할 지 결정함.

ㄴ실질적인 프로세스는 PageController에서 이루어진다.

ㄴ이러한 클래스들을 HandlerMapping, ViewResolver 클래스라고 한다.

 

7. DispatcherServlet은 servlet-context.xml을 loading 한다.

ㄴ요청에 맞는 Controller를 찾아보기 위해서

 

8. 두번째 Spring Container가 구동되며, 응답에 맞는 PageController가 작동한다.

ㄴ첫 Spring Container가 구동되며 생성된 DAO, VO, Service 클래스들을 사용하여 작업을 수행