将magnoliaPublic上下文内容嵌入到不同的Web应用程序上下文中

时间:2013-10-24 17:38:02

标签: jsp integration magnolia

我们正在尝试将Magnolia管理的内容嵌入到现有Web应用程序的某些JSP中。在Tomcat中,我们部署并设置了一个 magnoliaPublic 上下文,该上下文沿着我们现有的 app 上下文(即两个不同的WAR文件)运行。在浏览器中,您可以访问:

  • http://localhost:8080/app/test.jsp
  • http://localhost:8080/magnoliaPublic/footer

因此,例如,我们希望/app/test.jsp包含像/magnoliaPublic/footer(只是一个div)的Magnolia页面。我们设法通过添加:

来实现

<c:import url="http://localhost:8080/magnoliaPublic/footer" />

/app/test.jsp。这几乎没问题,但相对包含是最好的:

<c:import context="/magnoliaPublic" url="/footer" />

后一行抛出

The requested resource (/magnoliaPublic/footer) is not available

我怀疑这是由于Magnolia的过滤器链的工作原理,尽管它设置为调度INCLUDE并且所有服务器/过滤器/调度/ *条目都必须将MagnoliaResources设置为true。

任何提示都将受到赞赏。

谢谢。

2 个答案:

答案 0 :(得分:1)

恕我直言这与Magnolia无关,而且所有这些都与c:import如何运作有关。

您是否尝试验证您的请求是否已达到Magnolia的过滤器链?

您可以通过在应用服务器上启用请求跟踪,在其间插入代理或只是在Magnolia的过滤器链中添加info.magnolia.debug.DumpHeadersFilter过滤器并观察日志来实现此目的。

HTH,

答案 1 :(得分:1)

默认情况下,Tomcat不允许您访问另一个Servlet Context。我想这就是使用c:import属性的context失败的原因。

Tomcat具有crossContext属性,用于配置:

  

如果要在此应用程序中调用ServletContext.getContext()以成功返回在此虚拟主机上运行的其他Web应用程序的请求调度程序,则设置为true。在安全意识环境中设置为false(默认值),以使getContext()始终返回null。

来源:http://tomcat.apache.org/tomcat-7.0-doc/config/context.html

启用crossContext可能会解决您的问题。