Servlet Config

Dev.Hammy·2024년 3월 26일
0

서블릿 환경에서는 대안으로 또는 web.xml 파일과 함께 프로그래밍 방식으로 서블릿 컨테이너를 구성하는 옵션이 있습니다. 다음 예에서는 DispatcherServlet을 등록합니다.

import org.springframework.web.WebApplicationInitializer;

public class MyWebApplicationInitializer implements WebApplicationInitializer {

	@Override
	public void onStartup(ServletContext container) {
		XmlWebApplicationContext appContext = new XmlWebApplicationContext();
		appContext.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");

		ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet(appContext));
		registration.setLoadOnStartup(1);
		registration.addMapping("/");
	}
}

WebApplicationInitializer는 Spring MVC에서 제공하는 인터페이스이며, 당신의 구현(implementation)이 감지되고 자동으로 모든 Servlet 3 컨테이너를 초기화하는 데 사용되도록 보장합니다. AbstractDispatcherServletInitializer라는 WebApplicationInitializer의 추상 기본 클래스 구현을 사용하면, 서블릿 매핑과 DispatcherServlet 구성의 위치를 지정하는 메서드를 재정의하여 DispatcherServlet을 훨씬 쉽게 등록할 수 있습니다.

이는 다음 예제와 같이 Java 기반 Spring 구성을 사용하는 애플리케이션에 권장됩니다.

public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

	@Override
	protected Class<?>[] getRootConfigClasses() {
		return null;
	}

	@Override
	protected Class<?>[] getServletConfigClasses() {
		return new Class<?>[] { MyWebConfig.class };
	}

	@Override
	protected String[] getServletMappings() {
		return new String[] { "/" };
	}
}

XML 기반 Spring 구성을 사용하는 경우 다음 예제와 같이 AbstractDispatcherServletInitializer에서 직접 확장해야 합니다.

public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

	@Override
	protected WebApplicationContext createRootApplicationContext() {
		return null;
	}

	@Override
	protected WebApplicationContext createServletApplicationContext() {
		XmlWebApplicationContext cxt = new XmlWebApplicationContext();
		cxt.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
		return cxt;
	}

	@Override
	protected String[] getServletMappings() {
		return new String[] { "/" };
	}
}

AbstractDispatcherServletInitializer는 또한 다음 예제와 같이 Filter 인스턴스를 추가하고 자동으로 DispatcherServlet에 매핑되도록 하는 편리한 방법을 제공합니다.

public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

	// ...

	@Override
	protected Filter[] getServletFilters() {
		return new Filter[] {
			new HiddenHttpMethodFilter(), new CharacterEncodingFilter() };
	}
}

각 필터는 구체적인 유형에 따라 기본 이름으로 추가되고 자동으로 DispatcherServlet에 매핑됩니다.

AbstractDispatcherServletInitializerisAsyncSupported protected 메소드는 DispatcherServlet 및 여기에 매핑된 모든 필터에 대한 비동기 지원을 활성화할 수 있는 단일 위치를 제공합니다. 기본적으로 이 플래그는 true로 설정됩니다.

마지막으로 DispatcherServlet 자체를 추가로 사용자 정의해야 하는 경우 createDispatcherServlet 메서드를 재정의할 수 있습니다.

0개의 댓글