【问题标题】:how to integrate magnolia cms with spring mvc?如何将 magnolia cms 与 spring mvc 集成?
【发布时间】:2011-12-14 05:28:35
【问题描述】:
我正在尝试通过开花模块将我的 spring 应用程序与 magnolia 集成,但我无法理解如何执行此操作。
我已经阅读了很多关于这个主题的文章,但我仍然不知道我的 web.xml 和 applicationContext.xml 应该是什么样子。
我的 web.xml 文件中是否应该有 2 个 magnolia 侦听器和 spring 侦听器,并有 2 个 servlet 一个用于开花,一个用于春季?那么我的 applicationContext 应该是什么样子呢?
您能帮我举一个 web.xml 和 applicationContext.xml 的工作集成示例吗?我在网上到处找,但 web.xml 无处可寻。
非常感谢:)
【问题讨论】:
标签:
java
spring
spring-mvc
content-management-system
magnolia
【解决方案1】:
Blossom 有一个 sample,它是一个完整的 web 应用程序设置。看看那里的 web.xml 和 applicationContext.xml。
该示例基于 magnolia-empty-webapp 项目,该项目旨在作为您可以构建的起点。
在示例中,您将看到通常的 Spring 侦听器不在 web.xml 中,并且其中也没有 DispatcherServlets。相反,启动 spring 的任务由 samples 模块完成。该模块还创建了一个 BlossomDispatcherServlet,用于在渲染过程中渲染模板和段落。这样做的原因是,当 Magnolia 启动时,它将进入安装/更新模式并显示安装 UI。此时,您不希望 Spring 已初始化,因为如果您有依赖于 Magnolia 的 bean,它们将在 Magnolia 未准备好时无法启动。所以 Spring 是由模块启动的。
但是,如果您的 bean 不依赖于 Magnolia,那么您可以安全地将 Springs 侦听器添加到 web.xml 并从模块中启动 BlossomDispatcherServlets。
了解可能有助于了解的另一件事是 Magnolia 使用过滤器进行渲染,并且该过滤器将处理所有进入的请求,除非它们已被排除。因此,如果您将 servlet 添加到 web.xml,您需要从 Magnolias 过滤器中排除它们的 url 模式。
另一个更直接的选择是将您的 servlet 添加到您的模块描述符 xml 文件中。然后 Magnolia 会从过滤器中提取它们并调用它们。模块描述符的文档是here。
总之,我建议使用模块启动 Spring 并将 servlet 添加到模块描述符 xml。在 web.xml 中配置东西也是一个可行的选择,但您需要考虑它与安装/更新阶段和请求路由的交互方式。
【解决方案2】:
马吕斯,
docs for 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();
}
}
希望能有所帮助!
肖恩