web/Spring

스프링 DispatcherServlet 설정 방법

반응형

DispatcherServlet

Spring MVC는 dispatcherServlet을 사용하기 위해서는 web.xml에 정의를 해주었어야 했다.

하지만 web.xml에 설정하지 않고도 다른 Java 파일로 설정할 수 있는 방법이 있다.


기존의 web.xml에 설정방식은 다음과 같다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/dispatcher-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
 
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
cs



XML에 정의한 서블릿 설명은 다음과 같다.
1. 이름은 dispatcher 이다.
2. org.springframework.web.servlet.DispatcherServlet의 인스턴스이다.
3. contextConfigLocation에 위치한 파일들과 함께 초기화 될 것이다.

load-on-startup은 정수값이 기록되는데 여러가지 서블렛이 로드될 때 순서를 정의하는 것이다.
정수값이 작은 서블릿부터 먼저 로드된다.

Servlet 3.0이 출시되면서 web.xml은 옵션이 되었고 DispatcherServlet 설정을 Java를 사용해서 정의할 수 있게 되었다.

방법은 하단의 예제와 같이 WebApplicationInitializer를 구현하여 정의할 수 있다.




1
2
3
4
5
6
7
8
9
10
11
12
13
public class MyWebAppInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext container) {
        XmlWebApplicationContext context = new XmlWebApplicationContext();
        context.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
 
        ServletRegistration.Dynamic dispatcher = container
          .addServlet("dispatcher"new DispatcherServlet(context));
 
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");
    }
}
cs



하지만 위의 설정에서도 config에 관련된 xml 파일이 존재해야 하기 때문에 xml을 완전하게 사용하지 않기 위해서 다음과 같이 정의하여 사용할 수 있다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MyWebAppInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext container) {
        AnnotationConfigWebApplicationContext context
          = new AnnotationConfigWebApplicationContext();
        
        // Java Config 설정한 클래스 위치 추가.  
        context.setConfigLocation("com.example.app.config");
 
        container.addListener(new ContextLoaderListener(context));
 
        ServletRegistration.Dynamic dispatcher = container
          .addServlet("dispatcher"new DispatcherServlet(context));
         
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");
    }
}
cs



단 이 방식을 사용하기위해서는 xml을 사용하지 않기때문에 root-servlet.xml, servlet-context.xml 들도 모두 java config로 선언해야 한다.

반응형