2011-10-24 20 views
3

私は花のモジュールを使ってマグノリアと私の春のアプリケーションを統合しようとしていますが、これを行う方法を理解する上で問題があります。マグノリアCMSとスプリングmvcの統合方法は?

私はこの件に関して多くのことを読んだことがありますが、実際にはweb.xmlとapplicationContext.xmlの外観は実際には分かりません。

私のweb.xmlファイルには、2つのmagnoliaリスナーと1つのスプリングリスナーと2つのサーブレットがあります。そして、私のapplicationContextはどのように見えますか?

私はweb.xmlとapplicationContext.xmlの連動の例を教えてもらえますか?私はウェブ上のあらゆる場所を見てきましたが、web.xmlはどこにもありません。

はどうもありがとうございました:)

答えて

5

フルWebアプリケーションのセットアップであるブロッサムためsampleがあります。そこにあるweb.xmlとapplicationContext.xmlを見てください。

サンプルはmagnolia-empty-webappプロジェクトに基づいています。このプロジェクトは、あなたが構築できる出発点として企画されています。

サンプルでは、​​通常のSpringリスナーがweb.xmlになく、そこにDispatcherServletがないことがわかります。代わりに、springを開始するタスクはsamplesモジュールによって行われます。また、BlossomDispatcherServletを作成し、レンダリングプロセスでテンプレートや段落をレンダリングします。これは、Magnoliaが起動すると、インストール/更新モードに入り、インストールUIを表示するためです。この時点で、Springは初期化されていません。なぜなら、Magnoliaに依存しているBeanを持っていれば、Magnoliaが準備ができていないときに開始できないからです。したがって、Springはモジュールによって開始されます。

しかし、豆がマグノリアに依存しない場合、安全にspringリスナーをweb.xmlに追加して、BlossomDispatcherServletsをモジュールから起動することができます。

マグノリアがフィルタを使用してレンダリングし、除外されていない限り、そのフィルタはすべてのリクエストを処理します。したがって、サーブレットをweb.xmlに追加すると、そのURLパターンをMagnoliasフィルタから除外したいでしょう。

もう少し簡単なもう一つの選択肢は、あなたのサーブレットをあなたのモジュール記述子xmlファイルに追加することです。その後、マグノリアはそれらをピックアップしてフィルタから呼び出します。モジュール記述子のドキュメントはhereです。

結論として、モジュールを使用してSpringを起動し、サーブレットをモジュール記述子xmlに追加することをお勧めします。 web.xmlの設定は実行可能なオプションですが、インストール/アップデートのフェーズとリクエストのルーティングとのやりとりの仕方を考慮する必要があります。

0

マリウス、

web.xmlファイルを設定する方法のdocs for Blossomタッチを。

独自のモジュールで春を開始している場合は特に、あなたはマグノリアのコンテキストリスナーの前にweb.xmlファイルにこれを追加する必要があるだろう:

<listener> 
<listener-class>info.magnolia.module.blossom.support.ServletContextExposingContextListener</listener-class> 
</listener> 

また、あなたがする必要があるだろうそうのような、何かを初期化し、ブロッサムディスパッチャサーブレットを破壊するためにあなたのモジュールクラスを拡張:ビットを助け

public class BlossomSampleModule extends BlossomModuleSupport implements ModuleLifecycle { 

public void start(ModuleLifecycleContext moduleLifecycleContext) { 
     initRootWebApplicationContext("classpath:/applicationContext.xml"); 
     initBlossomDispatcherServlet("blossom", "classpath:/blossom-servlet.xml"); 
    } 

public void stop(ModuleLifecycleContext moduleLifecycleContext) { 
     destroyDispatcherServlets(); 
     closeRootWebApplicationContext(); 
    } 
} 

希望を!

ショーン

関連する問題