2010-03-31 70 views
2

當我混合使用JSTL 1.0和JSTL 1.1 taglib聲明時,它會在我的一些服務器上導致ParseException,但不是所有服務器都會導致ParseException。當我混合使用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> 

,這裏是例外:

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':解析自定義操作屬性「值「值爲」$ {fn:contains(TEXTVARIABLE,'| STRINGOFTEXT |')}「:org.apache.taglibs.standard.lang.jstl.parser.ParseException:EL函數不是支持的。

不過,如果我更改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 

回答

3

它可以具有在classpath不同JSTL的版本引起的。換句話說,類路徑被污染了。擺脫所有的JSTL 1.0實現,以便在類路徑中只有JSTL 1.1。 webapp的默認類路徑覆蓋的路徑分別位於Appserver/lib,Webapp/WEB-INF/lib,JRE/lib,,JRE/lib/ext等之下。要確定確切的JSTL版本,請使用ZIP或RAR工具提取jstl.jar並閱讀MANIFEST.MF文件。

相關問題