当我混合使用JSTL 1.0和JSTL 1.1 taglib声明时,它将在我的某些服务器上导致ParseException,但不是所有服务器.为什么? [英] When I mix JSTL 1.0 and JSTL 1.1 taglib declarations, it causes a ParseException on some of my servers, but not all of them. Why?

查看:82
本文介绍了当我混合使用JSTL 1.0和JSTL 1.1 taglib声明时,它将在我的某些服务器上导致ParseException,但不是所有服务器.为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我混合使用JSTL 1.0和JSTL 1.1 taglib声明时,它将在我的某些服务器上而不是所有服务器上导致ParseException.

When I mix JSTL 1.0 and JSTL 1.1 taglib declarations, it causes a ParseException on some of my servers, but not all of them.

这是给我麻烦的代码块:

Here is the block of code that's giving me trouble:

<%@ 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>

这是一个例外:

javax.servlet.jsp.JspException:com.caucho.jsp.JspLineParseException:/WEB-INF/jsp/online/system/modules/com.MYCOMPANY.marketing/templates/common/MY_JSP_PAGE.jsp:1:标记= 'out'/attribute ='value':解析具有值"$ {fn:contains(TEXTVARIABLE,'| STRINGOFTEXT |')}"的自定义操作属性"value"时发生错误:org.apache.taglibs.standard.lang .jstl.parser.ParseException:不支持EL函数.

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

However, everything works fine if I change the URI for the core declaration to http://java.sun.com/jsp/jstl/core

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

So here's the really weird part: for some reason, mixing 1.0 and 1.1 taglib declarations only causes an exception on two of my servers, my staging server and my production server. It causes no problems at all on my local machine or my development server. Why is this? What could possibly be causing this difference in behavior? The three servers are extremely similar in setup and configuration.

OpenCMS正在提供JSP页面,而我正在使用Caucho的Resin Web服务器.我了解您不知道服务器或CMS的设置方式,但实际上,我正在寻找的是创意.任何想法都将有所帮助,这个问题使我无足轻重.即使您不知道是什么原因导致的问题,如果您对我如何解决问题有任何建议,那也将非常有帮助.我只是不明白是什么原因导致服务器之间的这种行为差异.

The JSP page is being served up by OpenCMS, and I'm using the Caucho's Resin webserver. I understand that you don't know how my servers or CMS are set up, but really, what I'm looking for is ideas. Any ideas at all would help, this problem has been driving me absolutely batty. Even if you don't know what could be causing the problem, if you have any suggestions at all for how I could approach the problem, that would be extremely helpful. I just don't understand what could cause this difference in behavior between my servers.

作为参考,这是完整的堆栈跟踪:

For reference, here's the full stack trace :

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. Webapp的默认类路径涵盖的路径在每个Appserver/libWebapp/WEB-INF/libJRE/libJRE/lib/ext等下.要确定确切的JSTL版本,请使用一些ZIP或RAR工具提取jstl.jar并阅读文件.

It can be caused having different JSTL versions in the classpath. In other words, the classpath is polluted. Get rid of all JSTL 1.0 implementations so that you have only JSTL 1.1 in the classpath. Paths covered by the webapp's default classpath are under each Appserver/lib, Webapp/WEB-INF/lib, JRE/lib, JRE/lib/ext, etc. To determine the exact JSTL version, extract jstl.jar with some ZIP or RAR tool and read the MANIFEST.MF file.

这篇关于当我混合使用JSTL 1.0和JSTL 1.1 taglib声明时,它将在我的某些服务器上导致ParseException,但不是所有服务器.为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆