典型的なSpring MVC Webアプリでは、web.xml
でDispatcherServlet
を次のように宣言します
<!-- MVC Servlet -->
<servlet>
<servlet-name>sample</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>sample</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
リスナー、フィルターなどとともに.
Servlet-api 3.0では、サーブレットを@WebServlet
に追加する代わりに、アノテーションweb.xml
を使用して宣言できます。 Spring 3.2には、そのコンテキスト構成用の@Configuration
および@EnableXYZ
がすでにあります。 DispatcherServlet
に似たものはありますか? xmlなしで完全なSpringアプリケーションを構成する方法はありますか?
JEE6で、アプリケーションコンテナーがサーブレット3.0に対応している場合、必要なことは次のとおりです。
com.foo.FooServletContainer
)META-INF/services
という名前のjavax.servlet.ServletContainerInitializer
フォルダに、上記の実装の名前を含むファイルを作成します(com.foo.FooServletContainer
)Spring 3には、上記のものを実装するSpringServletContainerInitializer
という名前のクラスがバンドルされています(META-INF/services
でファイルを自分で作成する必要はありません。このクラスは WebApplicationInitializer
の実装を呼び出すだけです。したがって、クラスパスでそれを実装するクラスを1つ提供するだけでかまいません(次のコードは上記のドキュメントから抜粋)。
public class FooInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) {
WebApplicationContext appContext = ...;
ServletRegistration.Dynamic dispatcher =
container.addServlet("dispatcher", new DispatcherServlet(appContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
web.xml
については以上ですが、@Configuration
、@EnableWebMvc
などを使用してWebアプリケーションを構成する必要があります。
はい、Webアプリケーションサーブレット3.0以降を起動するのに_web.xml
_は必要ありません。 Alexがすでに述べたように、WebApplicationInitializer
クラスを実装し、onStartup()
メソッドをオーバーライドできます。 WebApplicationInitializer
は、Spring MVCによって提供されるインターフェースで、実装が検出され、サーブレット3コンテナーの初期化に自動的に使用されます。
Xmlなしで完全なSpringアプリケーションを構成する方法はありますか?
別の方法を追加するためだけにこの回答を追加します。 WebApplicationInitializer
を実装する必要はありません。 WebApplicationInitializer
という名前のAbstractDispatcherServletInitializer
の抽象基本クラス実装により、メソッドをオーバーライドしてサーブレットマッピングとDispatcherServlet構成の場所を指定するだけで、DispatcherServletを簡単に登録できます。
_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[] { "/" };
}
}
_