[SpringMVC] WebApplicationContext 정리
업데이트:
WebApplication Context
web application context
는 applcation context를 상속하고 servlet context에 접근할 수 있는 기능이 추가된 application context이다. web application context
는 servlet context 일종의 객체로서 servlet container에서 만들어지는데 여러 servlet이 공유할 수 있는 정보를 내포하고 있다.
dispatcher servlet은 생성될 때 web application context를 전달한다. servlet context는 여러 servlet에 접근이 가능하기 때문에 여러 dispatcher servlet에서도 접근이 가능하다. 여러 dispatcher servlet이 생성될 때는 개별적으로 web application context가 생성되는데 이들을 각각 따로 접근하기란 어렵다.
이에 따라서 모든 dispatcher context와 web application context에 접근 가능할 수 있는 root application context
가 필요로 된다. root application context는 servlet context가 생성될 때 만들어지고 setAttribute()
를 통해 root application Context가 servletContext에 포함되게 된다.
그렇게 되면 dispatcher servlet들은 servlet context에 접근할 수 있게 되고 이곳에서 root application context를 가지고와 dispatcher servlet에 의해 만들어진 application context와 부모관계를 갖게 된다.
Root application context
root application context를 만들 때는 두가지 방법이 이용될 수 있다.
web.xml 기반
listner-class
태그 안에 ContextLoaderListener
를 설정해주게 되면 context-param
내의 param-name
내의 설정되어 있는 String을 읽어 그에 맞는 web application context를 param-value
태그 안의 디렉토리로 만들어준다.
java 기반
spring 은 ServletContextListener 인터페이스를 구현한 ContextLoaderListener를 제공한다.
ServletContextListener는 ServletContext가 만들어질 때나 그 내용이 변경될 때와 같이 이벤트로써 호출되는데 ContextLoaderListener
를 통해 web application 전체에서 사용 가능한 web application context를 만든다(이는 편의상 root application context라고 말한다.) servlet context에 접근 할 수 있는가 할 수 없는가에 따라 root application context와 application context로 나뉘게 된다.
Dispatcher Servlet, Application Context, WAS
계층형으로 was의 구조를 보면 다음과 같다.
이곳에서 SpringMVC의 위치는 요청에 대한 작업을 위임할 Controller를 결정하고, Controller와 서비스 계층과 데이터 액세스 계층을 통과한 결과를 다시 반환해 결과를 받는 Model, 그리고 이를 표현하는 View를 포함하고 있다.
이 다음으로 지금까지 배웠던 Servlet Application context는 dispatcher servlet을 통해 Controller에 요청하고 Controller는 Handler과 매핑되어있다. 이 Controller는 Servlet Application Context를 통해 접근할 수있으며 Service와 Data Access 계층은 Root Application Context를 통해 접근 가능하다.
댓글남기기