Кросс-контекстный JSP-доступ Struts2 с использованием c:import создает исключение ClassCastException

У меня есть несколько веб-приложений, развернутых на одном сервере. В app1 есть JSP, к которому я хочу получить доступ из app2. Я включил кросс-контекстный доступ в Tomcat и попробовал этот тег JSTL:

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

myJSP.jsp сам использует некоторые теги struts2.

Я также позаботился о том, чтобы необходимые библиотеки находились в каталоге lib как app1, так и app2. Хотя во время выполнения страница 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, он работает просто отлично!

1 ответ

Решение

Вы не должны делать такие вещи. Веб-приложения защищены и изолированы друг от друга для запуска в одном контейнере. Для дальнейших описаний и разъяснений см. Это руководство.

Если вы хотите поделиться ресурсами из разных модулей, вам нужно скопировать их во время сборки.

Другие вопросы по тегам