如何将Magnolia CMS与Spring MVC集成?

4
我正在尝试通过blossom模块将我的spring应用程序与magnolia集成,但是我不知道该如何做。
我已经阅读了很多关于这个主题的文章,但我仍然不知道我的web.xml和applicationContext.xml文件应该是什么样子。
我的web.xml文件中是否应该有2个magnolia监听器和1个spring监听器,并且有2个servlet,一个用于blossom,一个用于spring?那么我的applicationContext应该是什么样子的呢?
你能否帮我提供一个web.xml和applicationContext.xml的工作集成示例?我在网上搜索了很久,但找不到web.xml。
非常感谢:)
2个回答

5

这里有一个针对Blossom的示例,是一个完整的Web应用程序设置。请查看其中的web.xml和applicationContext.xml。

该示例基于magnolia-empty-webapp项目,旨在成为您可以构建的起点。

在示例中,您会发现通常的Spring监听器不在web.xml中,也没有DispatcherServlet。相反,启动Spring的任务由样本模块完成。该模块还创建了一个BlossomDispatcherServlet,用于在渲染过程中呈现模板和段落。原因是当Magnolia启动时,它将进入安装/更新模式并显示安装UI。此时,您不希望Spring已经初始化,因为如果您有依赖于Magnolia的bean,则在Magnolia尚未准备好时,它们将无法启动。因此,模块启动Spring。

然而,如果您的Beans不依赖于Magnolia,则可以安全地将Springs监听器添加到web.xml中,并仅从模块启动BlossomDispatcherServlets。 另一个可能有帮助的事情是,Magnolia使用过滤器进行渲染,该过滤器将处理所有未被排除的请求。因此,如果您将servlet添加到web.xml中,则需要从Magnolias过滤器中排除它们的URL模式。另一种更直接的选择是将servlet添加到模块描述符xml文件中。然后,Magnolia将拾取它们并从其过滤器调用它们。模块描述符的文档在这里。因此,总之,我建议使用模块启动Spring并将servlet添加到模块描述符xml中。 在web.xml中配置东西也是可行的选择,但您需要考虑它如何与安装/更新阶段和请求路由交互。

0

Marius,

Blossom文档中提到了如何配置您的web.xml文件。

具体来说,如果您在自己的模块中启动Spring,则需要在Magnolia上下文侦听器之前将以下内容添加到您的web.xml文件中:

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

此外,您需要扩展您的模块类以初始化和销毁Blossom调度程序servlet,类似于以下方式:
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();
    }
}

希望这能有所帮助! Sean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接