我正在尝试通过开花模块将我的spring应用程序与magnolia集成,但我无法理解如何执行此操作。
我已经阅读了很多关于这个主题的内容,但我实际上并不知道我的web.xml和applicationContext.xml应该是什么样子。
我的web.xml文件中是否应该有2个玉兰花听众和春天的听众,并且有两个servlet用于开花,一个用于春天?然后我的applicationContext应该怎么样?
您能否帮我介绍一下web.xml和applicationContext.xml的工作集成示例?我在网上到处都看,但web.xml无处可去。
非常感谢:)
答案 0 :(得分:5)
对于Blossom来说,sample是一个完整的Web应用程序设置。看看那里的web.xml和applicationContext.xml。
该示例基于magnolia-empty-webapp项目,该项目旨在作为您可以构建的起点。
在示例中,您将看到通常的Spring侦听器不在web.xml中,并且那里也没有DispatcherServlets。相反,启动弹簧的任务由样本模块完成。该模块还创建一个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中配置内容也是一个可行的选择,但您需要考虑如何与安装/更新-phase和请求路由进行交互。
答案 1 :(得分:0)
的Marius,
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();
}
}
希望有所帮助!
肖恩