サーブレット構成
サーブレット環境では、代替として、または web.xml
ファイルと組み合わせてサーブレットコンテナーをプログラムで構成するオプションがあります。次の例では、DispatcherServlet
を登録します。
Java
Kotlin
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("/");
}
}
import org.springframework.web.WebApplicationInitializer
class MyWebApplicationInitializer : WebApplicationInitializer {
override fun onStartup(container: ServletContext) {
val appContext = XmlWebApplicationContext()
appContext.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml")
val registration = container.addServlet("dispatcher", DispatcherServlet(appContext))
registration.setLoadOnStartup(1)
registration.addMapping("/")
}
}
WebApplicationInitializer
は Spring MVC によって提供されるインターフェースであり、実装が検出され、Servlet 3 コンテナーを初期化するために自動的に使用されるようにします。AbstractDispatcherServletInitializer
という名前の WebApplicationInitializer
の抽象基本クラスの実装により、サーブレットマッピングと DispatcherServlet
構成の場所を指定するメソッドをオーバーライドすることにより、DispatcherServlet
の登録がさらに簡単になります。
これは、次の例に示すように、Java ベースの Spring 構成を使用するアプリケーションに推奨されます。
Java
Kotlin
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[] { "/" };
}
}
class MyWebAppInitializer : AbstractAnnotationConfigDispatcherServletInitializer() {
override fun getRootConfigClasses(): Array<Class<*>>? {
return null
}
override fun getServletConfigClasses(): Array<Class<*>>? {
return arrayOf(MyWebConfig::class.java)
}
override fun getServletMappings(): Array<String> {
return arrayOf("/")
}
}
XML ベースの Spring 構成を使用する場合、次の例に示すように、AbstractDispatcherServletInitializer
から直接拡張する必要があります。
Java
Kotlin
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[] { "/" };
}
}
class MyWebAppInitializer : AbstractDispatcherServletInitializer() {
override fun createRootApplicationContext(): WebApplicationContext? {
return null
}
override fun createServletApplicationContext(): WebApplicationContext {
return XmlWebApplicationContext().apply {
setConfigLocation("/WEB-INF/spring/dispatcher-config.xml")
}
}
override fun getServletMappings(): Array<String> {
return arrayOf("/")
}
}
AbstractDispatcherServletInitializer
は、次の例に示すように、Filter
インスタンスを追加し、DispatcherServlet
に自動的にマッピングする便利な方法も提供します。
Java
Kotlin
public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {
// ...
@Override
protected Filter[] getServletFilters() {
return new Filter[] {
new HiddenHttpMethodFilter(), new CharacterEncodingFilter() };
}
}
class MyWebAppInitializer : AbstractDispatcherServletInitializer() {
// ...
override fun getServletFilters(): Array<Filter> {
return arrayOf(HiddenHttpMethodFilter(), CharacterEncodingFilter())
}
}
各フィルターは、その具象型に基づいてデフォルト名で追加され、自動的に DispatcherServlet
にマップされます。
AbstractDispatcherServletInitializer
の isAsyncSupported
保護メソッドは、DispatcherServlet
とそれにマッピングされたすべてのフィルターで非同期サポートを有効にする単一の場所を提供します。デフォルトでは、このフラグは true
に設定されています。
最後に、DispatcherServlet
自体をさらにカスタマイズする必要がある場合は、createDispatcherServlet
メソッドをオーバーライドできます。