Search code examples
javajspstruts2jstlognl

Struts2 cross context JSP access using c:import throws ClassCastException


I have a couple of web apps deployed on the same server. There's a JSP in app1 that I want to access from app2. I enabled cross context access in the tomcat and tried this JSTL tag:

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

The myJSP.jsp uses some struts2 tags itself.

I also made sure the required libraries are on both the app1 and app2's lib directory. During the runtime though, the app2's page won't render and I see this error:

Caused by: java.lang.ClassCastException: com.opensymphony.xwork2.ognl.OgnlValueStack cannot be cast to com.opensymphony.xwork2.util.ValueStack at org.apache.struts2.views.jsp.TagUtils.getStack(TagUtils.java:53) at org.apache.struts2.views.jsp.StrutsBodyTagSupport.getStack(StrutsBodyTagSupport.java:44) at org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:48)

Any idea why? If I copied the jsp to the app2 and referenced it using the same c:import tag, it works just fine!


Solution

  • You shouldn't do such things. The web applications are protected and isolated from each other to run in the same container. For further descriptions and clarification see this guide.

    If you want to share resources from different modules you need to copy them at the build time.