Когда я смешиваю объявления taglib JSTL 1.0 и JSTL 1.1, это вызывает ParseException на некоторых из моих серверов, но не на всех.
Вот блок кода, который доставляет мне неприятности:
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<c:set var="TEXTVARIABLE">|STRINGOFTEXT|</c:set>
<c:set var="OTHERTEXTVARIABLE">${fn:contains(TEXTVARIABLE, '|STRINGOFTEXT|')}</c:set>
А вот и исключение:
* +1007 *
javax.servlet.jsp.JspException: com.caucho.jsp.JspLineParseException: /WEB-INF/jsp/online/system/modules/com.MYCOMPANY.marketing/templates/common/MY_JSP_PAGE.jsp:1: tag = 'out' / attribute = 'value': произошла ошибка при разборе атрибута настраиваемого действия «value» со значением «$ {fn: Содержит (TEXTVARIABLE, '| STRINGOFTEXT |')}": org.apache.taglibs.standard.lang .jstl.parser.ParseException: EL функции не поддерживаются.
Однако все работает нормально, если я изменю URI для объявления ядра на http://java.sun.com/jsp/jstl/core
Итак, вот действительно странная часть: по какой-то причине смешивание объявлений taglib 1.0 и 1.1 вызывает только исключение на двух моих серверах, моем промежуточном сервере и моем рабочем сервере. Это не вызывает никаких проблем на моей локальной машине или на моем сервере разработки. Почему это? Что может быть причиной этой разницы в поведении? Три сервера чрезвычайно похожи по настройке и конфигурации.
Страница JSP обслуживается OpenCMS, и я использую веб-сервер Rescho от Caucho. Я понимаю, что вы не знаете, как настроены мои серверы или CMS, но на самом деле я ищу идеи. Любые идеи вообще помогли бы, эта проблема сводила меня с ума. Даже если вы не знаете, что может быть причиной проблемы, если у вас есть какие-либо предложения относительно того, как я мог бы подойти к проблеме, это было бы чрезвычайно полезно. Я просто не понимаю, что может вызвать эту разницу в поведении между моими серверами.
Для справки вот полная трассировка стека:
javax.servlet.jsp.JspException: com.caucho.jsp.JspLineParseException: /WEB-INF/jsp/online/system/modules/com.MYCOMPANY.marketing/templates/common/MY_JSP_PAGE.jsp:1: tag = 'out' / attribute = 'value': An error occurred while parsing custom action attribute "value" with value "${fn:contains(TEXTVARIABLE, '|STRINGOFTEXT|')}": org.apache.taglibs.standard.lang.jstl.parser.ParseException: EL functions are not supported.
at org.opencms.jsp.CmsJspTagInclude.includeActionWithCache(CmsJspTagInclude.java:369)
at org.opencms.jsp.CmsJspTagInclude.includeTagAction(CmsJspTagInclude.java:241)
at org.opencms.jsp.CmsJspTagInclude.doEndTag(CmsJspTagInclude.java:472)
at _jsp._WEB_22dINF._jsp._online._system._modules._com__MYCOMPANY__marketing._templates._MAIN_0PAGE__jsp._jspService(_MAIN_0PAGE__jsp.java:153)
at com.caucho.jsp.JavaPage.service(JavaPage.java:60)
at com.caucho.jsp.Page.pageservice(Page.java:579)
at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:179)
at shared.filter.RemoteAddrFilterBase.doFilter(RemoteAddrFilterBase.java:57)
at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)
at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:115)
at com.caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java:175)
at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:485)
at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:350)
at org.opencms.flex.CmsFlexRequestDispatcher.includeExternal(CmsFlexRequestDispatcher.java:194)
at org.opencms.flex.CmsFlexRequestDispatcher.include(CmsFlexRequestDispatcher.java:169)
at org.opencms.loader.CmsJspLoader.service(CmsJspLoader.java:1193)
at org.opencms.flex.CmsFlexRequestDispatcher.includeInternalWithCache(CmsFlexRequestDispatcher.java:423)
at org.opencms.flex.CmsFlexRequestDispatcher.include(CmsFlexRequestDispatcher.java:173)
at org.opencms.loader.CmsJspLoader.dispatchJsp(CmsJspLoader.java:1227)
at org.opencms.loader.CmsJspLoader.load(CmsJspLoader.java:1171)
at org.opencms.loader.A_CmsXmlDocumentLoader.load(A_CmsXmlDocumentLoader.java:232)
at org.opencms.loader.CmsXmlContentLoader.load(CmsXmlContentLoader.java:52)
at org.opencms.loader.CmsResourceManager.loadResource(CmsResourceManager.java:964)
at org.opencms.main.OpenCmsCore.showResource(OpenCmsCore.java:1498)
at org.opencms.main.OpenCmsServlet.doGet(OpenCmsServlet.java:152)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:115)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:92)
at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:106)
at com.caucho.filters.CmsGzipFilter.doFilter(CmsGzipFilter.java:177)
at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)
at shared.filter.RemoteAddrFilterBase.doFilter(RemoteAddrFilterBase.java:57)
at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)
at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:115)
at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:277)
at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:106)
at com.caucho.server.dispatch.ForwardFilterChain.doFilter(ForwardFilterChain.java:80)
at com.caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java:207)
at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:173)
at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:274)
at com.caucho.server.port.TcpConnection.run(TcpConnection.java:514)
at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:520)
at com.caucho.util.ThreadPool.run(ThreadPool.java:442)
at java.lang.Thread.run(Thread.java:595)
Caused by: com.caucho.jsp.JspLineParseException: /WEB-INF/jsp/online/system/modules/com.MYCOMPANY.marketing/templates/common/MY_JSP_PAGE.jsp:1: tag = 'out' / attribute = 'value': An error occurred while parsing custom action attribute "value" with value "${fn:contains(TEXTVARIABLE, '|STRINGOFTEXT|')}": org.apache.taglibs.standard.lang.jstl.parser.ParseException: EL functions are not supported.
at com.caucho.jsp.java.JspNode.error(JspNode.java:1489)
at com.caucho.jsp.java.JspNode.error(JspNode.java:1480)
at com.caucho.jsp.java.JavaJspGenerator.validate(JavaJspGenerator.java:466)
at com.caucho.jsp.JspCompilerInstance.generate(JspCompilerInstance.java:475)
at com.caucho.jsp.JspCompilerInstance.compile(JspCompilerInstance.java:373)
at com.caucho.jsp.JspManager.compile(JspManager.java:233)
at com.caucho.jsp.JspManager.createPage(JspManager.java:177)
at com.caucho.jsp.JspManager.createPage(JspManager.java:157)
at com.caucho.jsp.PageManager.getPage(PageManager.java:248)
at com.caucho.jsp.PageManager.getPage(PageManager.java:166)
at com.caucho.jsp.QServlet.getSubPage(QServlet.java:292)
at com.caucho.jsp.QServlet.getPage(QServlet.java:210)
at com.caucho.server.dispatch.PageFilterChain.compilePage(PageFilterChain.java:206)
at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:133)
at shared.filter.RemoteAddrFilterBase.doFilter(RemoteAddrFilterBase.java:57)
at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)
at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:115)
at com.caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java:175)
at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:485)
at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:350)
at org.opencms.flex.CmsFlexRequestDispatcher.includeExternal(CmsFlexRequestDispatcher.java:194)
at org.opencms.flex.CmsFlexRequestDispatcher.include(CmsFlexRequestDispatcher.java:169)
at org.opencms.loader.CmsJspLoader.service(CmsJspLoader.java:1193)
at org.opencms.flex.CmsFlexRequestDispatcher.includeInternalWithCache(CmsFlexRequestDispatcher.java:423)
at org.opencms.flex.CmsFlexRequestDispatcher.include(CmsFlexRequestDispatcher.java:173)
at org.opencms.jsp.CmsJspTagInclude.includeActionWithCache(CmsJspTagInclude.java:364)
... 45 more