DispatcherServlet

Dev.Hammy·2024년 3월 26일
0

반응형 스택에서 이에 상응하는 내용 보기

다른 많은 웹 프레임워크와 마찬가지로 Spring MVC는 중앙 ServletDispatcherServlet이 요청 처리를 위한 공유 알고리즘을 제공하는 전면 컨트롤러 패턴을 중심으로 설계되었으며 실제 작업은 구성 가능한 위임 컴포넌트에 의해 수행됩니다. 이 모델은 유연하며 다양한 워크플로를 지원합니다.

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]
프로그래밍 방식 사용 사례의 경우 GenericWebApplicationContextAnnotationConfigWebApplicationContext 대신 사용할 수 있습니다. 자세한 내용은 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 구성을 사용하여 자체 및 내장된 서블릿 컨테이너를 부트스트랩합니다. FilterServlet 선언은 Spring 구성에서 감지되고 서블릿 컨테이너에 등록됩니다. 자세한 내용은 Spring Boot 설명서를 참조하세요.

0개의 댓글