스프링의 설정 - web.xml

프링 MVC 를 사용하려면, 가장 먼저 해야 할일이 웹어플리케이션 설정 파일인 web.xml 을 설정하는 것으로 부터 출발한다.
우선 개략적으로 흐름을 살펴보자.
1. 클라이언트로 부터 요청이 들어오면, 이는 DispatcherServlet 으로 전달되고,
2. 이 DispatcherServlet 은 HandlerMapping 을 사용하여 적당한 Controller 객체를 구하게된다.
3. 다시 DispatcherServlet 은 Cotroller 객체의 메소드를 호출하여 요청을 처리한다음에,
4. Cotroller 객체의 메소드가 리턴한 결과를 담은 ModelAndView 객체를 보내주면,
5. 다시 DispatcherServlet 은 ViewResolver로 부터 결과를 만들 View 객체를 구한다.
6. View 객체는 최종 응답을 생성하고.
여기서 우리는 Controller의 개발, View 객체 정도 이다.
이제 본론으로 들어가면,
DispatcherServlet 이 요청을 처리하게 하려면, 이 서블릿의 존재를 웹 어플리케이션에 설정해 주어야지.
web.xml 에서 해당 서블릿 정보를 추가해주자.
....

goDispatcher

org.springframework.web.servlet.DispatcherServlet


goDispatcher

*.do
....
이렇게 해놓으면,
WEB-INF/web.xml
/goDispatcher-servlet.xml <-- p="">
자동으로 <서블릿이름>-servlet.xml 형태의 설정파일을 읽도록 된다.
goDispatcher-servlet.xml 에는 스프링이 사용할 설정들이 들어가게된다.
예) HandlerMapping , ViewResolver, ExceptionResolver, 등.
근데,,
한개 이상의 설정파일을 읽어야 한다거나, <서블릿이름>-servlet.xml 와 다른이름의 설정파일을
하고싶을땐?

spring-dispatcher
org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:/config/spring/web-mvc.xml
classpath:/config/spring/bus-mvc.xml --설정파일의 경로는 웹어플리케이션 루트 디렉토리를 기준으로 한다.


1

spring-dispatcher
*.html
그럼.. 1개이상의 DispatcherServlet 을 설정하려고 할떄는? 하나는 web 페이지용, 하나는 REST 서비스용..

goWebDispatcher
org.springframework.web.servlet.DispatcherServlet

contextConfigLocation
/WEB-INF/webpage.xml


goRestDispatcher

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation
/WEB-INF/rest.xml

이렇게 해도 상관없다..
하지만, 이렇게 하면, webpage.xml 여기에 선언된 Bean 을 rest.xml 에서 사용하지는 못한다.
그럼... DAO,SERVICE 등의 공통적으로 사용되는 Bean 을 양쪽에 다 선언해줘야 하나?
아니다..
공통적으로 사용되는 Bean 은
ContextLoaderListener를 Servlet Linstener 로 등록하여 공통으로 사용되는 설정파일들의 목록을 지정해주면 된다.
...

contextConfigLocation

classpath:/company-core-context.xml
classpath:/comp-control-context.xml

org.springframework.web.context.ContextLoaderListener

....
이런식으로.
그래서 종합해보면,

contextConfigLocation

classpath:/company-core-context.xml
classpath:/comp-control-context.xml

org.springframework.web.context.ContextLoaderListener

goWebDispatcher
org.springframework.web.servlet.DispatcherServlet

contextConfigLocation
/WEB-INF/webpage.xml


goRestDispatcher
org.springframework.web.servlet.DispatcherServlet

contextConfigLocation
/WEB-INF/rest.xml

이렇게 하게 되면, webpage.xml 과, rest.xml 에서는 서로 참조 될 필요가 없는 Bean 만 등록이 되고, 공통 설정은 classpath:/company-core-context.xml classpath:/comp-control-context.xml
에 등록하면 되는 것이다..
*classpth: 이게 있으면, 클래스패스에 위치한 설정파일, 이런 접두어가 없으면, 웹어플리케이션 루트 디렉토리에서 찾는다.
*contextConfigLocation 에서 param-value 의 경로를 지정하지 않으면, WEB-INF/applicationContext.xml 에서 값을 참조한다.

댓글

가장 많이 본 글