DevBoi

[스프링] 스프링의 동작과정 본문

Develop/[Spring]

[스프링] 스프링의 동작과정

HiSmith 2022. 2. 18. 00:53
반응형

스프링의 동작과정을 살펴보자

 

<was가 기동될때>

1. WAS가 구동되면 web.xml을 로딩한다.

2. 로딩된 web.xml에서 ContextLoaderListener 클래스를 생성한다.

3. 생성된 ContextLoaderListener는 root-context.xml을 로딩한다.

이때 root-context는 Context-param으로 선언 되었기 때문에 WebApp 전역적으로 사용한다

 

 

4. 로딩된 root-context에 선언되어있는 service,dao등의 객체가 생성이 된다.

 

<클라이언트에게서 요청이 올때>

DispathcherServlet이 구동된다. 이때 Servlet으로 구동되었기 때문에 해당 부분에서만 사용가능한 Context가 된다.

해당 DispathcherServlet이 구동되면서 servlet context를 불러온다.

등록된 servlet context에서 controller를 생성한다.

 

<클라이언트 요청 처리>

클라이언트에서 온 요청을 DispathcherServlet이 가로챈다.

HandlerMapping class가 알맞은 요청에 따라 controller를 찾고 이를 Dispathcher servlet에 전달한다.

HandlerAdapter는 HandlerMapping 이 찾은 컨트롤러의 적절한 메소드를 실행하여, ModelAndView 객체를 DispathcerServlet에전달한다.

그러면 ViewResolver가 ModelAndView 객체에 따른 알맞은 View를 DispathcherServlet에 전달한다,

이후 View가 리턴되면 DispatcherServlet이 View객체에 응답결과 생성을 요청한 후에, 화면에 보여지게 된다.

 

 

 

정리를 하면, web.xml에는 크게 (root-context,servlet-context가 있다.)

 

1. context-param을 이용하여 root-context설정을 해주는 부분(action-mybatis가 root-context)

2. listener태그의 ContextLoaderListener 클래스를 이용하여, contextConfigLocation에 있는 root-context를 불러오는 부분
3. 클라이언트 요청을 받으면, servlet 태그안에 설정들이 작동하면서, servlet-context를 불러오고, 동시에 root-context를 같이 불러온다. 이때 DispatcherServlet클래스를 실행한다.

 

- root-context

root-context에 등록되는 빈들은 모든 컨텍스트에서 사용할수 있다.

service, dao를 포함한 웹 환경에 독립적인 빈들을 담아둔다.

서로다른 servlet-context에서 공유해야하는 빈들을 등록해놓고 사용할수 있다.

servlet-context내 빈들은 사용이 불가하다.

 

-servlet-context

servlet-context에 등록되는 빈들은 해당 컨텍스트에서만 사용할수 있다.

DispatcherServlet이 직접 사용하는 컨트롤러를 포함한 웹 관련 빈들을 등록하는데 사용한다.

독자적인 컨텍스트들을 가지며, root-context 내 빈 사용이 가능하다.

 

 

 

<클라이언트 요청 시 스프링 프레임워크 동작 과정>

 

반응형