29

典型的なSpringMVCWebアプリでは、次のように宣言DispatcherServletします。web.xml

<!-- 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似たものがありますか?DispatcherServletxmlなしで完全なSpringアプリケーションを構成する方法はありますか?

4

2 に答える 2

40

JEE6では、アプリケーションコンテナがサーブレット3.0に対応している場合、実行する必要があるのは次のとおりです。

  1. ServletContainerInitializerを実装するカスタムクラスを作成します(つまりcom.foo.FooServletContainer
  2. 上記の実装の名前を含むという名前のMETA-INF/servicesフォルダにファイルを作成します( )javax.servlet.ServletContainerInitializercom.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を使用してWebアプリを構成する必要があります。@Configuration@EnableWebMvc

于 2013-02-21T17:26:54.960 に答える
1

web.xmlはい、webappサーブレット3.0以降を起動する必要はありません。WebApplicationInitializerAlexがすでに述べたように、クラスとオーバーライドonStartup()メソッドを実装できます。WebApplicationInitializerは、Spring MVCによって提供されるインターフェースであり、実装が検出され、サーブレット3コンテナーを初期化するために自動的に使用されるようにします。

xmlなしで完全なSpringアプリケーションを構成する方法はありますか?

別の方法を追加するためだけにこの回答を追加します。を実装する必要はありませんWebApplicationInitializerWebApplicationInitializernamedの抽象基本クラス実装により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[] { "/" };
    }

}
于 2016-01-26T06:20:49.423 に答える