2012-04-09 11 views
1

ディスパッチャーサーブレットとその構成ファイルを動的にロードする必要があります。私は春の非常に最近の開発であるwebapplicationinitializerを使用してディスパッチャーサーブレットを注入するコンセプトを見ています。次のドキュメントで概要を説明します: http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/WebApplicationInitializer.htmlSpringmvcのWebapplicationinitializerを使用してディスパッチャーサーブレットを挿入します。

私は基本的なセットアップを行い、その機能していないのです。私は伝統的な春の開発からどこに揺れ始めるべきか理解できません。誰も私にこの新しい仕組みの使い方の例を教えてもらえますか?私は次のコードを使用:

public class MyWebAppInitializer implements WebApplicationInitializer { 

@Override 
public void onStartup(ServletContext container) { 
    // Create the 'root' Spring application context 
    AnnotationConfigWebApplicationContext rootContext = 
    new AnnotationConfigWebApplicationContext(); 
    rootContext.register(AppConfig.class); 

    // Manage the lifecycle of the root application context 
    container.addListener(new ContextLoaderListener(rootContext)); 

    // Create the dispatcher servlet's Spring application context 
    AnnotationConfigWebApplicationContext dispatcherContext = 
    new AnnotationConfigWebApplicationContext(); 
    dispatcherContext.register(DispatcherConfig.class); 

    // Register and map the dispatcher servlet 
    ServletRegistration.Dynamic dispatcher = 
    container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext)); 
    dispatcher.setLoadOnStartup(1); 
    dispatcher.addMapping("/"); 
} 

}

を我々は動的ディスパッチャサーブレットを注入している場合はさらに、それはWebコンテナ(Tomcatの)中のディスパッチャサーブレット負荷が起動することを意味するのでしょうか?

+0

私は経験から、 'WebApplicationInitializer'が動作することを知っています。あなたは「*ただ働いていない」と説明できますか? –

+0

@TomaszNurkiewiczコメントをいただきありがとうございます。私は基本的な例そのものをセットアップできません。私はweb.xmlにContextLoaderListenerを設定しました。ドキュメントでは、webapplicationinitializerを通常のクラスとして使用することができます。だから、私は最初の投稿に記載されたコードを使用しました。あなたが共有する例があれば、私に見せてもらえますか? – codejammer

+0

@codejammer私は自分の答えを更新しました。あなたはそれからいくつかの手がかりを得るかもしれません。 –

答えて

0

/からdispatcher.addMapping("/*")にマッピングを変更してみてください。

/は既にTomcatのデフォルトサーブレットにマップされているため、addMapping("/")は何もしません。あなたはTomcatの起動時にTomcatのバージョン< = 14

を使用している場合

にのみ適用され、Tomcatはimplements ServletContainerInitializer、そのクラスを探します。春には、クラスSpringServletContainerInitializerが見つかります。このクラスには、Tomcatのロードされたクラスのセット(基本的にすべてのクラス)が与えられます。次に、implements WebApplicationInitializerのいずれかを探して、onStartup()と呼び出します。ここで、あなたが上に投稿したメソッドがコンテキストに入り、Springの `DispatcherServlet 'が初期化されます。

関連する問題