1

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

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

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

<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 并且所有 server/filters/dispatching/* 条目都将 toMagnoliaResources 设置为 true。

任何提示将不胜感激。

谢谢你。

4

2 回答 2

1

恕我直言,这与 Magnolia 无关,而与 c:import 的工作方式无关。

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

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

高温下,

于 2013-10-25T11:49:26.553 回答
1

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

Tomcat 具有crossContext配置此属性的属性:

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

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

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

于 2013-10-28T08:04:51.593 回答