티스토리 뷰

BackEnd/SpringBoot

[Spring] - Spring Web MVC 동작 과정

영지는 달리는중 2021. 1. 18. 11:55

1. DispatcherServlet

: 애플리케이션으로 들어오는 모든 Reqest를 받는 서블릿 구현체, 주로 웹 서버의 HttpServlet을 상속받아 구현된다.

 

2. HadlerMapping

: DispatcherServlet은 Request url에 따라 어떤 Controller로 처리해야하는지 Controller를 찾아주는 역할

 

3. HandlerAdapter

: HandlerMapping에게서 얻은 정보로 HandlerAdapter 객체를 가져온와 객체의 메소드를 실행한다. 즉 컨트롤러 실행

 

4. Controller

: Reqeust를 처리 후 그 결과를 뷰에 전달할 데이터를 Model 객체에 저장하여 DispatcherServlet에게 View name을 리턴한다. 

 

5. ModelAndView

: Controller가 처리한 데이터(Model)와 그 결과를 보여줄 화면(View)에 관한 정보를 담고 있는 객체

 

6. ViewResolver

:DispatcherServlet은 view name을 View Resolver에게 전달하여 View 객체를 얻는다. 

 

7. View

 

:Controller가 처리한 결과값을 보여줄 View 생성 

 

 

애플리케이션의 작동 과정 

 

web.xml에는 ContextLoaderListener와 DispatcherServlet의 2가지 설정(기본적으로 xml)이 있다.

 

WAS를 처음 작동시키면, web.xml(컨테이너)를 로딩하여 Servlet Container가 구동되고,  

Servlet Container는 ContextLoaderListener 객체를 자동으로 메모리에 생성(pre-loading)한다.

 

ContextLoaderListener 객체는 먼저 <context-param>으로 등록된 설정 파일(ex. ApplicationConfig.java)을 읽어서 첫번째 Spring Container(Root Container)를 구동하고 비즈니스 객체들(Service, DAO)을 생성한다.  

이를 부모 컨테이너라고 부른다. 부모 컨테이너는 @ComponentScan으로 DAO・Service Bean을 찾고 메모리에 생성한다.

 

 다음으로, '/' 요청(=> 모든 요청)이 들어오면, Servlet Container가 DispatcherServlet 객체를 생성한다. DispatcherServlet이 내부적으로 init()을 호출할 때, <init-param>으로 등록된 Spring 설정 파일을 찾아 두번째 Spring Container를 구동한다.  

이를 자식 컨테이너라고 부르기로 하며, @ComponentScan으로 'Controller' Bean(+ 'HandlerMapping', 'ViewResolver')을 찾고 메모리에 생성한다.

 

즉 과정은

1. 애플리케이션을 실행하면 WAS가 처음으로 구동되어 Servlet Container 구동된다.

2. Servlet Container는 ContextLoaderListener 객체를 자동으로 메모리에 생성한다.

3. ContextLoaderListener은 Spring Container(== root Container)를 구동하고 CompoenetScan으로 DAO,Service,Bean들을 찾고 메모리에 등록한다.

4. 다음으로 요청이 들어오면 Servlet Container가 DispatcherServlet 객체를 생성한다(첫 요청에 대하여 최초로 한번만 생성된다)

5. init()메소드가 호출 된 후 Spring Container를 구동하고 Service() 메소드에 의하여 필요한 Controller를 찾아 실행된다. 

출처: https://starkying.tistory.com/entry/Spring-MVC-동작원리-구성요소 [Random Access Memories]

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함