我们正在尝试将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。
任何提示都将受到赞赏。
谢谢。
答案 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
可能会解决您的问题。