【问题标题】:Struts2 cross context JSP access using c:import throws ClassCastException使用 c:import 的 Struts2 跨上下文 JSP 访问抛出 ClassCastException
【发布时间】:2013-05-01 06:25:00
【问题描述】:

我在同一台服务器上部署了几个 Web 应用程序。我想从 app2 访问 app1 中有一个 JSP。我在 tomcat 中启用了跨上下文访问并尝试了这个 JSTL 标签:

<c:import url="/pages/myJSP.jsp" context="/app1" />

myJSP.jsp 本身使用了一些 struts2 标签。

我还确保所需的库位于 app1 和 app2 的 lib 目录中。但是在运行时,app2 的页面不会呈现,我看到了这个错误:

引起:java.lang.ClassCastException: com.opensymphony.xwork2.ognl.OgnlValueStack 不能转换为 com.opensymphony.xwork2.util.ValueStack 在 org.apache.struts2.views.jsp.TagUtils.getStack(TagUtils.java:53) 在 org.apache.struts2.views.jsp.StrutsBodyTagSupport.getStack(StrutsBodyTagSupport.java:44) 在 org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:48)

知道为什么吗?如果我将 jsp 复制到 app2 并使用相同的 c:import 标签引用它,它就可以正常工作!

【问题讨论】:

    标签: java jsp struts2 jstl ognl


    【解决方案1】:

    你不应该做这样的事情。 Web 应用程序受到保护并相互隔离,以便在同一个容器中运行。如需更多描述和说明,请参阅this 指南。

    如果您想共享来自不同模块的资源,您需要在构建时复制它们。

    【讨论】:

    • 如何在构建时复制它们? maven 有这个选项吗?
    • 有了 Ant 你可以做到这一点,还有一个 Maven 与 Ant 集成的选项。
    • 似乎找不到任何参考资料,有吗?
    • 你甚至可以使用 maven 资源插件来做到这一点,例如 example。几年前,我将它与 IntelliJ Idea Modules 一起使用,以便在其他模块之间共享一个模块,它完美地复制了资源。
    • 谢谢你,我要试试这个!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2015-06-08
    • 1970-01-01
    • 2015-08-10
    相关资源
    最近更新 更多