java - 当我混合 JSTL 1.0 和 JSTL 1.1 taglib 声明时,它会在我的某些服务器上导致 ParseException,但不是全部。为什么?

标签 java jsp servlets jstl taglib

当我混合 JSTL 1.0 和 JSTL 1.1 taglib 声明时,它会在我的某些服务器上导致 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>

这是一个异常(exception):

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.

但是,如果我将核心声明的 URI 更改为 http://java.sun.com/jsp/jSTL/core

,则一切正常

所以这是真正奇怪的部分:出于某种原因,混合 1.0 和 1.1 taglib 声明只会导致我的两台服务器(我的登台服务器和我的生产服务器)出现异常。它在我的本地计算机或开发服务器上根本不会造成任何问题。为什么是这样?是什么可能导致这种行为差异?这三台服务器在设置和配置方面非常相似。

JSP 页面由 OpenCMS 提供,我正在使用 Caucho 的 Resin Web 服务器。我知道您不知道我的服务器或 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

最佳答案

这可能是由于类路径中存在不同的 JSTL 版本造成的。换句话说,类路径被污染了。摆脱所有 JSTL 1.0 实现,以便类路径中只有 JSTL 1.1。 Web应用程序的默认类路径覆盖的路径位于每个Appserver/libWebapp/WEB-INF/libJRE/lib下JRE/lib/ext 等。要确定确切的 JSTL 版本,请使用某些 ZIP 或 RAR 工具提取 jSTL.jar 并读取 MANIFEST.MF 文件.

关于java - 当我混合 JSTL 1.0 和 JSTL 1.1 taglib 声明时,它会在我的某些服务器上导致 ParseException,但不是全部。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2555094/

相关文章:

java - gradle - 在 eclipse 的父项目 war 中部署子项目 jar

java - Java泛型可以替代多个相似的类吗?

java - 当我尝试在 OSX 下使用 Tomcat 在 Netbeans 中运行 JSP 项目时,程序挂起

java.lang.NoClassDefFoundError : org/apache/commons/io/output/DeferredFileOutputStream 错误

java - 删除位置管理器不起作用的更新

java - 没有getPackageManager的Android getPackageInfo

java - 我的 Spring MessageSource 设置有什么问题?

java - 我无法运行我的 Maven 项目

java - 是否有可能制定出仍然使用 web.xm 中的 <security-constraint> 的自定义身份验证和授权机制

java - 为什么 response.getWriter() 抛出检查异常?