1. Spring IoC Container 연동(Root WebApplicationContext)
1-1) 서블릿에서 스프링이 제공하는 IoC 컨테이너 활용하는 방법
1-1)-1. Web Mvc 의존성 추가
1-1)-2. web.xml
context-loader-listener 추가
Java 설정파일
→ context-class와 configuration은 filter보다 먼저 상위에 위치해 있어야 함.
→ web-app의 빨간 줄이 사라짐.
context-loader-listener의 'ContextLoaderListener'가
context-class(java 설정)에 있는 'AnnotationConfigWebApplicationContext'를 만들면서
context-config-location(java 설정)에 있는 'me.ssu.config.AppConfig'의 설정파일을
가지고 만듦. 그 Application Context 안에는 HelloService가 Bean으로 들어있음.
그러면 우리는 Servlet에서 Application Context를 통해 HelloService를 꺼내서
사용할 수 있음. 아직 Spring MVC는 아님.
Application 세부 등록 과정
ContextLoaderListener
→ 전체적인 맥락은 ContextLoaderListener가 WebApplication을
→ ServletContext(Servlet이 전체 공용으로 사용하는 저장소 개념)에 등록해준다는 의미.
⇒ get.ServletContext()
2. DispatcherServlet(Front-Controller)
2-1) DispatcherServlet
2-1)-1. DispatcherServlet
Root WebApplicationContext를 상속 받아 Servlet WebApplicationContext를
만드는 역할을 'DispatcherServlet'이 함. Dispatch(보내다)
가장 앞 단에서 HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아
적합한 컨트롤러에 위임해주는 프론트 컨트롤라고 정의.
2-1)-2. DispatcherServlet의 일처리
클라이언트로부터 어떠한 요청이 오면 Tomcat과 같은 서블릿 컨테이너가 요청을 받게 됨.
이 모든 요청을 먼저 프론트 컨트롤러인 DispatcherServlet이 받게 됨.
공통적인 작업을 먼저 처리한 후에 해당 요청을 처리해야 하는 세부 컨트롤러를 getBean()으로 가져오고, 정해진 메소드를 실행시켜 작업을 위임함.
예외가 발생했을 때 DispatcherServlet이 처리함.
2-1)-3. Root WebApplicationContext와 DispatcherServlet 상속구조 이유
→ 그리고 다른 DispatcherServlet에서도 서로 공유할 수 있는 상황(Bean)이
→ 생기기 때문에 상속구조를 만들어서 하는 이유가 됨.
2-2) DispatcherServlet 구조
2-3) DispatcherServlet의 흐름
3. DispatcherServlet 실전
3-1) DispatcherServlet
3-1)-1. HelloController
어떤 요청을 처리하는 HandlerMapping을 아래와 같은 경우로 만들어서 하고 싶다면
Spring MVC를 써야하며, 이러한 Handler 요청을 Dispatcher(보내다)해줄 수 있고
@어노테이션 이해하며 HTTP Response로 만들어줄 수 있는 DispatcherServlet을 써야 함.
3-2) DispatcherServlet 등록(계층 구조)
계층 구조에서 RootWebApplicationContext(부모에 해당)
DispatcherServlet(자식에 해당) 자식은 부모(Service, Repository)를 참조할 수 있음.
3-2)-1. Root WebApplicationContext
ContextLoaderListener
3-2)-2. DispatcherServlet
4. DispatcherServlet 동작원리