다른 많은 웹 프레임워크와 마찬가지로 Spring MVC는 중앙 Servlet
인 DispatcherServlet
이 요청 처리를 위한 공유 알고리즘을 제공하는 전면 컨트롤러 패턴을 중심으로 설계되었으며 실제 작업은 구성 가능한 위임 컴포넌트에 의해 수행됩니다. 이 모델은 유연하며 다양한 워크플로를 지원합니다.
DispatcherServlet
은 모든 Servlet
과 마찬가지로 Java 구성을 사용하거나 web.xml
에서 서블릿 사양에 따라 선언되고 매핑되어야 합니다. 차례로 DispatcherServlet
은 Spring 구성을 사용하여 요청 매핑, 뷰 해결, 예외 처리 등에 필요한 위임 컴포넌트를 검색합니다.
다음 Java 구성 예는 Servlet 컨테이너에 의해 자동 감지되는 DispatcherServlet
을 등록하고 초기화합니다(Servlet Config 참조).
public class MyWebApplicationInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) {
// Load Spring web application configuration
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(AppConfig.class);
// Create and register the DispatcherServlet
DispatcherServlet servlet = new DispatcherServlet(context);
ServletRegistration.Dynamic registration = servletContext.addServlet("app", servlet);
registration.setLoadOnStartup(1);
registration.addMapping("/app/*");
}
}
[Note]
ServletContext API를 직접 사용하는 것 외에도AbstractAnnotationConfigDispatcherServletInitializer
를 확장하고 특정 메서드를 재정의할 수도 있습니다(컨텍스트 계층 아래의 예 참조).
[Note]
프로그래밍 방식 사용 사례의 경우GenericWebApplicationContext
를AnnotationConfigWebApplicationContext
대신 사용할 수 있습니다. 자세한 내용은GenericWebApplicationContext
javadoc을 참조하세요.
다음 web.xml
구성 예는 DispatcherServlet
을 등록하고 초기화합니다.
<web-app>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/app-context.xml</param-value>
</context-param>
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
</web-app>
[Note]
Spring Boot는 다른 초기화 순서를 따릅니다. Spring Boot는 서블릿 컨테이너의 라이프사이클에 연결(hooking into)하는 대신 Spring 구성을 사용하여 자체 및 내장된 서블릿 컨테이너를 부트스트랩합니다.Filter
및Servlet
선언은 Spring 구성에서 감지되고 서블릿 컨테이너에 등록됩니다. 자세한 내용은 Spring Boot 설명서를 참조하세요.